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 2013/10/01 14:59:57 UTC
svn commit: r1528076 - in /lucene/dev/trunk/lucene/core/src:
java/org/apache/lucene/index/DocumentsWriter.java
java/org/apache/lucene/index/IndexWriter.java
test/org/apache/lucene/index/TestNumericDocValuesUpdates.java
Author: simonw
Date: Tue Oct 1 12:59:56 2013
New Revision: 1528076
URL: http://svn.apache.org/r1528076
Log:
LUCENE-5189: Check if deletes need to be applied when docvalues are updated and process IW event if needed
Modified:
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/DocumentsWriter.java
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestNumericDocValuesUpdates.java
Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/DocumentsWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/DocumentsWriter.java?rev=1528076&r1=1528075&r2=1528076&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/DocumentsWriter.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/DocumentsWriter.java Tue Oct 1 12:59:56 2013
@@ -158,13 +158,11 @@ final class DocumentsWriter {
return applyAllDeletes( deleteQueue);
}
- synchronized void updateNumericDocValue(Term term, String field, Long value) throws IOException {
+ synchronized boolean updateNumericDocValue(Term term, String field, Long value) throws IOException {
final DocumentsWriterDeleteQueue deleteQueue = this.deleteQueue;
deleteQueue.addNumericUpdate(new NumericUpdate(term, field, value));
flushControl.doOnDelete();
- if (flushControl.doApplyAllDeletes()) {
- applyAllDeletes(deleteQueue);
- }
+ return applyAllDeletes(deleteQueue);
}
DocumentsWriterDeleteQueue currentDeleteSession() {
Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java?rev=1528076&r1=1528075&r2=1528076&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java Tue Oct 1 12:59:56 2013
@@ -1550,7 +1550,9 @@ public class IndexWriter implements Clos
throw new IllegalArgumentException("can only update existing numeric-docvalues fields!");
}
try {
- docWriter.updateNumericDocValue(term, field, value);
+ if (docWriter.updateNumericDocValue(term, field, value)) {
+ processEvents(true, false);
+ }
} catch (OutOfMemoryError oom) {
handleOOM(oom, "updateNumericDocValue");
}
Modified: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestNumericDocValuesUpdates.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestNumericDocValuesUpdates.java?rev=1528076&r1=1528075&r2=1528076&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestNumericDocValuesUpdates.java (original)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestNumericDocValuesUpdates.java Tue Oct 1 12:59:56 2013
@@ -8,6 +8,7 @@ import java.util.concurrent.CountDownLat
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.lucene.analysis.MockAnalyzer;
+import org.apache.lucene.analysis.MockTokenizer;
import org.apache.lucene.codecs.Codec;
import org.apache.lucene.codecs.DocValuesFormat;
import org.apache.lucene.codecs.asserting.AssertingDocValuesFormat;
@@ -64,6 +65,29 @@ public class TestNumericDocValuesUpdates
}
@Test
+ public void testUpdatesAreFlushed() throws IOException {
+ Directory dir = newDirectory();
+ IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig(
+ TEST_VERSION_CURRENT, new MockAnalyzer(random(), MockTokenizer.WHITESPACE, false)).setRAMBufferSizeMB(0.00000001));
+ writer.addDocument(doc(0)); // val=1
+ writer.addDocument(doc(1)); // val=2
+ writer.addDocument(doc(3)); // val=2
+ writer.commit();
+ assertEquals(1, writer.getFlushDeletesCount());
+ writer.updateNumericDocValue(new Term("id", "doc-0"), "val", 5L);
+ assertEquals(2, writer.getFlushDeletesCount());
+ writer.updateNumericDocValue(new Term("id", "doc-1"), "val", 6L);
+ assertEquals(3, writer.getFlushDeletesCount());
+ writer.updateNumericDocValue(new Term("id", "doc-2"), "val", 7L);
+ assertEquals(4, writer.getFlushDeletesCount());
+ writer.getConfig().setRAMBufferSizeMB(1000d);
+ writer.updateNumericDocValue(new Term("id", "doc-2"), "val", 7L);
+ assertEquals(4, writer.getFlushDeletesCount());
+ writer.close();
+ dir.close();
+ }
+
+ @Test
public void testSimple() throws Exception {
Directory dir = newDirectory();
IndexWriterConfig conf = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random()));