[jbosscache-dev] ReversibleCommands and locking schemes
Jason T. Greene
jason.greene at redhat.com
Fri Jun 27 13:57:23 EDT 2008
Manik Surtani wrote:
> A sub-interface of Command is ReversibleCommand, which exposes a
> rollback() method. The purpose of this method is that for commands that
> change the state of the cache, the command also maintains information on
> how to undo it's change, and the undo operation is invoked by calling
> rollback() on the command. A nice, clean way of encapsulating a change
> and it's reversal.
>
> Now this only made sense for pessimistic locking, where changes are made
> directly on the cache. With optimistic locking, changes are made in a
> workspace and a rollback is performed by simply throwing away the
> workspace. MVCC is similar in this regard, where changes are made to a
> copy of the node, and a rollback is performed by throwing away this new
> node.
>
> So, is rollback() (and the ReversibleCommand interface) tied to
> pessimistic locking only? And if so, that is a lot of overhead each
> command stores for the sake of a single locking scheme (especially when
> those commands are used with Optimistic Locking or MVCC). Should we
> introduce another set of commands, subclasses to the actual commands
> themselves, implementing rollback, such that they are used for
> pessimistic locking, while leaner commands without rollback can be used
> for the other locking schemes? Or should we just "live with" this
> overhead until MVCC stabilises and we deprecate/remove pessimistic and
> optimistic locking altogether?
>
I would have to look at the code in more detail, but perhaps a
per-locking style strategy makes sense? In some cases the strategy may
be "do nothing", or it might not for commands like "move".
--
Jason T. Greene
JBoss, a division of Red Hat
More information about the jbosscache-dev
mailing list