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 2019/12/18 20:26:00 UTC

[jira] [Commented] (TINKERPOP-2323) Bindings in P-arguments don't work when (de)serializing from/to bytecode

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

Stephen Mallette commented on TINKERPOP-2323:
---------------------------------------------

Funny that this is a workaround on {{tp33}} but it fails (locks up the build actually) on {{tp34}}:

{code}
results = g.V().has('person', 'age', ('x', lt(30))).count().next()
assert 2 == results
{code}

I guess we should get this working properly but something inherent to {{P}} construction is preventing it from working right - when I tried to fix it I ended up with failing tests around {{and()}} from the GLV test suite. Not sure what's wrong there.

> Bindings in P-arguments don't work when (de)serializing from/to bytecode
> ------------------------------------------------------------------------
>
>                 Key: TINKERPOP-2323
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP-2323
>             Project: TinkerPop
>          Issue Type: Bug
>          Components: process, structure
>    Affects Versions: 3.4.4
>         Environment: Windows 10, Java 1.8.0_231
>            Reporter: Daniel C. Weber
>            Priority: Major
>
> The query below (a) in bytecode format represents the query "g.V().hasLabel('Person').has('Age), gt(30))" and contains a binding as an argument to P.gt. When sent over Websocket to Gremlin Serve 3.4.4, it leads to the exception (b) on the server.
> Furthermore, running the following query in Gremlin Console 3.4.4 suggests that bindings are not serialized to bytecode if in a predicate:
> {code} 
> gremlin> g.V().has(b.of('z','person'),b.of('y','age'),P.gt(b.of('x',30))).getBytecode()
> ==>[[], [V(), has(binding[z=person], binding[y=age], gt(30))]]
> {code} 
> There's a corresponding discussion in gremlin-users: [https://groups.google.com/forum/#!topic/gremlin-users/ltVdaxSQY1s]
> There also has been a previous issue dealing with gremlinpython that was closed as "not a problem": https://issues.apache.org/jira/browse/TINKERPOP-1887
> (a)
> {code}
> {
>   "requestId": "c210d51a-42de-4906-b4c7-8af5d21d6024",
>   "op": "bytecode",
>   "processor": "traversal",
>   "args": {
>     "gremlin": {
>       "@type": "g:Bytecode",
>       "@value": {
>         "step": [
>           [
>             "V"
>           ],
>           [
>             "hasLabel",
>             {
>               "@type": "g:Binding",
>               "@value": {
>                 "value": "Person",
>                 "key": "_a"
>               }
>             }
>           ],
>           [
>             "has",
>             {
>               "@type": "g:Binding",
>               "@value": {
>                 "value": "Age",
>                 "key": "_b"
>               }
>             },
>             {
>               "@type": "g:P",
>               "@value": {
>                 "predicate": "gt",
>                 "value": {
>                   "@type": "g:Binding",
>                   "@value": {
>                     "value": {
>                       "@type": "g:Int32",
>                       "@value": 30
>                     },
>                     "key": "_c"
>                   }
>                 }
>               }
>             }
>           ]
>         ]
>       }
>     },
>     "aliases": {
>       "g": "g"
>     }
>   }
> }
> {code}
>  
> (b)
> {code} 
> java.lang.IllegalArgumentException: Cannot compare '29' (Integer) and 'binding[_c=30]' (Binding) as both need to be an instance of Number or Comparable (and of the same type)
>         at org.apache.tinkerpop.gremlin.process.traversal.Compare.throwException(Compare.java:193)
>         at org.apache.tinkerpop.gremlin.process.traversal.Compare.access$300(Compare.java:34)
>         at org.apache.tinkerpop.gremlin.process.traversal.Compare$3.test(Compare.java:96)
>         at org.apache.tinkerpop.gremlin.process.traversal.P.test(P.java:72)
>         at org.apache.tinkerpop.gremlin.process.traversal.step.util.HasContainer.testValue(HasContainer.java:118)
>         at org.apache.tinkerpop.gremlin.process.traversal.step.util.HasContainer.test(HasContainer.java:94)
>         at org.apache.tinkerpop.gremlin.process.traversal.step.util.HasContainer.testAll(HasContainer.java:180)
>         at org.apache.tinkerpop.gremlin.tinkergraph.process.traversal.step.sideEffect.TinkerGraphStep.iteratorList(TinkerGraphStep.java:133)
>         at org.apache.tinkerpop.gremlin.tinkergraph.process.traversal.step.sideEffect.TinkerGraphStep.vertices(TinkerGraphStep.java:101)
>         at org.apache.tinkerpop.gremlin.tinkergraph.process.traversal.step.sideEffect.TinkerGraphStep.lambda$new$0(TinkerGraphStep.java:65)
>         at org.apache.tinkerpop.gremlin.process.traversal.step.map.GraphStep.processNextStart(GraphStep.java:157)
>         at org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep.hasNext(AbstractStep.java:143)
>         at org.apache.tinkerpop.gremlin.process.traversal.step.util.ExpandableStepIterator.next(ExpandableStepIterator.java:50)
>         at org.apache.tinkerpop.gremlin.process.traversal.step.map.MapStep.processNextStart(MapStep.java:36)
>         at org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep.hasNext(AbstractStep.java:143)
>         at org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal.hasNext(DefaultTraversal.java:197)
>         at org.apache.tinkerpop.gremlin.server.util.TraverserIterator.fillBulker(TraverserIterator.java:69)
>         at org.apache.tinkerpop.gremlin.server.util.TraverserIterator.hasNext(TraverserIterator.java:56)
>         at org.apache.tinkerpop.gremlin.server.op.traversal.TraversalOpProcessor.handleIterator(TraversalOpProcessor.java:512)
>         at org.apache.tinkerpop.gremlin.server.op.traversal.TraversalOpProcessor.lambda$iterateBytecodeTraversal$4(TraversalOpProcessor.java:411)
>         at java.util.concurrent.FutureTask.run(Unknown Source)
>         at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
>         at java.util.concurrent.FutureTask.run(Unknown Source)
>         at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
>         at java.lang.Thread.run(Unknown Source)
> {code}



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