use of org.neo4j.kernel.api.impl.labelscan.writer.PartitionedLuceneLabelScanWriter in project neo4j by neo4j.
the class NodeRangeDocumentLabelScanStorageStrategyTest method shouldUpdateDocumentsForReLabeledNodes.
@Test
public void shouldUpdateDocumentsForReLabeledNodes() throws Exception {
// given
Document givenDoc = new Document();
format.addRangeValuesField(givenDoc, 0);
format.addLabelFields(givenDoc, "7", 0x70L);
WritableDatabaseLabelScanIndex index = mock(WritableDatabaseLabelScanIndex.class);
IndexWriter indexWriter = mock(IndexWriter.class);
WritableIndexPartition partition = newIndexPartitionMock(indexWriter, givenDoc);
when(index.getPartitions()).thenReturn(Collections.singletonList(partition));
LabelScanWriter writer = new PartitionedLuceneLabelScanWriter(index, format);
// when
writer.write(labelChanges(0, labels(), labels(7, 8)));
writer.close();
// then
Document thenDoc = new Document();
format.addRangeValuesField(thenDoc, 0);
format.addLabelFields(thenDoc, "7", 0x71L);
format.addLabelAndSearchFields(thenDoc, 8, new Bitmap(0x01L));
verify(indexWriter).updateDocument(eq(format.rangeTerm(0)), match(thenDoc));
}
use of org.neo4j.kernel.api.impl.labelscan.writer.PartitionedLuceneLabelScanWriter in project neo4j by neo4j.
the class NodeRangeDocumentLabelScanStorageStrategyTest method shouldUpdateDocumentToReflectLabelsAfterRegardlessOfPreviousContent.
@Test
public void shouldUpdateDocumentToReflectLabelsAfterRegardlessOfPreviousContent() throws Exception {
// given
IndexWriter indexWriter = mock(IndexWriter.class);
Document doc = document(format.rangeField(0), format.labelField(6, 0x1), format.labelField(7, 0x1));
WritableIndexPartition partition = newIndexPartitionMock(indexWriter, doc);
WritableDatabaseLabelScanIndex index = buildLuceneIndex(partition);
LabelScanWriter writer = new PartitionedLuceneLabelScanWriter(index, format);
// when
writer.write(labelChanges(0, labels(7), labels(7, 8)));
writer.close();
// then
verify(indexWriter).updateDocument(eq(format.rangeTerm(0)), match(document(format.rangeField(0), format.labelField(7, 0x01), format.labelField(8, 0x01), format.labelSearchField(7), format.labelSearchField(8))));
}
use of org.neo4j.kernel.api.impl.labelscan.writer.PartitionedLuceneLabelScanWriter in project neo4j by neo4j.
the class NodeRangeDocumentLabelScanStorageStrategyTest method shouldDeleteEmptyDocuments.
@Test
public void shouldDeleteEmptyDocuments() throws Exception {
// given
IndexWriter indexWriter = mock(IndexWriter.class);
Document doc = document(format.rangeField(0), format.labelField(7, 0x1));
WritableIndexPartition partition = newIndexPartitionMock(indexWriter, doc);
WritableDatabaseLabelScanIndex index = buildLuceneIndex(partition);
LabelScanWriter writer = new PartitionedLuceneLabelScanWriter(index, format);
// when
writer.write(labelChanges(0, labels(7), labels()));
writer.close();
// then
verify(indexWriter).deleteDocuments(format.rangeTerm(0));
}
use of org.neo4j.kernel.api.impl.labelscan.writer.PartitionedLuceneLabelScanWriter in project neo4j by neo4j.
the class NodeRangeDocumentLabelScanStorageStrategyTest method shouldCreateNewDocumentsForNewlyLabeledNodes.
@Test
public void shouldCreateNewDocumentsForNewlyLabeledNodes() throws Exception {
// given
WritableIndexPartition partition = mock(WritableIndexPartition.class);
WritableDatabaseLabelScanIndex index = buildLuceneIndex(partition);
PartitionSearcher partitionSearcher = mock(PartitionSearcher.class);
when(partition.acquireSearcher()).thenReturn(partitionSearcher);
IndexWriter indexWriter = mock(IndexWriter.class);
when(partition.getIndexWriter()).thenReturn(indexWriter);
IndexSearcher searcher = mock(IndexSearcher.class);
when(partitionSearcher.getIndexSearcher()).thenReturn(searcher);
when(searcher.search(new TermQuery(format.rangeTerm(0)), 1)).thenReturn(emptyTopDocs());
when(searcher.search(new TermQuery(format.rangeTerm(1)), 1)).thenReturn(null);
LabelScanWriter writer = new PartitionedLuceneLabelScanWriter(index, format);
// when
writer.write(labelChanges(0, labels(), labels(6, 7)));
writer.write(labelChanges(1, labels(), labels(6, 8)));
writer.write(labelChanges(1 << format.bitmapFormat().shift, labels(), labels(7)));
writer.close();
// then
verify(partition, times(2)).acquireSearcher();
verify(partitionSearcher, times(2)).getIndexSearcher();
verify(partition, times(2)).getIndexWriter();
verify(partitionSearcher, times(2)).close();
verify(indexWriter).updateDocument(eq(format.rangeTerm(0)), match(document(format.rangeField(0), format.labelField(6, 0x3), format.labelField(7, 0x1), format.labelField(8, 0x2), format.labelSearchField(8))));
verify(indexWriter).updateDocument(eq(format.rangeTerm(1)), match(document(format.rangeField(1), format.labelField(7, 0x1), format.labelSearchField(7))));
verify(index).maybeRefreshBlocking();
verifyNoMoreInteractions(partition);
}
use of org.neo4j.kernel.api.impl.labelscan.writer.PartitionedLuceneLabelScanWriter in project neo4j by neo4j.
the class LuceneLabelScanStoreWriterTest method shouldStoreDocumentWithNodeIdsInADifferentRange.
@Test
public void shouldStoreDocumentWithNodeIdsInADifferentRange() throws Exception {
// given
int nodeId1 = 1;
int nodeId2 = 65;
int label1 = 201;
int label2 = 202;
StubIndexPartition partition = newStubIndexPartition();
long node1Range = format.bitmapFormat().rangeOf(nodeId1);
long node2Range = format.bitmapFormat().rangeOf(nodeId2);
assertNotEquals(node1Range, node2Range);
WritableDatabaseLabelScanIndex index = buildLabelScanIndex(partition);
// when
PartitionedLuceneLabelScanWriter writer = createWriter(index);
writer.write(NodeLabelUpdate.labelChanges(nodeId1, new long[] {}, new long[] { label1 }));
writer.write(NodeLabelUpdate.labelChanges(nodeId2, new long[] {}, new long[] { label2 }));
writer.close();
// then
Document document1 = partition.documentFor(new Term(RANGE, valueOf(node1Range)));
assertTrue(format.bitmapFormat().hasLabel(parseLong(document1.get(valueOf(label1))), nodeId1));
Document document2 = partition.documentFor(new Term(RANGE, valueOf(node2Range)));
assertTrue(format.bitmapFormat().hasLabel(parseLong(document2.get(valueOf(label2))), nodeId2));
}
Aggregations