Re: [infinispan-dev] Conditional cache operations useless with Optimistic locking?

2013-03-12 Thread Galder Zamarreño

On Mar 8, 2013, at 1:50 PM, Sanne Grinovero sa...@infinispan.org wrote:

 Hi Galder,
 I think using conditional operations is very useful even with
 optimistic locking: the single conditional operation might not make
 sense, but a transaction might include more operations and some of
 these operations might depend on the result of the conditional
 operation.
 
 I'd expect the conditional operation to only return the value based on
 current state (a prediction), and the transaction would fail if this
 value is no longer valid at commit time. So no locks need to be taken
 during the evaluation.

^ That's indeed what's happening, but as you can see, it confuses users (Jim, 
are you there?)…

And I can see why they get confused. The conditional operations, such as 
replace, are rooted in enabling CAS-like operation, and an attempt to replace a 
value in a collection without having to synchronize or use locks…

You can do what you say above with put/get operations. It will create more 
boiler plate code for sure, but the expectations of what the code does might be 
easier to understand for users.

So, on one side, conditional operations can help reduce the code-size (by doing 
multiple operations in one go), but users expect them to behave in a way which 
does not really happen when you use transactions + OL.

I'm in two minds on this…

Cheers,

 
 Sanne
 
 On 6 March 2013 14:45, Galder Zamarreño gal...@redhat.com wrote:
 Hi,
 
 Re: https://issues.jboss.org/browse/ISPN-2891
 
 Not sure what previous Infinispan version the AS instance Immutant guys used 
 (5.1?), but seems like they're having more issues with the clojure test 
 linked in the JIRA.
 
 Again, we're talking about issues with replace(), but in a single node 
 environment. They seem to have issues with PL and OL, but let's focus on OL 
 for which there are logs attached.
 
 Do conditional operations make any sense at all with OL? For example, can 
 the return of replace() be taken a truthful in a transaction with OL?
 
 As shown in the bad.log, this is not possible because lock acquisition and 
 write skew checks are only done when the transaction is committed. So, 
 what's the point of the conditional operations with OL? Their returns 
 provide no guarantees whatsoever.
 
 If this is known thing, I'm not aware of any docu on the topic.
 
 Thoughts?
 
 Cheers,
 --
 Galder Zamarreño
 gal...@redhat.com
 twitter.com/galderz
 
 Project Lead, Escalante
 http://escalante.io
 
 Engineer, Infinispan
 http://infinispan.org
 
 
 ___
 infinispan-dev mailing list
 infinispan-dev@lists.jboss.org
 https://lists.jboss.org/mailman/listinfo/infinispan-dev
 
 ___
 infinispan-dev mailing list
 infinispan-dev@lists.jboss.org
 https://lists.jboss.org/mailman/listinfo/infinispan-dev


--
Galder Zamarreño
gal...@redhat.com
twitter.com/galderz

Project Lead, Escalante
http://escalante.io

Engineer, Infinispan
http://infinispan.org


___
infinispan-dev mailing list
infinispan-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/infinispan-dev


Re: [infinispan-dev] Conditional cache operations useless with Optimistic locking?

2013-03-12 Thread Mircea Markus

On 6 Mar 2013, at 14:45, Galder Zamarreño wrote:

 Hi,
 
 Re: https://issues.jboss.org/browse/ISPN-2891
 
 Not sure what previous Infinispan version the AS instance Immutant guys used 
 (5.1?), but seems like they're having more issues with the clojure test 
 linked in the JIRA.
The CO in 5.1.x were broken in many ways. Moving to 5.2.x should fix this.
 
 Again, we're talking about issues with replace(), but in a single node 
 environment. They seem to have issues with PL and OL, but let's focus on OL 
 for which there are logs attached.
 
 Do conditional operations make any sense at all with OL? For example, can the 
 return of replace() be taken a truthful in a transaction with OL?
