[ 
https://issues.apache.org/jira/browse/NIFI-8461?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17349069#comment-17349069
 ] 

KevinSky commented on NIFI-8461:
--------------------------------

NIFI-8080caused this, in sigle thread,if it is not first in,compiledScriptRef 
save the first time compiled value,and when executeScript restart, it only 
clear 

ScriptingComponentHelper.engineQ,but scriptEngineConfiguratorMap also has the 
reference of compiledScriptRef. so that is why we see stuck in connections.

in multi thread, compiledScriptRef only save first engine compiled 
CompiledScript. eval() method don't use the true engine to eval,so it always 
throw exception like 
is already marked for transfer in  
or 
is not known in this session 
!image-2021-05-21-16-02-22-044.png|width=993,height=266!

It's hard and unless to binding compiledScriptRef to each engine in 
scriptingComponentHelper.engineQ, We must always bind bindings to engine 
without just complie it,so those code modification might be use:
{code:java}
public class JythonScriptEngineConfigurator implements ScriptEngineConfigurator 
{
    private String prefix = null;

    @Override
    public String getScriptEngineName() {
        return "python";
    }

    @Override
    public URL[] getModuleURLsForClasspath(String[] modulePaths, ComponentLog 
log) {
        // We don't need to add the module paths to the classpath, they will be 
added via sys.path.append
        return new URL[0];
    }

    @Override
    public Object init(ScriptEngine engine, String scriptBody, String[] 
modulePaths) throws ScriptException {
        // Always compile when first run
        if (engine != null) {
                // Add prefix for import sys and all jython modules
                prefix = "import sys\n"
                        + Arrays.stream(modulePaths).map((modulePath) -> 
"sys.path.append(" + PyString.encode_UnicodeEscape(modulePath, true) + ")")
                        .collect(Collectors.joining("\n"));
        }
        return null;
    }

    @Override
    public Object eval(ScriptEngine engine, String scriptBody, String[] 
modulePaths) throws ScriptException {
        Object returnValue = null;
        if (engine != null) {
            returnValue = ((Compilable) engine).compile(prefix + 
scriptBody).eval();
        }
        return returnValue;
    }
}

{code}

> Queue reports items but cannot list them
> ----------------------------------------
>
>                 Key: NIFI-8461
>                 URL: https://issues.apache.org/jira/browse/NIFI-8461
>             Project: Apache NiFi
>          Issue Type: Bug
>          Components: Core Framework
>    Affects Versions: 1.13.2
>         Environment: Docker image apache/nifi :1.13.2, Windows 10 Pro, WSL 2 
> (Ubuntu), x86_64
>            Reporter: Kevin Aagaard
>            Assignee: Matt Burgess
>            Priority: Major
>              Labels: queue
>         Attachments: ExecuteScript_Queue_Issue.txt, NIFI-8461.zip, 
> image-2021-04-22-08-48-58-117.png, image-2021-04-22-08-49-40-904.png, 
> image-2021-04-27-14-23-07-849.png, image-2021-04-27-14-23-24-477.png, 
> image-2021-05-21-16-02-22-044.png
>
>
> The following segment of workflow demonstrates the issue. The queue reports 
> that there are items within it, but they cannot be listed, even after 
> stopping the consumer (and producer). Since this is in a Docker Container, it 
> is unlikely an OS error.
>  
> !image-2021-04-22-08-48-58-117.png!
>  
> !image-2021-04-22-08-49-40-904.png!
> I do not currently have a simplified example workflow to recreate the error, 
> but can work on it.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to