[jira] [Commented] (TINKERPOP-1230) Serialising lambdas for RemoteGraph
[ https://issues.apache.org/jira/browse/TINKERPOP-1230?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15455906#comment-15455906 ] Michael Pollmeier commented on TINKERPOP-1230: -- Thanks for your thoughts Stephen. Dropping additional libs into DSE sounds doable yet dangerous. If I did so, would I be able to call my code though? I'd need some plugin system, e.g. to define an endpoint that's being exposed that then calls my code. If I read the OpProcessor interface right then this could do it for websocket? Is there a similar way for http? > Serialising lambdas for RemoteGraph > --- > > Key: TINKERPOP-1230 > URL: https://issues.apache.org/jira/browse/TINKERPOP-1230 > Project: TinkerPop > Issue Type: Improvement > Components: driver, server >Affects Versions: 3.1.1-incubating >Reporter: Michael Pollmeier >Assignee: Marko A. Rodriguez >Priority: Minor > Fix For: 3.2.2 > > > I just made an attempt to serialise lambdas and send them via the > RemoteGraph. I didn't quite get there, but wanted to share my findings: > * it's possible to serialise lambdas on the jvm by just extending > `Serializable`: > http://stackoverflow.com/questions/22807912/how-to-serialize-a-lambda/22808112#22808112 > * sending a normal predicate doesn't work (this is a Scala REPL but it should > be pretty easy to convert this to java/groovy) > val g = RemoteGraph.open("conf/remote-graph.properties").traversal() > val pred1 = new java.util.function.Predicate[Traverser[Vertex]] { def > test(v: Traverser[Vertex]) = true } > g.V().filter(pred1).toList > // java.lang.RuntimeException: java.io.NotSerializableException: $anon$1 > // on server: nothing > > * simply adding Serializable let's us send it over the wire, but the server > doesn't deserialise it > val pred2 = new java.util.function.Predicate[Traverser[Vertex]] with > Serializable { def test(v: Traverser[Vertex]) = true } > g.V().filter(pred2).toList > // on server: [WARN] OpExecutorHandler - Could not deserialize the > Traversal instance > org.apache.tinkerpop.gremlin.server.op.OpProcessorException: Could > not deserialize the Traversal instance > at > org.apache.tinkerpop.gremlin.server.op.traversal.TraversalOpProcessor.iterateOp(TraversalOpProcessor.java:135) > at > org.apache.tinkerpop.gremlin.server.handler.OpExecutorHandler.channelRead0(OpExecutorHandler.java:68) > // on client: > org.apache.tinkerpop.gremlin.driver.exception.ResponseException: $anon$1 -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (TINKERPOP-1230) Serialising lambdas for RemoteGraph
[ https://issues.apache.org/jira/browse/TINKERPOP-1230?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15449827#comment-15449827 ] Michael Pollmeier commented on TINKERPOP-1230: -- Sorry for mixing up the versions of documentation. The 'lambda' solution is sending code as strings over the wire, that's not quite what I had in mind. It doesn't really matter for dynamic languages, but if used with a statically compiled language like Scala or Java you lose all the help from the compiler / IDE. I see what you're saying re my lambda serialisation project - not ideal. Another option would be to allow to extend gremlin-server with some endpoints and additional libraries - the current plugin system is not powerful enough for that task, is it? One of the things I'm trying to figure out is how I can use Gremlin-Scala with DSE graph. I'm having a hard time to see how that could work, since DSE is closed source and doesn't really allow to extend it with additional libraries. But since DSE doesn't have a remote protocol (unlike Titan) and I can't really send remote queries to the integrated Gremlin Server (at least not without losing all the help from the compiler), I don't currently see a way to integrate with it. If this is not the right place to discuss such matters, just let me know - maybe chat is better? > Serialising lambdas for RemoteGraph > --- > > Key: TINKERPOP-1230 > URL: https://issues.apache.org/jira/browse/TINKERPOP-1230 > Project: TinkerPop > Issue Type: Improvement > Components: driver, server >Affects Versions: 3.1.1-incubating >Reporter: Michael Pollmeier >Assignee: Marko A. Rodriguez >Priority: Minor > Fix For: 3.2.2 > > > I just made an attempt to serialise lambdas and send them via the > RemoteGraph. I didn't quite get there, but wanted to share my findings: > * it's possible to serialise lambdas on the jvm by just extending > `Serializable`: > http://stackoverflow.com/questions/22807912/how-to-serialize-a-lambda/22808112#22808112 > * sending a normal predicate doesn't work (this is a Scala REPL but it should > be pretty easy to convert this to java/groovy) > val g = RemoteGraph.open("conf/remote-graph.properties").traversal() > val pred1 = new java.util.function.Predicate[Traverser[Vertex]] { def > test(v: Traverser[Vertex]) = true } > g.V().filter(pred1).toList > // java.lang.RuntimeException: java.io.NotSerializableException: $anon$1 > // on server: nothing > > * simply adding Serializable let's us send it over the wire, but the server > doesn't deserialise it > val pred2 = new java.util.function.Predicate[Traverser[Vertex]] with > Serializable { def test(v: Traverser[Vertex]) = true } > g.V().filter(pred2).toList > // on server: [WARN] OpExecutorHandler - Could not deserialize the > Traversal instance > org.apache.tinkerpop.gremlin.server.op.OpProcessorException: Could > not deserialize the Traversal instance > at > org.apache.tinkerpop.gremlin.server.op.traversal.TraversalOpProcessor.iterateOp(TraversalOpProcessor.java:135) > at > org.apache.tinkerpop.gremlin.server.handler.OpExecutorHandler.channelRead0(OpExecutorHandler.java:68) > // on client: > org.apache.tinkerpop.gremlin.driver.exception.ResponseException: $anon$1 -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (TINKERPOP-1230) Serialising lambdas for RemoteGraph
[ https://issues.apache.org/jira/browse/TINKERPOP-1230?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15446794#comment-15446794 ] Marko A. Rodriguez commented on TINKERPOP-1230: --- What does the GLV tutorial need updating with? Please see 3.2.2-SNAPSHOT tutorial. > Serialising lambdas for RemoteGraph > --- > > Key: TINKERPOP-1230 > URL: https://issues.apache.org/jira/browse/TINKERPOP-1230 > Project: TinkerPop > Issue Type: Improvement > Components: driver, server >Affects Versions: 3.1.1-incubating >Reporter: Michael Pollmeier >Assignee: Marko A. Rodriguez >Priority: Minor > Fix For: 3.2.2 > > > I just made an attempt to serialise lambdas and send them via the > RemoteGraph. I didn't quite get there, but wanted to share my findings: > * it's possible to serialise lambdas on the jvm by just extending > `Serializable`: > http://stackoverflow.com/questions/22807912/how-to-serialize-a-lambda/22808112#22808112 > * sending a normal predicate doesn't work (this is a Scala REPL but it should > be pretty easy to convert this to java/groovy) > val g = RemoteGraph.open("conf/remote-graph.properties").traversal() > val pred1 = new java.util.function.Predicate[Traverser[Vertex]] { def > test(v: Traverser[Vertex]) = true } > g.V().filter(pred1).toList > // java.lang.RuntimeException: java.io.NotSerializableException: $anon$1 > // on server: nothing > > * simply adding Serializable let's us send it over the wire, but the server > doesn't deserialise it > val pred2 = new java.util.function.Predicate[Traverser[Vertex]] with > Serializable { def test(v: Traverser[Vertex]) = true } > g.V().filter(pred2).toList > // on server: [WARN] OpExecutorHandler - Could not deserialize the > Traversal instance > org.apache.tinkerpop.gremlin.server.op.OpProcessorException: Could > not deserialize the Traversal instance > at > org.apache.tinkerpop.gremlin.server.op.traversal.TraversalOpProcessor.iterateOp(TraversalOpProcessor.java:135) > at > org.apache.tinkerpop.gremlin.server.handler.OpExecutorHandler.channelRead0(OpExecutorHandler.java:68) > // on client: > org.apache.tinkerpop.gremlin.driver.exception.ResponseException: $anon$1 -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (TINKERPOP-1230) Serialising lambdas for RemoteGraph
[ https://issues.apache.org/jira/browse/TINKERPOP-1230?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15419336#comment-15419336 ] stephen mallette commented on TINKERPOP-1230: - A method for lambda serialization was implemented on TINKERPOP-1278 as part of the work on gremlin-python. This issue will close with that one. > Serialising lambdas for RemoteGraph > --- > > Key: TINKERPOP-1230 > URL: https://issues.apache.org/jira/browse/TINKERPOP-1230 > Project: TinkerPop > Issue Type: Improvement > Components: driver, server >Affects Versions: 3.1.1-incubating >Reporter: Michael Pollmeier >Priority: Minor > > I just made an attempt to serialise lambdas and send them via the > RemoteGraph. I didn't quite get there, but wanted to share my findings: > * it's possible to serialise lambdas on the jvm by just extending > `Serializable`: > http://stackoverflow.com/questions/22807912/how-to-serialize-a-lambda/22808112#22808112 > * sending a normal predicate doesn't work (this is a Scala REPL but it should > be pretty easy to convert this to java/groovy) > val g = RemoteGraph.open("conf/remote-graph.properties").traversal() > val pred1 = new java.util.function.Predicate[Traverser[Vertex]] { def > test(v: Traverser[Vertex]) = true } > g.V().filter(pred1).toList > // java.lang.RuntimeException: java.io.NotSerializableException: $anon$1 > // on server: nothing > > * simply adding Serializable let's us send it over the wire, but the server > doesn't deserialise it > val pred2 = new java.util.function.Predicate[Traverser[Vertex]] with > Serializable { def test(v: Traverser[Vertex]) = true } > g.V().filter(pred2).toList > // on server: [WARN] OpExecutorHandler - Could not deserialize the > Traversal instance > org.apache.tinkerpop.gremlin.server.op.OpProcessorException: Could > not deserialize the Traversal instance > at > org.apache.tinkerpop.gremlin.server.op.traversal.TraversalOpProcessor.iterateOp(TraversalOpProcessor.java:135) > at > org.apache.tinkerpop.gremlin.server.handler.OpExecutorHandler.channelRead0(OpExecutorHandler.java:68) > // on client: > org.apache.tinkerpop.gremlin.driver.exception.ResponseException: $anon$1 -- This message was sent by Atlassian JIRA (v6.3.4#6332)