I think they do. With optimistic transactions the result of a replace is indeed 
calculated at operation time (vs as lock acquisition time). But if you need to 
make sure that the old value hasn't changed in between, then enable write skew 
check and your transaction would fail (well that's actually still something to 
look at ISPN-2840). 
 
 As shown in the bad.log, this is not possible because lock acquisition and 
 write skew checks are only done when the transaction is committed. So, what's 
 the point of the conditional operations with OL? Their returns provide no 
 guarantees whatsoever.
 
 If this is known thing, I'm not aware of any docu on the topic.
 
 Thoughts?
 
 Cheers,
 --
 Galder Zamarreño
 gal...@redhat.com
 twitter.com/galderz
 
 Project Lead, Escalante
 http://escalante.io
 
 Engineer, Infinispan
 http://infinispan.org
 
 
 ___
 infinispan-dev mailing list
 infinispan-dev@lists.jboss.org
 https://lists.jboss.org/mailman/listinfo/infinispan-dev

Cheers,
-- 
Mircea Markus
Infinispan lead (www.infinispan.org)





___
infinispan-dev mailing list
infinispan-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/infinispan-dev


Re: [infinispan-dev] Conditional cache operations useless with Optimistic locking?

2013-03-12 Thread Mircea Markus

On 8 Mar 2013, at 12:50, Sanne Grinovero wrote:

 I think using conditional operations is very useful even with
 optimistic locking: the single conditional operation might not make
 sense, but a transaction might include more operations and some of
 these operations might depend on the result of the conditional
 operation.
 
 I'd expect the conditional operation to only return the value based on
 current state (a prediction), and the transaction would fail if this
 value is no longer valid at commit time. So no locks need to be taken
 during the evaluation.
that's only if you have write skew check enabled. 

Cheers,
-- 
Mircea Markus
Infinispan lead (www.infinispan.org)




___
infinispan-dev mailing list
infinispan-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/infinispan-dev


Re: [infinispan-dev] Conditional cache operations useless with Optimistic locking?

2013-03-12 Thread Dan Berindei
On Tue, Mar 12, 2013 at 1:32 PM, Galder Zamarreño gal...@redhat.com wrote:


 On Mar 8, 2013, at 1:50 PM, Sanne Grinovero sa...@infinispan.org wrote:

  Hi Galder,
  I think using conditional operations is very useful even with
  optimistic locking: the single conditional operation might not make
  sense, but a transaction might include more operations and some of
  these operations might depend on the result of the conditional
  operation.
 
  I'd expect the conditional operation to only return the value based on
  current state (a prediction), and the transaction would fail if this
  value is no longer valid at commit time. So no locks need to be taken
  during the evaluation.

 ^ That's indeed what's happening, but as you can see, it confuses users
 (Jim, are you there?)…

 And I can see why they get confused. The conditional operations, such as
 replace, are rooted in enabling CAS-like operation, and an attempt to
 replace a value in a collection without having to synchronize or use locks…

 You can do what you say above with put/get operations. It will create more
 boiler plate code for sure, but the expectations of what the code does
 might be easier to understand for users.

 So, on one side, conditional operations can help reduce the code-size (by
 doing multiple operations in one go), but users expect them to behave in a
 way which does not really happen when you use transactions + OL.

 I'm in two minds on this…


I remember having a discussion about conditional operations with optimistic
locking a long time ago (Edinburgh?) and concluding that they should be
allowed to lie - pretend that they did the put/replace/remove and check
again on prepare if the condition still holds (with write skew check
enabled).

I think the other option on the table was treat conditional operations as
non-transactional - if putIfAbsent(k, v) returned true, then v would be
stored in the cache even if the current transaction was rolled back.

I don't remember if we considered acquiring locks for conditional
operations even with optimistic locking at the time or not. It would be a
bit of a hack, but it would make a lot more sense than the current
behaviour with the default configuration (optimistic locking with write
skew check disabled, which makes conditional operations pretty much
useless).

Off-topic: is it just me, or is it a little odd that the locking mode is
configured via TransactionConfigurationBuilder and the isolation
level/write skew check are configured via LockingConfigurationBuilder?

Cheers
Dan


