You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-issues@jackrabbit.apache.org by "Dominique Jäggi (JIRA)" <ji...@apache.org> on 2017/02/22 09:52:44 UTC

[jira] [Closed] (OAK-5601) documentMk backgroundRead should handle missing journal entries

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

Dominique Jäggi closed OAK-5601.
--------------------------------

bulk close 1.0.37

> documentMk backgroundRead should handle missing journal entries
> ---------------------------------------------------------------
>
>                 Key: OAK-5601
>                 URL: https://issues.apache.org/jira/browse/OAK-5601
>             Project: Jackrabbit Oak
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.0.36, 1.2.23, 1.4.1, 1.6.0
>            Reporter: Stefan Egli
>            Assignee: Stefan Egli
>             Fix For: 1.0.37, 1.2.24, 1.4.14, 1.7.0, 1.8, 1.6.1
>
>         Attachments: OAK-5601.patch
>
>
> The following exception has been encountered:
> {noformat}03.02.2017 02:39:08.068 *WARN* [DocumentNodeStore background read thread (1)] org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore Background operation failed: java.lang.IllegalStateException: M
> issing external change for branch revision: b3-00000159f839b963-00000000
> java.lang.IllegalStateException: Missing external change for branch revision: b3-00000159f839b963-00000000
>         at org.apache.jackrabbit.oak.plugins.document.JournalEntry$3$1.computeNext(JournalEntry.java:321)
>         at org.apache.jackrabbit.oak.plugins.document.JournalEntry$3$1.computeNext(JournalEntry.java:309)
>         at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
>         at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
>         at org.apache.jackrabbit.oak.plugins.document.JournalEntry.addTo(JournalEntry.java:287)
>         at org.apache.jackrabbit.oak.plugins.document.JournalEntry.fillExternalChanges(JournalEntry.java:210)
>         at org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore.backgroundRead(DocumentNodeStore.java:1813)
>         at org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore.internalRunBackgroundReadOperations(DocumentNodeStore.java:1702)
>         at org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore.runBackgroundReadOperations(DocumentNodeStore.java:1687)
>         at org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore$BackgroundReadOperation.execute(DocumentNodeStore.java:2633)
>         at org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore$NodeStoreTask.run(DocumentNodeStore.java:2592)
>         at java.lang.Thread.run(Thread.java:745)
> {noformat}
> That revision b3-00000159f839b963-00000000 corresponds to 1485928249699ns == 2017-02-01T05:50:49+00:00, which means the revision that the backgroundRead is trying to read here is 21 hours old.
> The default journal GC maxAge is 6 hours though.
> When it tries to read an old revision that is already deleted it [throws an IllegalStateException|https://github.com/apache/jackrabbit-oak/blob/jackrabbit-oak-1.4.1/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/JournalEntry.java#L321]. That one is not caught properly, except in [NodeStoreTask.run|https://github.com/apache/jackrabbit-oak/blob/jackrabbit-oak-1.4.1/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java#L2593]. 
> This means the backgroundRead has failed, with a warn, and will be retried 1 second later. Just that nothing has changed, the journal entry can still not be found, so the same warning is issued. 
> Resulting in the situation that the backgroundRead will never recover.
> That {{IllegalStateException}} should be caught [when calling fillExternalChanges|https://github.com/apache/jackrabbit-oak/blob/jackrabbit-oak-1.4.1/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java#L1814], resulting in a fall-back to not reading from the journal but going the old route.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)