mirror of
https://github.com/apache/lucene.git
synced 2025-02-08 11:05:29 +00:00
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);
|
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;
|
final DocumentsWriterDeleteQueue deleteQueue = this.deleteQueue;
|
||||||
deleteQueue.addNumericUpdate(new NumericUpdate(term, field, value));
|
deleteQueue.addNumericUpdate(new NumericUpdate(term, field, value));
|
||||||
flushControl.doOnDelete();
|
flushControl.doOnDelete();
|
||||||
if (flushControl.doApplyAllDeletes()) {
|
return applyAllDeletes(deleteQueue);
|
||||||
applyAllDeletes(deleteQueue);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DocumentsWriterDeleteQueue currentDeleteSession() {
|
DocumentsWriterDeleteQueue currentDeleteSession() {
|
||||||
|
@ -1550,7 +1550,9 @@ public class IndexWriter implements Closeable, TwoPhaseCommit{
|
|||||||
throw new IllegalArgumentException("can only update existing numeric-docvalues fields!");
|
throw new IllegalArgumentException("can only update existing numeric-docvalues fields!");
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
docWriter.updateNumericDocValue(term, field, value);
|
if (docWriter.updateNumericDocValue(term, field, value)) {
|
||||||
|
processEvents(true, false);
|
||||||
|
}
|
||||||
} catch (OutOfMemoryError oom) {
|
} catch (OutOfMemoryError oom) {
|
||||||
handleOOM(oom, "updateNumericDocValue");
|
handleOOM(oom, "updateNumericDocValue");
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ import java.util.concurrent.CountDownLatch;
|
|||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
import org.apache.lucene.analysis.MockAnalyzer;
|
import org.apache.lucene.analysis.MockAnalyzer;
|
||||||
|
import org.apache.lucene.analysis.MockTokenizer;
|
||||||
import org.apache.lucene.codecs.Codec;
|
import org.apache.lucene.codecs.Codec;
|
||||||
import org.apache.lucene.codecs.DocValuesFormat;
|
import org.apache.lucene.codecs.DocValuesFormat;
|
||||||
import org.apache.lucene.codecs.asserting.AssertingDocValuesFormat;
|
import org.apache.lucene.codecs.asserting.AssertingDocValuesFormat;
|
||||||
@ -63,6 +64,29 @@ public class TestNumericDocValuesUpdates extends LuceneTestCase {
|
|||||||
return doc;
|
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
|
@Test
|
||||||
public void testSimple() throws Exception {
|
public void testSimple() throws Exception {
|
||||||
Directory dir = newDirectory();
|
Directory dir = newDirectory();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user