Daniel C. Weber created TINKERPOP-2323:
------------------------------------------

             Summary: 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


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:
 
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))]]
 

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

 

Regards,

Daniel

 

 

 

(a)

 
{
  "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"
    }
  }
}
 
(b)
 
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)



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

Reply via email to