You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tinkerpop.apache.org by "Michael Pollmeier (JIRA)" <ji...@apache.org> on 2016/09/01 16:23:20 UTC

[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&focusedCommentId=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)