[ 
https://issues.apache.org/jira/browse/OAK-2472?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Davide Giannella updated OAK-2472:
----------------------------------
    Attachment: oak-1452185608.log.gz

[~mduerig], [~mreutegg]

The process is there but still there's an exception we can't
catch. The IT fails as of this.

In the [attached log file|^oak-1452185608.log.gz] you can see we catch
several time merging exceptions and we re-schedule the process
successfully. Nevertheless the test fails with the following exception

{noformat}
javax.jcr.InvalidItemStateException: OakMerge0004: OakMerge0004: The node 
1:/counter was changed in revision
r1521ce9f324-0-1 (not yet visible), which was applied after the base revision
r1521cea6128-0-3, before
r1521ceaca52-0-3 (retries 5, 25530 ms)
        at 
org.apache.jackrabbit.oak.api.CommitFailedException.asRepositoryException(CommitFailedException.java:239)
        at 
org.apache.jackrabbit.oak.api.CommitFailedException.asRepositoryException(CommitFailedException.java:212)
        at 
org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.newRepositoryException(SessionDelegate.java:670)
        at 
org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.save(SessionDelegate.java:496)
        at 
org.apache.jackrabbit.oak.jcr.session.SessionImpl$8.performVoid(SessionImpl.java:419)
        at 
org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.performVoid(SessionDelegate.java:274)
        at 
org.apache.jackrabbit.oak.jcr.session.SessionImpl.save(SessionImpl.java:416)
        at 
org.apache.jackrabbit.oak.jcr.AtomicCounterClusterIT$1.call(AtomicCounterClusterIT.java:127)
        at 
org.apache.jackrabbit.oak.jcr.AtomicCounterClusterIT$1.call(AtomicCounterClusterIT.java:1)
        at java.util.concurrent.FutureTask.run(FutureTask.java:262)
        at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.jackrabbit.oak.api.CommitFailedException: OakMerge0004: 
OakMerge0004: The node 1:/counter was changed in revision
r1521ce9f324-0-1 (not yet visible), which was applied after the base revision
r1521cea6128-0-3, before
r1521ceaca52-0-3 (retries 5, 25530 ms)
        at 
org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreBranch.merge0(DocumentNodeStoreBranch.java:200)
        at 
org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreBranch.merge(DocumentNodeStoreBranch.java:124)
        at 
org.apache.jackrabbit.oak.plugins.document.DocumentRootBuilder.merge(DocumentRootBuilder.java:158)
        at 
org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore.merge(DocumentNodeStore.java:1506)
        at 
org.apache.jackrabbit.oak.core.MutableRoot.commit(MutableRoot.java:247)
        at 
org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.commit(SessionDelegate.java:347)
        at 
org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.save(SessionDelegate.java:494)
        ... 7 more
Caused by: org.apache.jackrabbit.oak.plugins.document.ConflictException: The 
node 1:/counter was changed in revision
r1521ce9f324-0-1 (not yet visible), which was applied after the base revision
r1521cea6128-0-3, before
r1521ceaca52-0-3
        at 
org.apache.jackrabbit.oak.plugins.document.Commit.checkConflicts(Commit.java:583)
        at 
org.apache.jackrabbit.oak.plugins.document.Commit.createOrUpdateNode(Commit.java:487)
        at 
org.apache.jackrabbit.oak.plugins.document.Commit.applyToDocumentStore(Commit.java:371)
        at 
org.apache.jackrabbit.oak.plugins.document.Commit.applyToDocumentStore(Commit.java:265)
        at 
org.apache.jackrabbit.oak.plugins.document.Commit.applyInternal(Commit.java:234)
        at 
org.apache.jackrabbit.oak.plugins.document.Commit.apply(Commit.java:219)
        at 
org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreBranch.persist(DocumentNodeStoreBranch.java:290)
        at 
org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreBranch.persist(DocumentNodeStoreBranch.java:260)
        at 
org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreBranch.access$2(DocumentNodeStoreBranch.java:257)
        at 
org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreBranch$InMemory.merge(DocumentNodeStoreBranch.java:498)
        at 
org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreBranch.merge0(DocumentNodeStoreBranch.java:180)
        ... 13 more
{noformat}

Which is tracked as well in the attached log. Any clue on how/if we
can catch this exception? Here where we consolidate and merge

https://github.com/davidegiannella/jackrabbit-oak/blob/OAK-2472/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/atomic/AtomicCounterEditor.java#L407

I have another perplexity with the approach we took. To each
{{ConsolidatorTask}} I assign (what it should be) a unique name (which
can be improved anyhow). So far it is composed by
{{path-revisionproperty-revisionpropertyvalue}}. From here you can see
that more than one process takes the same revision. This is due, I
think, the MVCC aspect. When several threads starts they see, at the
beginning for example, {{:rev-1 = 0}}.

It seems to be not a problem from a consolidation POV due to the
checks we have in place; but still it's a bit fishy.

Any help appreciated.


> Add support for atomic counters on cluster solutions
> ----------------------------------------------------
>
>                 Key: OAK-2472
>                 URL: https://issues.apache.org/jira/browse/OAK-2472
>             Project: Jackrabbit Oak
>          Issue Type: Improvement
>          Components: core
>    Affects Versions: 1.3.0
>            Reporter: Davide Giannella
>            Assignee: Davide Giannella
>              Labels: scalability
>             Fix For: 1.4
>
>         Attachments: atomic-counter.md, oak-1452185608.log.gz
>
>
> As of OAK-2220 we added support for atomic counters in a non-clustered 
> situation. 
> This ticket is about covering the clustered ones.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to