Author: chetanm
Date: Fri Sep 22 09:56:40 2017
New Revision: 1809289
URL: http://svn.apache.org/viewvc?rev=1809289&view=rev
Log:
OAK-6635 - IndexReader closed exception in DocumentQueue
Actual fix. Also reduce the test time to 50 secs
Modified:
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNodeManager.java
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/hybrid/ReaderRefCountIT.java
Modified:
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNodeManager.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNodeManager.java?rev=1809289&r1=1809288&r2=1809289&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNodeManager.java
(original)
+++
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNodeManager.java
Fri Sep 22 09:56:40 2017
@@ -22,6 +22,7 @@ import static com.google.common.base.Pre
import java.io.IOException;
import java.util.Collections;
import java.util.List;
+import java.util.concurrent.Semaphore;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.ReadWriteLock;
@@ -93,10 +94,18 @@ public class IndexNodeManager {
private final ReaderRefreshPolicy refreshPolicy;
+ private final Semaphore refreshLock = new Semaphore(1);
+
private final Runnable refreshCallback = new Runnable() {
@Override
public void run() {
- refreshReaders();
+ if (refreshLock.tryAcquire()) {
+ try {
+ refreshReaders();
+ }finally {
+ refreshLock.release();
+ }
+ }
}
};
@@ -141,7 +150,14 @@ public class IndexNodeManager {
boolean success = false;
try {
refreshPolicy.refreshOnReadIfRequired(refreshCallback);
- IndexNode indexNode = new IndexNodeImpl(searcherHolder);
+ SearcherHolder local = searcherHolder;
+ int tryCount = 0;
+ while (!local.searcher.getIndexReader().tryIncRef()) {
+ checkState(++tryCount < 10, "Not able to " +
+ "get open searcher in %s attempts", tryCount);
+ local = searcherHolder;
+ }
+ IndexNode indexNode = new IndexNodeImpl(local);
success = true;
return indexNode;
} finally {
@@ -245,10 +261,6 @@ public class IndexNodeManager {
decrementSearcherUsageCount(holder.searcher);
}
- private static void incrementSearcherUsageCount(IndexSearcher searcher) {
- searcher.getIndexReader().incRef();
- }
-
private void decrementSearcherUsageCount(IndexSearcher searcher) {
try {
//Decrement the count by 1 as we increased it while creating the
searcher
@@ -276,8 +288,6 @@ public class IndexNodeManager {
private IndexNodeImpl(SearcherHolder searcherHolder) {
this.holder = searcherHolder;
- //Increment on each acquire
- incrementSearcherUsageCount(holder.searcher);
}
@Override
Modified:
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/hybrid/ReaderRefCountIT.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/hybrid/ReaderRefCountIT.java?rev=1809289&r1=1809288&r2=1809289&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/hybrid/ReaderRefCountIT.java
(original)
+++
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/hybrid/ReaderRefCountIT.java
Fri Sep 22 09:56:40 2017
@@ -43,7 +43,6 @@ import org.apache.jackrabbit.oak.stats.S
import org.apache.lucene.document.Document;
import org.apache.lucene.search.MatchAllDocsQuery;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
@@ -62,7 +61,7 @@ public class ReaderRefCountIT {
private NodeState root = INITIAL_CONTENT;
private IndexCopier indexCopier;
- private int runTimeInSecs = 60;
+ private int runTimeInSecs = 50;
private int noOfThread = 5;
@Before
@@ -70,7 +69,6 @@ public class ReaderRefCountIT {
indexCopier = new IndexCopier(sameThreadExecutor(),
temporaryFolder.getRoot());
}
- @Ignore("OAK-6635")
@Test
public void syncIndex() throws Exception{
IndexDefinitionBuilder idx = new IndexDefinitionBuilder();
@@ -81,7 +79,6 @@ public class ReaderRefCountIT {
runMultiReaderScenario(idx, nrtFactory);
}
- @Ignore("OAK-6635")
@Test
public void nrtIndex() throws Exception{
IndexDefinitionBuilder idx = new IndexDefinitionBuilder();
@@ -174,6 +171,8 @@ public class ReaderRefCountIT {
t.join();
}
+ nrtFactory.close();
+
if (!exceptionList.isEmpty()) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);