[
https://issues.apache.org/jira/browse/OAK-6777?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Chetan Mehrotra updated OAK-6777:
---------------------------------
Attachment: OAK-6777-v1.patch
[patch|^OAK-6777-v1.patch] for the same.
Issue was occurring because the "dirReader" instance was being used for 2
different purpose. 1) For the current NRTIndex reader and 2) for previous index
for newer NRTIndex. This caused race condition where reader from previous was
getting closed due to IndexTracker refresh while still being in use
As a fix NRTIndex now use two different reader instances and manages there
lifecycle separately. This also required a change in NRTIndexFactory to
explicitly disconnect the previous index so as to let its refCount decrement
properly
[~catholicon] Please review once
> IndexReader closed exception in previous reader
> -----------------------------------------------
>
> Key: OAK-6777
> URL: https://issues.apache.org/jira/browse/OAK-6777
> Project: Jackrabbit Oak
> Issue Type: Bug
> Components: lucene
> Affects Versions: 1.6.5
> Reporter: Chetan Mehrotra
> Assignee: Chetan Mehrotra
> Labels: candidate_oak_1_6
> Fix For: 1.8
>
> Attachments: OAK-6777-v1.patch
>
>
> Another variant of index reader closed exception as reported in OAK-6635 is
> seen for previous readers
> {noformat}
> 2017-10-03 21:21:41,810 ERROR NA [oak-lucene-16]
> o.a.j.o.p.i.l.h.DocumentQueue - Uncaught exception
> org.apache.lucene.store.AlreadyClosedException: this IndexReader is closed
> at org.apache.lucene.index.IndexReader.ensureOpen(IndexReader.java:262)
> at
> org.apache.lucene.index.StandardDirectoryReader.doOpenIfChanged(StandardDirectoryReader.java:271)
> at
> org.apache.lucene.index.DirectoryReader.openIfChanged(DirectoryReader.java:250)
> at
> org.apache.jackrabbit.oak.plugins.index.lucene.hybrid.NRTIndex.createReader(NRTIndex.java:257)
> at
> org.apache.jackrabbit.oak.plugins.index.lucene.hybrid.NRTIndex.getPrimaryReader(NRTIndex.java:113)
> at
> org.apache.jackrabbit.oak.plugins.index.lucene.hybrid.NRTIndex.getReaders(NRTIndex.java:148)
> at
> org.apache.jackrabbit.oak.plugins.index.lucene.IndexNodeManager.getNRTReaders(IndexNodeManager.java:243)
> at
> org.apache.jackrabbit.oak.plugins.index.lucene.IndexNodeManager.refreshReaders(IndexNodeManager.java:203)
> at
> org.apache.jackrabbit.oak.plugins.index.lucene.IndexNodeManager.access$100(IndexNodeManager.java:53)
> at
> org.apache.jackrabbit.oak.plugins.index.lucene.IndexNodeManager$1.run(IndexNodeManager.java:104)
> at
> org.apache.jackrabbit.oak.plugins.index.lucene.hybrid.TimedRefreshPolicy.refreshIfRequired(TimedRefreshPolicy.java:59)
> at
> org.apache.jackrabbit.oak.plugins.index.lucene.hybrid.TimedRefreshPolicy.refreshOnReadIfRequired(TimedRefreshPolicy.java:40)
> at
> org.apache.jackrabbit.oak.plugins.index.lucene.IndexNodeManager.acquire(IndexNodeManager.java:152)
> at
> org.apache.jackrabbit.oak.plugins.index.lucene.IndexTracker.acquireIndexNode(IndexTracker.java:193)
> at
> org.apache.jackrabbit.oak.plugins.index.lucene.hybrid.DocumentQueue.processDocs(DocumentQueue.java:235)
> at
> org.apache.jackrabbit.oak.plugins.index.lucene.hybrid.DocumentQueue.addDocsToIndex(DocumentQueue.java:214)
> at
> org.apache.jackrabbit.oak.plugins.index.lucene.hybrid.DocumentQueue.access$500(DocumentQueue.java:55)
> at
> org.apache.jackrabbit.oak.plugins.index.lucene.hybrid.DocumentQueue$2$1.call(DocumentQueue.java:121)
> at
> org.apache.jackrabbit.oak.plugins.index.lucene.hybrid.DocumentQueue$2$1.call(DocumentQueue.java:96)
> at java.util.concurrent.FutureTask.run(FutureTask.java:266)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
> at java.lang.Thread.run(Thread.java:748)
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)