[infinispan-dev] distributed execution - invoking commands on self

Mircea Markus mircea.markus at jboss.com
Tue Apr 12 13:47:50 EDT 2011


On 12 Apr 2011, at 18:45, Vladimir Blagojevic wrote:

> Yeah, it would be too strict to require Callable to be Cloneable so I would opt out to serialization/deserialization as a clone method.
yes, but you can still check to see if the Callable is Clonable first. Only if it is not use serialization (less effcicient) 
> 
> Galder, do out have a recommended mechanism for this in your marshalers?
> 
> Thanks Mircea
> 
> On 11-04-12 12:59 PM, Mircea Markus wrote:
>> can't you run the Callable locally on a clone of it? If Callable is Clonable then clone it in an orthodox manner, otherwise clone it by serializing/deseralizing it.
>> 
>> On 11 Apr 2011, at 19:58, Vladimir Blagojevic wrote:
>>> Sanne,
>>> 
>>> I thought about that as well but I do not see a way to ensure that all
>>> other commands have been sent to other nodes other than waiting for
>>> corresponding futures to return from get and then invoke locally in a
>>> serial fashion.
>>> 
>>> I do not see a hook anywhere that will tell me when a command has been
>>> dropped on the wire!
>>> 
>>> Vladimir
>>> 
>>> 
>>> On 11-04-11 2:21 PM, Sanne Grinovero wrote:
>>>> 2011/4/11 Vladimir Blagojevic<vblagoje at redhat.com>:
>>>>> Hi,
>>>>> 
>>>>> I discovered a problem with distributed framework in cases where
>>>>> Callables submitted for distributed execution contain mutable instance
>>>>> fields. Just before Callable is dispersed across cluster it gets invoked
>>>>> locally where instance fields of a submitted Callable can be possibly
>>>>> mutated; Callable is in turn sent to remote nodes with mutated values
>>>>> instead of "original" field values as submitted by user. For example,
>>>>> consider pi approximation example from wiki [1]. If CircleTest Callable
>>>>> declared insideCircleCount as an instance field instead of local field
>>>>> of call method we would ultimately get a wrong final result.
>>>>> 
>>>>> Therefore we need to ensure that each Infinispan node gets an unmodified
>>>>> instance of Callable for execution. I was looking at the possibility to
>>>>> send command to self thus causing creation of a marshaled copy of a
>>>>> Callable, pretty much like any other remote node receives it. However, I
>>>>> was unable to invoke a command on self. Any way to do this? How about
>>>>> invoking marshaling locally to create a Callable copy without going
>>>>> through rpc invocation layer? I though about skipping master/self node
>>>>> altogether but that's an easy way out;-)
>>>>> 
>>>>> Got suggestions, ideas?
>>>> Hi Vladimir,
>>>> I've no clue about invoking a marshalled command on self, but could
>>>> you not just make sure the local callable is being processed *after*
>>>> you have created a serialized copy (sent it to others) ?
>>>> 
>>> _______________________________________________
>>> infinispan-dev mailing list
>>> infinispan-dev at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/infinispan-dev
>> 
>> _______________________________________________
>> infinispan-dev mailing list
>> infinispan-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/infinispan-dev
> 




More information about the infinispan-dev mailing list