You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by ma...@apache.org on 2022/10/31 17:40:34 UTC
[nifi] branch main updated: NIFI-10711 Made the script runner more debuggable.
This is an automated email from the ASF dual-hosted git repository.
mattyb149 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/main by this push:
new b6d95faa95 NIFI-10711 Made the script runner more debuggable.
b6d95faa95 is described below
commit b6d95faa9535519948f6f278bebf4636a575ebc7
Author: Mike Thomsen <mt...@apache.org>
AuthorDate: Thu Oct 27 07:33:52 2022 -0400
NIFI-10711 Made the script runner more debuggable.
Signed-off-by: Matthew Burgess <ma...@apache.org>
This closes #6590
---
.../org/apache/nifi/processors/script/ExecuteScript.java | 3 +++
.../nifi/processors/script/InvokeScriptedProcessor.java | 3 +++
.../org/apache/nifi/processors/script/ScriptRunner.java | 1 +
.../nifi/processors/script/ScriptedPartitionRecord.java | 3 +++
.../nifi/processors/script/ScriptedRouterProcessor.java | 3 +++
.../nifi/processors/script/ScriptedTransformRecord.java | 3 +++
.../record/script/AbstractScriptedRecordFactory.java | 2 +-
.../org/apache/nifi/script/impl/BaseScriptRunner.java | 15 ++++++++++++++-
.../org/apache/nifi/script/impl/ClojureScriptRunner.java | 16 +++++++++-------
.../org/apache/nifi/script/impl/GroovyScriptRunner.java | 4 ++--
.../org/apache/nifi/script/impl/JythonScriptRunner.java | 9 ++++++---
11 files changed, 48 insertions(+), 14 deletions(-)
diff --git a/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/processors/script/ExecuteScript.java b/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/processors/script/ExecuteScript.java
index 24c946474d..998766a1d6 100644
--- a/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/processors/script/ExecuteScript.java
+++ b/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/processors/script/ExecuteScript.java
@@ -247,6 +247,9 @@ public class ExecuteScript extends AbstractSessionFactoryProcessor implements Se
throw new ProcessException(t);
}
} catch (final Throwable t) {
+ if (getLogger().isDebugEnabled()) {
+ getLogger().debug("Script as executed by NiFi with preloads {}", scriptRunner.getScript());
+ }
// Mimic AbstractProcessor behavior here
getLogger().error("{} failed to process due to {}; rolling back session", this, t);
diff --git a/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/processors/script/InvokeScriptedProcessor.java b/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/processors/script/InvokeScriptedProcessor.java
index 80abbcadd1..5e083e7b74 100644
--- a/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/processors/script/InvokeScriptedProcessor.java
+++ b/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/processors/script/InvokeScriptedProcessor.java
@@ -582,6 +582,9 @@ public class InvokeScriptedProcessor extends AbstractSessionFactoryProcessor {
// run the processor
instance.onTrigger(context, sessionFactory);
} catch (final ProcessException e) {
+ if (getLogger().isDebugEnabled()) {
+ getLogger().debug("Script as executed by NiFi with preloads {}", scriptRunner.getScript());
+ }
final String message = String.format("An error occurred executing the configured Processor [%s]: %s",
context.getProperty(ScriptingComponentUtils.SCRIPT_FILE).getValue(), e);
log.error(message);
diff --git a/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/processors/script/ScriptRunner.java b/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/processors/script/ScriptRunner.java
index dd2278a17d..ce67deae03 100644
--- a/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/processors/script/ScriptRunner.java
+++ b/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/processors/script/ScriptRunner.java
@@ -22,6 +22,7 @@ import javax.script.ScriptEngine;
import javax.script.ScriptException;
public interface ScriptRunner {
+ String getScript();
String getScriptEngineName();
diff --git a/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/processors/script/ScriptedPartitionRecord.java b/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/processors/script/ScriptedPartitionRecord.java
index 2890436cfc..563a33d0e3 100644
--- a/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/processors/script/ScriptedPartitionRecord.java
+++ b/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/processors/script/ScriptedPartitionRecord.java
@@ -132,6 +132,9 @@ public class ScriptedPartitionRecord extends ScriptedRecordProcessor {
final ScriptEngine scriptEngine = scriptRunner.getScriptEngine();
evaluator = createEvaluator(scriptEngine, flowFile);
} catch (final ScriptException se) {
+ if (getLogger().isDebugEnabled()) {
+ getLogger().debug("Script as executed by NiFi with preloads {}", scriptRunner.getScript());
+ }
getLogger().error("Failed to initialize script engine", se);
session.transfer(flowFile, RELATIONSHIP_FAILURE);
return;
diff --git a/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/processors/script/ScriptedRouterProcessor.java b/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/processors/script/ScriptedRouterProcessor.java
index 9cbfbefbfd..7c381d89af 100644
--- a/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/processors/script/ScriptedRouterProcessor.java
+++ b/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/processors/script/ScriptedRouterProcessor.java
@@ -99,6 +99,9 @@ public abstract class ScriptedRouterProcessor<T> extends ScriptedRecordProcessor
final ScriptEngine scriptEngine = scriptRunner.getScriptEngine();
evaluator = createEvaluator(scriptEngine, flowFile);
} catch (final ScriptException se) {
+ if (getLogger().isDebugEnabled()) {
+ getLogger().debug("Script as executed by NiFi with preloads {}", scriptRunner.getScript());
+ }
getLogger().error("Failed to initialize script engine", se);
session.transfer(flowFile, getFailureRelationship());
return;
diff --git a/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/processors/script/ScriptedTransformRecord.java b/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/processors/script/ScriptedTransformRecord.java
index 17723b974a..2a9637ad63 100644
--- a/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/processors/script/ScriptedTransformRecord.java
+++ b/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/processors/script/ScriptedTransformRecord.java
@@ -118,6 +118,9 @@ public class ScriptedTransformRecord extends ScriptedRecordProcessor {
final ScriptEngine scriptEngine = scriptRunner.getScriptEngine();
evaluator = createEvaluator(scriptEngine, flowFile);
} catch (final ScriptException se) {
+ if (getLogger().isDebugEnabled()) {
+ getLogger().debug("Script as executed by NiFi with preloads {}", scriptRunner.getScript());
+ }
getLogger().error("Failed to initialize script engine", se);
session.transfer(flowFile, REL_FAILURE);
return;
diff --git a/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/record/script/AbstractScriptedRecordFactory.java b/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/record/script/AbstractScriptedRecordFactory.java
index 0c5816dc31..2805f61ca9 100644
--- a/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/record/script/AbstractScriptedRecordFactory.java
+++ b/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/record/script/AbstractScriptedRecordFactory.java
@@ -17,8 +17,8 @@
package org.apache.nifi.record.script;
import org.apache.nifi.processor.exception.ProcessException;
-import org.apache.nifi.script.ScriptingComponentHelper;
import org.apache.nifi.script.AbstractScriptedControllerService;
+import org.apache.nifi.script.ScriptingComponentHelper;
import java.util.concurrent.atomic.AtomicReference;
diff --git a/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/script/impl/BaseScriptRunner.java b/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/script/impl/BaseScriptRunner.java
index d3ff616ddd..59b0f8c2dd 100644
--- a/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/script/impl/BaseScriptRunner.java
+++ b/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/script/impl/BaseScriptRunner.java
@@ -17,6 +17,7 @@
package org.apache.nifi.script.impl;
import org.apache.nifi.processors.script.ScriptRunner;
+import org.apache.nifi.util.StringUtils;
import javax.script.ScriptEngine;
@@ -31,13 +32,25 @@ public abstract class BaseScriptRunner implements ScriptRunner {
protected String[] modulePaths;
public BaseScriptRunner(final ScriptEngine engine, final String scriptBody, final String[] modulePaths) {
+ this(engine, scriptBody, null, modulePaths);
+ }
+
+ public BaseScriptRunner(final ScriptEngine engine, final String scriptBody, final String preloads, final String[] modulePaths) {
this.scriptEngine = engine;
- this.scriptBody = scriptBody;
this.modulePaths = modulePaths;
+ if (StringUtils.isNotEmpty(preloads)) {
+ this.scriptBody = preloads + scriptBody;
+ } else {
+ this.scriptBody = scriptBody;
+ }
}
@Override
public ScriptEngine getScriptEngine() {
return scriptEngine;
}
+
+ public String getScript() {
+ return scriptBody;
+ }
}
diff --git a/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/script/impl/ClojureScriptRunner.java b/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/script/impl/ClojureScriptRunner.java
index 67eb59bfc2..51a5778d8e 100644
--- a/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/script/impl/ClojureScriptRunner.java
+++ b/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/script/impl/ClojureScriptRunner.java
@@ -47,7 +47,14 @@ public class ClojureScriptRunner extends BaseScriptRunner {
+ ")\n";
public ClojureScriptRunner(ScriptEngine engine, String scriptBody, String[] modulePaths) {
- super(engine, scriptBody, modulePaths);
+ super(engine, scriptBody, buildPreloads(engine), modulePaths);
+ }
+
+ private static String buildPreloads(ScriptEngine engine) {
+ return "(ns " + ((ClojureScriptEngine) engine).getNamespace() +
+ " " +
+ PRELOADS +
+ ")\n";
}
@Override
@@ -57,12 +64,7 @@ public class ClojureScriptRunner extends BaseScriptRunner {
@Override
public void run(Bindings bindings) throws ScriptException {
- String sb = "(ns " + ((ClojureScriptEngine) scriptEngine).getNamespace() +
- " " +
- PRELOADS +
- ")\n" +
- scriptBody;
scriptEngine.setBindings(bindings, ScriptContext.ENGINE_SCOPE);
- scriptEngine.eval(sb);
+ scriptEngine.eval(scriptBody);
}
}
diff --git a/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/script/impl/GroovyScriptRunner.java b/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/script/impl/GroovyScriptRunner.java
index a99cbfa76e..364c6b003e 100644
--- a/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/script/impl/GroovyScriptRunner.java
+++ b/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/script/impl/GroovyScriptRunner.java
@@ -37,7 +37,7 @@ public class GroovyScriptRunner extends BaseScriptRunner {
+ "import org.apache.nifi.lookup.*\n";
public GroovyScriptRunner(ScriptEngine engine, String scriptBody, String[] modulePaths) {
- super(engine, scriptBody, modulePaths);
+ super(engine, scriptBody, PRELOADS, modulePaths);
}
@Override
@@ -48,6 +48,6 @@ public class GroovyScriptRunner extends BaseScriptRunner {
@Override
public void run(Bindings bindings) throws ScriptException {
scriptEngine.setBindings(bindings, ScriptContext.ENGINE_SCOPE);
- scriptEngine.eval(PRELOADS + scriptBody);
+ scriptEngine.eval(scriptBody);
}
}
diff --git a/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/script/impl/JythonScriptRunner.java b/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/script/impl/JythonScriptRunner.java
index e178bb9532..89cb3eebbf 100644
--- a/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/script/impl/JythonScriptRunner.java
+++ b/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/main/java/org/apache/nifi/script/impl/JythonScriptRunner.java
@@ -34,12 +34,15 @@ public class JythonScriptRunner extends BaseScriptRunner {
private final CompiledScript compiledScript;
public JythonScriptRunner(ScriptEngine engine, String scriptBody, String[] modulePaths) throws ScriptException {
- super(engine, scriptBody, modulePaths);
+ super(engine, scriptBody, buildPreloads(modulePaths), modulePaths);
// Add prefix for import sys and all jython modules
- String prefix = "import sys\n"
+ compiledScript = ((Compilable) engine).compile(this.scriptBody);
+ }
+
+ private static String buildPreloads(String[] modulePaths) {
+ return "import sys\n"
+ Arrays.stream(modulePaths).map((modulePath) -> "sys.path.append(" + PyString.encode_UnicodeEscape(modulePath, true) + ")")
.collect(Collectors.joining("\n")) + "\n";
- compiledScript = ((Compilable) engine).compile(prefix + scriptBody);
}
@Override