[jboss-dev-forums] [Design of JBossCache] - SELECT FOR UPDATE semantics
bstansberry@jboss.com
do-not-reply at jboss.com
Thu Jan 4 10:44:01 EST 2007
I know I raised this issue somewhere before, but can't find it, so here we go again...
We're about to finalize the 2.x API; before we do, can we add something that provides semantics similar to SELECT FOR UPDATE, i.e. ability to do a read, but acquire a WL in the process? As it is now, there is no clean way for a tx to read a node and then be confident it can subsequently write to that node. It's possible for another tx to also get a RL on the node, which will prevent the first tx getting the needed WL.
This would be very helpful with http sessions that are shared between webapps, where I'd like to use a cache node to store the session, and use the node lock to prevent concurrent access to the session. The natural flow is to do a read, and then *maybe* do a write later if the session data has changed. The RL from the initial read doesn't provide a strong enough semantic. To work around that I'd need to do some hack like doing a put() at the beginning w/ a dummy key/value pair.
I've seen other threads that raised similar requirements.
I think doing this should be pretty simple. I believe it only applies to pessimistic locking. If we implemented it as an Option (e.g setReadForUpdate(boolean)) it would only affect the pessimistic lock interceptor. That interceptor would, on a get request, check the option and if present:
1) If the requested node does not exist, create it, like it does with a put.
2) Acquire a WL instead of a RL.
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3997944#3997944
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3997944
More information about the jboss-dev-forums
mailing list