diff --git a/community/kernel/src/main/java/org/neo4j/kernel/api/index/IndexPopulator.java b/community/kernel/src/main/java/org/neo4j/kernel/api/index/IndexPopulator.java index 556ff9611f634..9e0b179e8e6b2 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/api/index/IndexPopulator.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/api/index/IndexPopulator.java @@ -108,6 +108,8 @@ void add( List updates ) */ void markAsFailed( String failure ) throws IOException; + void includeSample( NodePropertyUpdate update ); + long sampleResult( DoubleLong.Out result ); class Adapter implements IndexPopulator @@ -148,6 +150,11 @@ public void markAsFailed( String failure ) { } + @Override + public void includeSample( NodePropertyUpdate update ) + { + } + @Override public long sampleResult( DoubleLong.Out result ) { diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/MultipleIndexPopulator.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/MultipleIndexPopulator.java index 267e0949ed712..a936809360cc7 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/MultipleIndexPopulator.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/MultipleIndexPopulator.java @@ -307,6 +307,12 @@ public void markAsFailed( String failure ) throws IOException throw new UnsupportedOperationException( "Multiple index populator can't be marked as failed." ); } + @Override + public void includeSample( NodePropertyUpdate update ) + { + throw new UnsupportedOperationException( "Multiple index populator can't perform index sampling." ); + } + @Override public long sampleResult( Out result ) { @@ -503,6 +509,7 @@ private void add( NodePropertyUpdate update ) { if ( isApplicable( update ) ) { + populator.includeSample( update ); addApplicable( update ); } } diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexCRUDIT.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexCRUDIT.java index 56d3a317c6a5d..30b66e1f8134b 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexCRUDIT.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexCRUDIT.java @@ -221,7 +221,6 @@ public void add( List updates ) { ReadOperations statement = ctxSupplier.get().readOperations(); updatesCommitted.add( update ); - addValueToSample( update.getNodeId(), update.getValueAfter() ); } } @@ -265,6 +264,12 @@ public void markAsFailed( String failure ) { } + @Override + public void includeSample( NodePropertyUpdate update ) + { + addValueToSample( update.getNodeId(), update.getValueAfter() ); + } + @Override public long sampleResult( Register.DoubleLong.Out result ) { diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexPopulationJobTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexPopulationJobTest.java index 0a556465236ef..824ead7efa07f 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexPopulationJobTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexPopulationJobTest.java @@ -117,10 +117,13 @@ public void shouldPopulateIndexWithOneNode() throws Exception job.run(); // THEN + NodePropertyUpdate update = add( nodeId, 0, value, new long[]{0} ); + verify( populator ).create(); - verify( populator ).add( singletonList( add( nodeId, 0, value, new long[]{0} ) ) ); + verify( populator ).includeSample( update ); + verify( populator ).add( singletonList( update ) ); verify( populator ).verifyDeferredConstraints( indexStoreView ); - verify( populator ).sampleResult( any( DoubleLong.Out.class) ); + verify( populator ).sampleResult( any( DoubleLong.Out.class ) ); verify( populator ).close( true ); verifyNoMoreInteractions( populator ); @@ -160,11 +163,16 @@ public void shouldPopulateIndexWithASmallDataset() throws Exception job.run(); // THEN + NodePropertyUpdate update1 = add( node1, 0, value, new long[]{0} ); + NodePropertyUpdate update2 = add( node4, 0, value, new long[]{0} ); + verify( populator ).create(); - verify( populator ).add( Collections.singletonList( add( node1, 0, value, new long[]{0} ) ) ); - verify( populator ).add( Collections.singletonList( add( node4, 0, value, new long[]{0} ) ) ); + verify( populator ).includeSample( update1 ); + verify( populator ).add( Collections.singletonList( update1 ) ); + verify( populator ).includeSample( update2 ); + verify( populator ).add( Collections.singletonList( update2 ) ); verify( populator ).verifyDeferredConstraints( indexStoreView ); - verify( populator ).sampleResult( any( DoubleLong.Out.class) ); + verify( populator ).sampleResult( any( DoubleLong.Out.class ) ); verify( populator ).close( true ); verifyNoMoreInteractions( populator ); diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexingServiceTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexingServiceTest.java index 2e0fa05d2aa0d..e4a5e30e421fb 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexingServiceTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexingServiceTest.java @@ -237,6 +237,7 @@ public void shouldDeliverUpdatesThatOccurDuringPopulationToPopulator() throws Ex assertEquals( InternalIndexState.ONLINE, proxy.getState() ); InOrder order = inOrder( populator, accessor, updater); order.verify( populator ).create(); + order.verify( populator ).includeSample( add( 1, "value1" ) ); order.verify( populator ).add( singletonList( add( 1, "value1" ) ) ); diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/inmemory/InMemoryIndex.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/inmemory/InMemoryIndex.java index 07a803a18af33..9093344426412 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/inmemory/InMemoryIndex.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/inmemory/InMemoryIndex.java @@ -173,6 +173,11 @@ public void markAsFailed( String failureString ) state = InternalIndexState.FAILED; } + @Override + public void includeSample( NodePropertyUpdate update ) + { + } + @Override public long sampleResult( DoubleLong.Out result ) { diff --git a/community/lucene-index/src/main/java/org/neo4j/kernel/api/impl/schema/populator/LuceneIndexPopulator.java b/community/lucene-index/src/main/java/org/neo4j/kernel/api/impl/schema/populator/LuceneIndexPopulator.java index 88cf206a8f5cf..b6f523002758c 100644 --- a/community/lucene-index/src/main/java/org/neo4j/kernel/api/impl/schema/populator/LuceneIndexPopulator.java +++ b/community/lucene-index/src/main/java/org/neo4j/kernel/api/impl/schema/populator/LuceneIndexPopulator.java @@ -59,8 +59,6 @@ public void drop() throws IOException @Override public void add( List updates ) throws IndexEntryConflictException, IOException { - includeSamples( updates ); - Iterator documents = updates.stream() .map( LuceneIndexPopulator::updateAsDocument ) .iterator(); @@ -93,8 +91,6 @@ public void markAsFailed( String failure ) throws IOException protected abstract void flush() throws IOException; - protected abstract void includeSamples( List updates ); - private static Document updateAsDocument( NodePropertyUpdate update ) { return LuceneDocumentStructure.documentRepresentingProperty( update.getNodeId(), update.getValueAfter() ); diff --git a/community/lucene-index/src/main/java/org/neo4j/kernel/api/impl/schema/populator/NonUniqueLuceneIndexPopulator.java b/community/lucene-index/src/main/java/org/neo4j/kernel/api/impl/schema/populator/NonUniqueLuceneIndexPopulator.java index 6cb0c62a217cf..1086c45fe6d0e 100644 --- a/community/lucene-index/src/main/java/org/neo4j/kernel/api/impl/schema/populator/NonUniqueLuceneIndexPopulator.java +++ b/community/lucene-index/src/main/java/org/neo4j/kernel/api/impl/schema/populator/NonUniqueLuceneIndexPopulator.java @@ -48,15 +48,6 @@ public NonUniqueLuceneIndexPopulator( LuceneSchemaIndex luceneIndex, IndexSampli this.sampler = new NonUniqueIndexSampler( samplingConfig.bufferSize() ); } - @Override - protected void includeSamples( List updates ) - { - for ( NodePropertyUpdate update : updates ) - { - sampler.include( LuceneDocumentStructure.encodedStringValue( update.getValueAfter() ) ); - } - } - @Override public void verifyDeferredConstraints( PropertyAccessor accessor ) throws IndexEntryConflictException, IOException { @@ -115,6 +106,12 @@ public void remove( PrimitiveLongSet nodeIds ) throws IOException }; } + @Override + public void includeSample( NodePropertyUpdate update ) + { + sampler.include( LuceneDocumentStructure.encodedStringValue( update.getValueAfter() ) ); + } + @Override public long sampleResult( Register.DoubleLong.Out result ) { diff --git a/community/lucene-index/src/main/java/org/neo4j/kernel/api/impl/schema/populator/UniqueLuceneIndexPopulator.java b/community/lucene-index/src/main/java/org/neo4j/kernel/api/impl/schema/populator/UniqueLuceneIndexPopulator.java index f4bbcca08abd1..a0a52ce57512a 100644 --- a/community/lucene-index/src/main/java/org/neo4j/kernel/api/impl/schema/populator/UniqueLuceneIndexPopulator.java +++ b/community/lucene-index/src/main/java/org/neo4j/kernel/api/impl/schema/populator/UniqueLuceneIndexPopulator.java @@ -52,12 +52,6 @@ protected void flush() throws IOException // no need to do anything yet. } - @Override - protected void includeSamples( List updates ) - { - sampler.increment( updates.size() ); - } - @Override public void verifyDeferredConstraints( PropertyAccessor accessor ) throws IndexEntryConflictException, IOException { @@ -117,6 +111,12 @@ public void remove( PrimitiveLongSet nodeIds ) }; } + @Override + public void includeSample( NodePropertyUpdate update ) + { + sampler.increment( 1 ); + } + @Override public long sampleResult( DoubleLong.Out result ) { diff --git a/community/lucene-index/src/test/java/org/neo4j/kernel/api/impl/schema/populator/NonUniqueLuceneIndexPopulatorTest.java b/community/lucene-index/src/test/java/org/neo4j/kernel/api/impl/schema/populator/NonUniqueLuceneIndexPopulatorTest.java index a3b5cc7d0091a..3e89f795bda49 100644 --- a/community/lucene-index/src/test/java/org/neo4j/kernel/api/impl/schema/populator/NonUniqueLuceneIndexPopulatorTest.java +++ b/community/lucene-index/src/test/java/org/neo4j/kernel/api/impl/schema/populator/NonUniqueLuceneIndexPopulatorTest.java @@ -95,7 +95,7 @@ public void sampleEmptyIndex() throws IOException } @Test - public void sampleAddedUpdates() throws Exception + public void sampleIncludedUpdates() throws Exception { populator = newPopulator(); @@ -104,7 +104,7 @@ public void sampleAddedUpdates() throws Exception NodePropertyUpdate.add( 2, 1, "bbb", new long[]{1} ), NodePropertyUpdate.add( 3, 1, "ccc", new long[]{1} ) ); - populator.add( updates ); + updates.forEach( populator::includeSample ); Register.DoubleLongRegister register = Registers.newDoubleLongRegister(); long indexSize = populator.sampleResult( register ); @@ -117,7 +117,7 @@ public void sampleAddedUpdates() throws Exception } @Test - public void sampleAddedUpdatesWithDuplicates() throws Exception + public void sampleIncludedUpdatesWithDuplicates() throws Exception { populator = newPopulator(); @@ -126,7 +126,7 @@ public void sampleAddedUpdatesWithDuplicates() throws Exception NodePropertyUpdate.add( 2, 1, "bar", new long[]{1} ), NodePropertyUpdate.add( 3, 1, "foo", new long[]{1} ) ); - populator.add( updates ); + updates.forEach( populator::includeSample ); Register.DoubleLongRegister register = Registers.newDoubleLongRegister(); long indexSize = populator.sampleResult( register ); diff --git a/community/lucene-index/src/test/java/org/neo4j/kernel/api/impl/schema/populator/UniqueLuceneIndexPopulatorTest.java b/community/lucene-index/src/test/java/org/neo4j/kernel/api/impl/schema/populator/UniqueLuceneIndexPopulatorTest.java index a71858dd8958f..8d53b0b4e0d7a 100644 --- a/community/lucene-index/src/test/java/org/neo4j/kernel/api/impl/schema/populator/UniqueLuceneIndexPopulatorTest.java +++ b/community/lucene-index/src/test/java/org/neo4j/kernel/api/impl/schema/populator/UniqueLuceneIndexPopulatorTest.java @@ -508,7 +508,7 @@ public void sampleEmptyIndex() throws Exception } @Test - public void sampleAddedUpdates() throws Exception + public void sampleIncludedUpdates() throws Exception { populator = newPopulator(); List updates = Arrays.asList( @@ -517,7 +517,7 @@ public void sampleAddedUpdates() throws Exception NodePropertyUpdate.add( 3, 1, "baz", new long[]{1} ), NodePropertyUpdate.add( 4, 1, "qux", new long[]{1} ) ); - populator.add( updates ); + updates.forEach( populator::includeSample ); Register.DoubleLongRegister register = Registers.newDoubleLongRegister(); long indexSize = populator.sampleResult( register ); diff --git a/enterprise/ha/src/test/java/org/neo4j/kernel/api/SchemaIndexHaIT.java b/enterprise/ha/src/test/java/org/neo4j/kernel/api/SchemaIndexHaIT.java index 36fb0f5092302..b11e0a7d8ac3f 100644 --- a/enterprise/ha/src/test/java/org/neo4j/kernel/api/SchemaIndexHaIT.java +++ b/enterprise/ha/src/test/java/org/neo4j/kernel/api/SchemaIndexHaIT.java @@ -470,6 +470,12 @@ public void markAsFailed( String failure ) throws IOException delegate.markAsFailed( failure ); } + @Override + public void includeSample( NodePropertyUpdate update ) + { + delegate.includeSample( update ); + } + @Override public long sampleResult( DoubleLong.Out result ) {