[jbosscache-dev] ReversibleCommands and locking schemes
Manik Surtani
manik at jboss.org
Fri Jun 27 18:37:06 EDT 2008
On 27 Jun 2008, at 20:39, Jason T. Greene wrote:
> Manik Surtani wrote:
>> On 27 Jun 2008, at 18:57, Jason T. Greene wrote:
>>> 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".
>> The thing is, it is more than just strategy or behaviour wrt
>> handling a rollback. Currently even in perform the commands
>> collect info with which to perform a rollback, such as old state
>> being overwritten. Which is a waste with 2/3rds of our locking
>> strategies. :)
>
> Ok so you could have the per-command strategy also decide whether or
> not to do that:
>
> putStrategy.recordUndo(old,...);
> putStrategy.rollback();
>
> This could of course be also done using a traditional inheritance
> model, but I suspsect you are going to need locking-model specfic
> callbacks either way.
>
> IMO i think the goal should be to implement MVCC with good code, and
> not care so much about pessimistic and optimistic, since long term
> we know we are going to drop them.
+1.
--
Manik Surtani
Lead, JBoss Cache
manik at jboss.org
More information about the jbosscache-dev
mailing list