You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by si...@apache.org on 2011/05/29 23:55:29 UTC
svn commit: r1128968 - in
/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index:
DocumentsWriter.java DocumentsWriterFlushControl.java
DocumentsWriterPerThreadPool.java IndexWriter.java
Author: simonw
Date: Sun May 29 21:55:29 2011
New Revision: 1128968
URL: http://svn.apache.org/viewvc?rev=1128968&view=rev
Log:
Set DWPT inactive on IW close
Modified:
lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DocumentsWriter.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DocumentsWriterFlushControl.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DocumentsWriterPerThreadPool.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DocumentsWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DocumentsWriter.java?rev=1128968&r1=1128967&r2=1128968&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DocumentsWriter.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DocumentsWriter.java Sun May 29 21:55:29 2011
@@ -586,4 +586,20 @@ final class DocumentsWriter {
return (!isSegmentFlush || segment != null);
}
}
+
+ // use by IW during close to assert all DWPT are inactive after final flush
+ boolean assertNoActiveDWPT() {
+ Iterator<ThreadState> activePerThreadsIterator = perThreadPool.getAllPerThreadsIterator();
+ while(activePerThreadsIterator.hasNext()) {
+ ThreadState next = activePerThreadsIterator.next();
+ next.lock();
+ try {
+ assert !next.isActive();
+ } finally {
+ next.unlock();
+ }
+ }
+ return true;
+ }
+
}
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DocumentsWriterFlushControl.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DocumentsWriterFlushControl.java?rev=1128968&r1=1128967&r2=1128968&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DocumentsWriterFlushControl.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DocumentsWriterFlushControl.java Sun May 29 21:55:29 2011
@@ -304,6 +304,7 @@ public final class DocumentsWriterFlushC
synchronized void setClosed() {
// set by DW to signal that we should not release new DWPT after close
this.closed = true;
+ perThreadPool.deactivateUnreleasedStates();
}
/**
@@ -386,8 +387,12 @@ public final class DocumentsWriterFlushC
toFlush.add(flushingDWPT);
}
} else {
- // get the new delete queue from DW
- next.perThread.initialize();
+ if (closed) {
+ next.resetWriter(null); // make this state inactive
+ } else {
+ // get the new delete queue from DW
+ next.perThread.initialize();
+ }
}
} finally {
next.unlock();
@@ -522,5 +527,4 @@ public final class DocumentsWriterFlushC
boolean anyStalledThreads() {
return stallControl.anyStalledThreads();
}
-
}
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DocumentsWriterPerThreadPool.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DocumentsWriterPerThreadPool.java?rev=1128968&r1=1128967&r2=1128968&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DocumentsWriterPerThreadPool.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DocumentsWriterPerThreadPool.java Sun May 29 21:55:29 2011
@@ -193,6 +193,21 @@ public abstract class DocumentsWriterPer
return null;
}
+ /**
+ * Deactivate all unreleased threadstates
+ */
+ protected synchronized void deactivateUnreleasedStates() {
+ for (int i = numThreadStatesActive; i < perThreads.length; i++) {
+ final ThreadState threadState = perThreads[i];
+ threadState.lock();
+ try {
+ threadState.resetWriter(null);
+ } finally {
+ threadState.unlock();
+ }
+ }
+ }
+
protected DocumentsWriterPerThread replaceForFlush(ThreadState threadState, boolean closed) {
assert threadState.isHeldByCurrentThread();
final DocumentsWriterPerThread dwpt = threadState.perThread;
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java?rev=1128968&r1=1128967&r2=1128968&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java Sun May 29 21:55:29 2011
@@ -1073,7 +1073,8 @@ public class IndexWriter implements Clos
if (infoStream != null)
message("at close: " + segString());
-
+ // used by assert below
+ final DocumentsWriter oldWriter = docWriter;
synchronized(this) {
readerPool.close();
docWriter = null;
@@ -1087,6 +1088,7 @@ public class IndexWriter implements Clos
synchronized(this) {
closed = true;
}
+ assert oldWriter.assertNoActiveDWPT();
} catch (OutOfMemoryError oom) {
handleOOM(oom, "closeInternal");
} finally {
@@ -1100,6 +1102,8 @@ public class IndexWriter implements Clos
}
}
}
+
+
/** Returns the Directory used by this index. */
public Directory getDirectory() {