jackrabbit-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael Dürig <mdue...@apache.org>
Subject Re: [jr3 Microkernel] how should we handle failed save operations?
Date Thu, 26 Jan 2012 13:42:31 GMT

> BTW: the current microkernel prototype doesn't consider concurrent
> removal of a specific node a conflict, i.e. it already implements the
> proposed behavior.

Hmm no?

     String head = mk.getHeadRevision();
     head = mk.commit("/", "+\"qoo\":{}", head, "");

     String r1 = mk.commit("/", "-\"qoo\"", head, "");
     String r2 = mk.commit("/", "-\"qoo\"", head, "");

The commit for r2 gives me an error:
org.apache.jackrabbit.mk.api.MicroKernelException: 
org.apache.jackrabbit.mk.store.NotFoundException: /qoo

Michael


>
> cheers
> stefan
>
>>
>> Regards,
>> Thomas
>>
>>
>>
>>
>>
>> On 1/25/12 6:04 PM, "Michael Dürig"<mduerig@apache.org>  wrote:
>>
>>>
>>> Hi,
>>>
>>> In an earlier discussion (probably offline), we decided to not implement
>>> Item.refresh() since it doesn't go well with the MVCC model jr3 is based
>>> on. Furthermore, JCR doesn't have an Item.undo() method for undoing
>>> changes.
>>>
>>> This may lead to problems when a Session.save() fails due to the
>>> underlying Microkernel.commit failing because it detected a conflict.
>>> Now there might be some transient changes (like deletions) which can't
>>> be selectively undone by the user. So the user is left with a transient
>>> space containing his changes but he can only discard them as a whole.
>>> Not very satisfactory.
>>>
>>> Possible solutions:
>>>
>>> 1) The Microkernel makes as much effort as possible to three way merge
>>> changes.
>>>
>>> 2) The user needs to do a session refresh with keep changes = true and
>>> save again.
>>>
>>> 3) Introduce a Item.undo method on the JCR API.
>>>
>>>
>>> 1) Mitigates the problem such that it only occurs rarely.
>>>
>>> 2) Is really nothing more than moving the problem of the failed commit
>>> due to a conflict from the Microkernel to the transient space: now the
>>> transient space needs to do conflict resolution.
>>>
>>> 3) Is what I think we should do. This enable the user to resolve his
>>> conflicts selectively.
>>>
>>> Michael
>>

Mime
View raw message