Cheers,

 
  Sanne
 
  On 6 March 2013 14:45, Galder Zamarreño gal...@redhat.com wrote:
  Hi,
 
  Re: https://issues.jboss.org/browse/ISPN-2891
 
  Not sure what previous Infinispan version the AS instance Immutant guys
 used (5.1?), but seems like they're having more issues with the clojure
 test linked in the JIRA.
 
  Again, we're talking about issues with replace(), but in a single node
 environment. They seem to have issues with PL and OL, but let's focus on OL
 for which there are logs attached.
 
  Do conditional operations make any sense at all with OL? For example,
 can the return of replace() be taken a truthful in a transaction with OL?
 
  As shown in the bad.log, this is not possible because lock acquisition
 and write skew checks are only done when the transaction is committed. So,
 what's the point of the conditional operations with OL? Their returns
 provide no guarantees whatsoever.
 
  If this is known thing, I'm not aware of any docu on the topic.
 
  Thoughts?
 
  Cheers,
  --
  Galder Zamarreño
  gal...@redhat.com
  twitter.com/galderz
 
  Project Lead, Escalante
  http://escalante.io
 
  Engineer, Infinispan
  http://infinispan.org
 
 
  ___
  infinispan-dev mailing list
  infinispan-dev@lists.jboss.org
  https://lists.jboss.org/mailman/listinfo/infinispan-dev
 
  ___
  infinispan-dev mailing list
  infinispan-dev@lists.jboss.org
  https://lists.jboss.org/mailman/listinfo/infinispan-dev


 --
 Galder Zamarreño
 gal...@redhat.com
 twitter.com/galderz

 Project Lead, Escalante
 http://escalante.io

 Engineer, Infinispan
 http://infinispan.org


 ___
 infinispan-dev mailing list
 infinispan-dev@lists.jboss.org
 https://lists.jboss.org/mailman/listinfo/infinispan-dev

___
infinispan-dev mailing list
infinispan-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/infinispan-dev

Re: [infinispan-dev] Conditional cache operations useless with Optimistic locking?

2013-03-12 Thread Jim Crossley
FWIW, I do have write skew check enabled, along with versioning (simple)
enabled, and isolation level of REPEATABLE_READ.

Thanks,
Jim

Mircea Markus mmar...@redhat.com writes:

 On 8 Mar 2013, at 12:50, Sanne Grinovero wrote:

 I think using conditional operations is very useful even with
 optimistic locking: the single conditional operation might not make
 sense, but a transaction might include more operations and some of
 these operations might depend on the result of the conditional
 operation.
 
 I'd expect the conditional operation to only return the value based on
 current state (a prediction), and the transaction would fail if this
 value is no longer valid at commit time. So no locks need to be taken
 during the evaluation.
 that's only if you have write skew check enabled. 

 Cheers,
___
infinispan-dev mailing list
infinispan-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/infinispan-dev


Re: [infinispan-dev] Conditional cache operations useless with Optimistic locking?

2013-03-08 Thread Sanne Grinovero
Hi Galder,
I think using conditional operations is very useful even with
optimistic locking: the single conditional operation might not make
sense, but a transaction might include more operations and some of
these operations might depend on the result of the conditional
operation.

I'd expect the conditional operation to only return the value based on
current state (a prediction), and the transaction would fail if this
value is no longer valid at commit time. So no locks need to be taken
during the evaluation.

Sanne

On 6 March 2013 14:45, Galder Zamarreño gal...@redhat.com wrote:
 Hi,

 Re: https://issues.jboss.org/browse/ISPN-2891

 Not sure what previous Infinispan version the AS instance Immutant guys used 
 (5.1?), but seems like they're having more issues with the clojure test 
 linked in the JIRA.

 Again, we're talking about issues with replace(), but in a single node 
 environment. They seem to have issues with PL and OL, but let's focus on OL 
 for which there are logs attached.

 Do conditional operations make any sense at all with OL? For example, can the 
 return of replace() be taken a truthful in a transaction with OL?

 As shown in the bad.log, this is not possible because lock acquisition and 
 write skew checks are only done when the transaction is committed. So, what's 
 the point of the conditional operations with OL? Their returns provide no 
 guarantees whatsoever.

 If this is known thing, I'm not aware of any docu on the topic.

 Thoughts?

 Cheers,
 --
 Galder Zamarreño
 gal...@redhat.com
 twitter.com/galderz

 Project Lead, Escalante
 http://escalante.io

 Engineer, Infinispan
 http://infinispan.org


 ___
 infinispan-dev mailing list
 infinispan-dev@lists.jboss.org
 https://lists.jboss.org/mailman/listinfo/infinispan-dev

___
infinispan-dev mailing list
infinispan-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/infinispan-dev