treasure-data / digdag

Workload Automation System
https://www.digdag.io/
Apache License 2.0
1.3k stars 221 forks source link

Easier to understand error log when query embedded parameter is not defined #94

Closed rbparrish closed 7 years ago

rbparrish commented 8 years ago

Current the error for when a parameter is not created, or does not have a value is not obvious. In such instances the error log should say "parameter or template named _____ is not found.", or something similar.

This how the error currently shows up, for a td> operator query with a undefined parameter embedded within the query

`2016-05-16 22:58:05 -0700 ERROR: Task failed io.digdag.client.config.ConfigException: Failed to load a template file at io.digdag.spi.TemplateEngine.templateCommand(TemplateEngine.java:30) at io.digdag.standards.operator.td.TdOperatorFactory$TdOperator.runTask(TdOperatorFactory.java:87) at io.digdag.standards.operator.BaseOperator.run(BaseOperator.java:49) at io.digdag.core.agent.OperatorManager.callExecutor(OperatorManager.java:255) at io.digdag.cli.Run$OperatorManagerWithSkip.callExecutor(Run.java:661) at io.digdag.core.agent.OperatorManager.runWithWorkspace(OperatorManager.java:200) at io.digdag.core.agent.OperatorManager.lambda$runWithHeartbeat$1(OperatorManager.java:129) at io.digdag.core.agent.NoopWorkspaceManager.withExtractedArchive(NoopWorkspaceManager.java:20) at io.digdag.core.agent.OperatorManager.runWithHeartbeat(OperatorManager.java:128) at io.digdag.core.agent.OperatorManager.run(OperatorManager.java:105) at io.digdag.cli.Run$OperatorManagerWithSkip.run(Run.java:643) at io.digdag.core.agent.LocalAgent.lambda$run$0(LocalAgent.java:61) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: io.digdag.spi.TemplateException: Failed to evaluate JavaScript code: SELECT count(*) FROM ${table_name} at io.digdag.core.agent.ConfigEvalEngine.invokeTemplate(ConfigEvalEngine.java:91) at io.digdag.core.agent.ConfigEvalEngine.template(ConfigEvalEngine.java:185) at io.digdag.core.agent.ConfigEvalEngine.templateFile(ConfigEvalEngine.java:206) at io.digdag.spi.TemplateEngine.templateCommand(TemplateEngine.java:27) ... 16 common frames omitted Caused by: javax.script.ScriptException: ReferenceError: "table_name" is not defined in at line number 4 at jdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:467) at jdk.nashorn.api.scripting.NashornScriptEngine.invokeImpl(NashornScriptEngine.java:389) at jdk.nashorn.api.scripting.NashornScriptEngine.invokeFunction(NashornScriptEngine.java:190) at io.digdag.core.agent.ConfigEvalEngine.invokeTemplate(ConfigEvalEngine.java:88) ... 19 common frames omitted Caused by: jdk.nashorn.internal.runtime.ECMAException: ReferenceError: "tablename" is not defined at jdk.nashorn.internal.runtime.ECMAErrors.error(ECMAErrors.java:57) at jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:319) at jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:291) at jdk.nashorn.internal.objects.Global.noSuchProperty(Global.java:1428) at jdk.nashorn.internal.scripts.Script$Recompilation$32$13$^function.L:1(:4) at jdk.nashorn.internal.scripts.Script$Recompilation$28$62AA$^eval_.template(:56) at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:627) at jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:494) at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:393) at jdk.nashorn.api.scripting.ScriptObjectMirror.callMember(ScriptObjectMirror.java:199) at jdk.nashorn.api.scripting.NashornScriptEngine.invokeImpl(NashornScriptEngine.java:383) ... 21 common frames omitted error:

The query: SELECT count(*) FROM ${table_name}

komamitsu commented 7 years ago

@rbparrish It seems this issue is already fixed.

2016-10-17 13:18:10 +0900 [ERROR] (0031@+pgtest+hoge): Configuration error at task +pgtest+hoge: Failed to evaluate a variable SELECT '${session_timex}' as s
 (ReferenceError: "session_timex" is not defined) in queries/hoge.sql (config)