I wanted to check out ways to access Infinispan from .net, and the REST server looks like a (the?) way to go. I want to ensure integrity of my data by means of optimistic concurrency,
and the resolved "support optimistic locking with ETags and If-Match in rest server" JIRA (https://issues.jboss.org/browse/ISPN-1084) seemed to provide that.
Looking at the sources
https://github.com/infinispan/infinispan/blob/master/server/rest/src/main/scala/org/infinispan/rest/Server.scala
however, it seems the "optimistic currency control" is not atomic. The sequence in e.g. a PUT request goes like this:
- request.evaluatePreconditions
- cache.put (if preconditions met)
Which is not in a lock (that would make it pessimistic, anyway), in other words, a race condition.
I'm not a scala user, but as ConcurrentMap's methods (replace, putIfAbsent, ...) - that I checked on http://docs.jboss.org/infinispan/5.0/apidocs/org/infinispan/Cache.html Infinispan seems to be using - are not referenced anywhere in the sources, I guess I'm out of luck...
Am I missing anything?