mirror of https://github.com/apache/lucene.git
LUCENE-5189: Check if deletes need to be applied when docvalues are updated and process IW event if needed
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1528076 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
0a3ac487a1
commit
7fab2bdd38
|
@ -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() {
|
||||
|
|
|
@ -1550,7 +1550,9 @@ public class IndexWriter implements Closeable, TwoPhaseCommit{
|
|||
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");
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@ import java.util.concurrent.CountDownLatch;
|
|||
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;
|
||||
|
@ -63,6 +64,29 @@ public class TestNumericDocValuesUpdates extends LuceneTestCase {
|
|||
return doc;
|
||||
}
|
||||
|
||||
@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();
|
||||
|
|
Loading…
Reference in New Issue