You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tinkerpop.apache.org by "stephen mallette (JIRA)" <ji...@apache.org> on 2018/09/21 11:24:00 UTC

[jira] [Closed] (TINKERPOP-2042) Bytecode to GLV translation broken for E()

     [ https://issues.apache.org/jira/browse/TINKERPOP-2042?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

stephen mallette closed TINKERPOP-2042.
---------------------------------------
    Resolution: Won't Do

> Bytecode to GLV translation broken for E()
> ------------------------------------------
>
>                 Key: TINKERPOP-2042
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP-2042
>             Project: TinkerPop
>          Issue Type: Bug
>         Environment: Java GLV
>            Reporter: Daniel Choi
>            Priority: Major
>
> _g.E().fold().coalesce(unfold(), g.E())_ is a valid traversal that can be evaluated if submitted to a gremlin server in String execution mode (i.e., via console or http).  However if the same traversal is submitted as bytecode, the server throws an error while translating the bytecode back to GLV (perhaps GLV is not the technically correct term here, I mean when the bytecode is translated back to gremlin objects in the server's respective language stack).
>  
> Stack Trace:
> java.lang.IllegalStateException: Could not locate method: DefaultGraphTraversal.E()
> 0 = \{StackTraceElement@10575} "org.apache.tinkerpop.gremlin.jsr223.JavaTranslator.invokeMethod(JavaTranslator.java:202)"
>  1 = \{StackTraceElement@10576} "org.apache.tinkerpop.gremlin.jsr223.JavaTranslator.translateObject(JavaTranslator.java:111)"
>  2 = \{StackTraceElement@10577} "org.apache.tinkerpop.gremlin.jsr223.JavaTranslator.invokeMethod(JavaTranslator.java:195)"
>  3 = \{StackTraceElement@10578} "org.apache.tinkerpop.gremlin.jsr223.JavaTranslator.translate(JavaTranslator.java:87)"
>  4 = \{StackTraceElement@10579} "org.apache.tinkerpop.gremlin.server.op.traversal.TraversalOpProcessor.iterateBytecodeTraversal(TraversalOpProcessor.java:370)"
>  5 = \{StackTraceElement@10580} "org.apache.tinkerpop.gremlin.server.handler.OpExecutorHandler.channelRead0(OpExecutorHandler.java:74)"
>  6 = \{StackTraceElement@10581} "org.apache.tinkerpop.gremlin.server.handler.OpExecutorHandler.channelRead0(OpExecutorHandler.java:49)"
> ...
>  
> This is because E() is not part of GraphTraversal.  The commit that introduced V() into GraphTraversal didn't seem to specify any reasons particularly against also having E() as part of GraphTraversal: [https://github.com/apache/tinkerpop/commit/5c5bd06ebbd4ad6781ba46349ebb638f93b4f469].  It'd be a more consistent user experience to also have E() as part of GraphTraversal so that it can be used mid-traversal similar to V().
>  
> Tested on a Java gremlin server, but I suspect this would apply to all other flavors if GLV spec mandates E() not be part of GraphTraversal.
>  
>  
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)