On Thu, Jan 26, 2012 at 2:42 PM, Michael Dürig <[email protected]> wrote:
>
>> 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

i should have been more specific. i meant concurrent, i.e.
overlapping, not sequential commits ;)

but you're right, the above scenario could/should be
handled gracefully.

cheers
stefan
>
> Michael
>
>
>
>>
>> cheers
>> stefan
>>
>>>
>>> Regards,
>>> Thomas
>>>
>>>
>>>
>>>
>>>
>>> On 1/25/12 6:04 PM, "Michael Dürig"<[email protected]>  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
>>>
>>>
>

Reply via email to