Mircea, one last thing. Why is there a check for local here?
https://github.com/infinispan/infinispan/blob/master/core/src/main/java/o...
That basically means that concurrent cluster wide conditional removes won't work with
OL + RR + writeSkew.
Is there a reason why you added this local check?
On Jul 24, 2012, at 4:31 PM, Galder Zamarreño wrote:
On Jul 24, 2012, at 1:55 PM, Mircea Markus wrote:
>
> On 24 Jul 2012, at 09:54, Galder Zamarreño wrote:
>
>>>>
>>>>
>>>> IOW, the test now passes because the commit throws an exception in 4 out
of 5 threads. But, the test could/should maybe work in such way that no exception was
thrown and 4 out of 5 invocations returned false to the checks made (conditional remove
returns false, or normal remove returns null).
>>>>
>>> It is possible that multiple tx return the same non-null existing value -
I've commented more on the JIRA.
>>
>> Is it possible under concurrent modification circumstances?
>>
>> If you have 5 concurrent removals, one should do the job and the others should be
no-ops. IOW, 1/5 of the removes should return non-null and the other 4/5 should return
null. This is not the case today.
>
> Even it is a bit counterintuitive, with optimistic transactions that's possible
though.
> For example:
> tx1 and tx2 remove the (k,v) entry concurrently:
> tx1.remove(k); // "v" is returned as that's what tx1 saw at this time
> tx2.remove(k); // again "v" is returned, as tx1 hasn't committed
anything yet (optimistic transactions)
>
> Now during the commit time the writes to k are serialised between tx1 and tx2.
> The only reliable way in which the user can get this behaviour is by forcing the
write skew check through a get first (the workaround describe din ISPN-2164).
>
> Now thinking about it, the fact that we return the value to the user during the put
is equivalently to a read so it might make sense to perform the write skew check for keys
that are put into the cache when unsafeReturn is false (the default) and when the
Flag.SKIP_REMOTE_LOOKUP is not used. What do you think?
Plus, when OL is in use, but this is already part of the OptimisticLockingInterceptor.
Sounds good to me. I'll document this better in the code.
>
>
> _______________________________________________
> infinispan-dev mailing list
> infinispan-dev(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/infinispan-dev
--
Galder Zamarreño
Sr. Software Engineer
Infinispan, JBoss Cache
_______________________________________________
infinispan-dev mailing list
infinispan-dev(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/infinispan-dev
--
Galder Zamarreño
Sr. Software Engineer
Infinispan, JBoss Cache