What is MyRunnable? Can you try:

        a -> a+1 

Not a double void.

Marko.

http://markorodriguez.com

On May 11, 2015, at 2:55 PM, Bryn Cooke <[email protected]> wrote:

> I'm not sure I follow.
> 
> I serialised this:
> 
> () -> System.out.println("test")
> 
> And loaded it with this:
> 
> ObjectInputStream in = new ObjectInputStream(new 
> FileInputStream("/home/bryn/test.lambda"));
> MyRunnable readObject = (MyRunnable) in.readObject();
> readObject.run();//Prints test
> 
> Is this what we are looking for?
> 
> Bryn
> 
> 
> On 11/05/15 21:45, Marko Rodriguez wrote:
>> Hi,
>> 
>> Yes, you you can serialize an instance of a Class<? extends Function>, but 
>> you can't just serialize a -> a+1.
>> 
>> This is what you mean, right?
>> 
>> Marko.
>> 
>> http://markorodriguez.com
>> 
>> On May 11, 2015, at 2:41 PM, Bryn Cooke <[email protected]> wrote:
>> 
>>> Hi,
>>> 
>>> Yes I just tried it and it did just work, no hackery required.
>>> The proviso is that the lambda class must exist on the target VM even if it 
>>> is not invoked.
>>> As long as you send the lambda classes and rehydrate the pipeline in a 
>>> classloader that contains those classes I guess you'll be OK.
>>> 
>>> Bryn
>>> 
>>> 
>>> 
>>> On 11/05/15 19:05, Marko Rodriguez wrote:
>>>> Hi,
>>>> 
>>>> Did you try doing this across JVMs? Its possible to serialize a lambda 
>>>> within a JVM (easily), but not across JVMs.
>>>> 
>>>> Marko.
>>>> 
>>>> http://markorodriguez.com
>>>> 
>>>> On May 11, 2015, at 9:47 AM, Bryn Cooke <[email protected]> wrote:
>>>> 
>>>>> Hmm, I just gave it a go and didn't have to do anything to successfully 
>>>>> serialize a Lambda. It just worked.
>>>>> 
>>>>> As long as you don't reference anything outside the lambda it's fine. If 
>>>>> you do then you get a java.io.NotSerializableException.
>>>>> 
>>>>> Bryn
>>>>> 
>>>>> 
>>>>> On 11/05/15 16:22, Marko Rodriguez wrote:
>>>>>> Hi Bryn,
>>>>>> 
>>>>>> Huh. That is how you "dehydrate()" a closure in Groovy. What is the 
>>>>>> field name of the "it" in a Java8 lambda? If we could figure that out, 
>>>>>> then we could have nice "static dehydrate()" and "static hydrate()"  
>>>>>> helpers in gremlin-core/function.
>>>>>> 
>>>>>> Good stuff,
>>>>>> Marko.
>>>>>> 
>>>>>> http://markorodriguez.com
>>>>>> 
>>>>>> On May 11, 2015, at 9:19 AM, Bryn Cooke <[email protected]> wrote:
>>>>>> 
>>>>>>> Hi Marko,
>>>>>>> 
>>>>>>> Just in case Kryo 3 doesn't serialialize lambdas in the way you expect 
>>>>>>> it would be worth trying to null out the reference to the outer object 
>>>>>>> in the lambda object using reflection. I *believe* that this is the 
>>>>>>> only thing stopping serialization using the standard Java Seriazable 
>>>>>>> mechanism.
>>>>>>> 
>>>>>>> Bryn
>>>>>>> 
>>>>>>> On 11/05/15 16:06, Marko Rodriguez wrote:
>>>>>>>> Hi,
>>>>>>>> 
>>>>>>>>> SubgraphStrategyTest contains test cases that access both vertices 
>>>>>>>>> incident
>>>>>>>>> on edges which isn't allowed under GraphComputer semantics. It 
>>>>>>>>> silently
>>>>>>>>> passes in GraphComputerTest because the TP3 implementations ignore 
>>>>>>>>> those
>>>>>>>>> cases. I believe implementations should throw an exception on such 
>>>>>>>>> access.
>>>>>>>>> This example demonstrates how easy it is to end up with difficult to 
>>>>>>>>> find
>>>>>>>>> bugs otherwise. We would put a high burden on the user to write unit 
>>>>>>>>> tests
>>>>>>>>> for their strategies to make sure they detect those cases where it 
>>>>>>>>> makes a
>>>>>>>>> difference.
>>>>>>>> Yes. I agree that StarGraph should throw and exception when, right 
>>>>>>>> now, it returns Collections.emptyIterator().
>>>>>>>> 
>>>>>>>> I will add to the GraphComputer TestSuite verification of the topology 
>>>>>>>> of the "star vertex" so that all vendors have the same accessible data 
>>>>>>>> and the same Exceptions thrown.
>>>>>>>> 
>>>>>>>>> Moreover, we should think about such FilterStrategies in general. 
>>>>>>>>> Should
>>>>>>>>> there be a way to restrict them to just stargraph access to ensure 
>>>>>>>>> that
>>>>>>>>> they always work in GraphComputer? Basically, I think it would be 
>>>>>>>>> great to
>>>>>>>>> avoid a case where a strategy works in OLTP but doesn't in OLAP 
>>>>>>>>> because
>>>>>>>>> most people would probably implement it for OLTP first. This is
>>>>>>>>> particularly true for SubgraphStrategies where you try to restrict 
>>>>>>>>> access.
>>>>>>>> There are various situations in which OLAP and OLTP do not line up. 
>>>>>>>> However, I don't think we should restrict OLTP to be that which OLAP 
>>>>>>>> can handle. Primarily because many of the limitations of OLAP will be 
>>>>>>>> solved in the future. Here is the list as I know them:
>>>>>>>> 
>>>>>>>>        1. OLAP does not support mutating steps (addV(), addE(), etc.). 
>>>>>>>> This is because we haven't come up with a good model for mutating in 
>>>>>>>> OLAP.
>>>>>>>>                - The latest idea on this is the "GraphMutator" 
>>>>>>>> interface that all OLAP vendors should supply, blah blah.
>>>>>>>>                - In essence, it will happens, just not right now 
>>>>>>>> (3.1+).
>>>>>>>>        2. OLAP does not support lambdas. This is because Java8 lambdas 
>>>>>>>> are not serializable.
>>>>>>>>                - We can fake this with passing Groovy strings, but its 
>>>>>>>> not "true" Gremlin-Java8.
>>>>>>>>                - Kryo3 supposedly figured out a way to serialize Java8 
>>>>>>>> lambdas -- perhaps our savior?
>>>>>>>>                -  In essence, it will happen, just not right now.
>>>>>>>>        3. OLAP does not support mid-traversal barriers (i.e. 
>>>>>>>> g.V.count().is(gt(100))). This is because a barrier step requires a 
>>>>>>>> MapReduce and we can't go MapReduce -> VertexProgram.
>>>>>>>>                - There is a ticket to support OLAP->OLTP->OLAP which 
>>>>>>>> will all this.
>>>>>>>>                - In essence, it will happen, just not right now.
>>>>>>>>        4. OLAP does not support non-graph object processing (i.e. 
>>>>>>>> __.(1,2,3,4).order(local).by(incr).sum() in OLAP (i.e. no graph 
>>>>>>>> objects)).
>>>>>>>>                - This is possible (and actually not that hard) and 
>>>>>>>> there is a ticket for it.
>>>>>>>>                - In essence, it will happen, just not right now.
>>>>>>>>        5. OLAP localTraversals can not leave "the star graph."
>>>>>>>>                - This is because we don't have that data available 
>>>>>>>> locally, though, I don't see why we can't solve this with 
>>>>>>>> "TraverserSet -- scoping" in OLAP.
>>>>>>>>                - The solution would be complex to write, but doable. 
>>>>>>>> The way TraveralMatrix works in OLAP, the code is staged for this.
>>>>>>>>                - In essence, it will happen, just not right now.
>>>>>>>>        6. OLAP does not support MatchStep.
>>>>>>>>                - There is currently no thoughts on solving this, but I 
>>>>>>>> suspect its a natural fall out once 4 is complete.
>>>>>>>>                - In essence, it will happen, just not right now.
>>>>>>>> 
>>>>>>>> So, while OLAP and OLTP differ, I would not restrict OLTP to be what 
>>>>>>>> OLAP can do. What we could do is make the 
>>>>>>>> ComputerVerificationStrategy's analysis easily accessible to users. 
>>>>>>>> For instance:
>>>>>>>> 
>>>>>>>>        ComputerVerificationStrategy.check(myTraversal) // which is 
>>>>>>>> simply a call to 
>>>>>>>> ComputerVerificationStrategy.instance().apply(myTraversal) :)
>>>>>>>> 
>>>>>>>> This way, a user can easily determine if their traversal will work on 
>>>>>>>> OLAP without having to actually try and execute the job. One of the 
>>>>>>>> things that Daniel Kuppitz is working on is making sure that 
>>>>>>>> ComputerVerificationStrategy is able to identify the 5 areas above and 
>>>>>>>> throw the appropriate exception explaining "why" to the user. As we 
>>>>>>>> move forward with 3.1, 3.2, 3.3, etc. hopefully the list becomes 
>>>>>>>> smaller and smaller.
>>>>>>>> 
>>>>>>>> Thanks,
>>>>>>>> Marko.
>>>>>>>> 
>>>>>>>> http://markorodriguez.com
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>> 
> 

Reply via email to