From 22bd340d608fdaf5a5582304246fe1df1b819e0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20Finn=C3=A9?= Date: Tue, 5 Feb 2019 16:20:15 +0100 Subject: [PATCH] Some attempt to call IndexPopulator#scanCompleted --- .../kernel/api/index/IndexPopulator.java | 9 +++++++ .../api/index/MultipleIndexPopulator.java | 12 +++++++++ .../schema/BlockBasedIndexPopulator.java | 26 ++----------------- .../impl/index/schema/BlockStorage.java | 2 +- .../WorkSyncedNativeIndexPopulator.java | 6 +++++ 5 files changed, 30 insertions(+), 25 deletions(-) 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 d948599f57e4..45e35adf96fa 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 @@ -141,6 +141,10 @@ public interface IndexPopulator IndexPopulator EMPTY = new Adapter(); + default void scanCompleted() throws IndexEntryConflictException + { // no-op by default + } + class Adapter implements IndexPopulator { @Override @@ -164,6 +168,11 @@ public IndexUpdater newPopulatingUpdater( NodePropertyAccessor accessor ) return SwallowingIndexUpdater.INSTANCE; } + @Override + public void scanCompleted() + { + } + @Override public void close( boolean populationCompletedSuccessfully ) { 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 23213d0dfce2..43eb51d2e992 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 @@ -293,6 +293,12 @@ public IndexSample sampleResult() throw new UnsupportedOperationException( "Multiple index populator can't perform index sampling." ); } + @Override + public void scanCompleted() + { + throw new UnsupportedOperationException( "Not supposed to be called" ); + } + void resetIndexCounts() { forEachPopulation( this::resetIndexCountsForPopulation ); @@ -309,6 +315,7 @@ void flipAfterPopulation( boolean verifyBeforeFlipping ) { try { + population.scanCompleted(); population.flip( verifyBeforeFlipping ); } catch ( Throwable t ) @@ -634,6 +641,11 @@ Collection> takeCurrentBatch() batchedUpdates = new ArrayList<>( BATCH_SIZE ); return batch; } + + void scanCompleted() throws IndexEntryConflictException + { + populator.scanCompleted(); + } } private class EntityPopulationVisitor implements Visitor update, BlockStorage bl storeUpdate( update.getEntityId(), update.values(), blockStorage ); } - void finishUp() throws IndexEntryConflictException + @Override + public void scanCompleted() throws IndexEntryConflictException { try { @@ -158,20 +158,6 @@ void finishUp() throws IndexEntryConflictException } } - @Override - public IndexSample sampleResult() - { - try - { - finishUp(); - return super.sampleResult(); - } - catch ( IndexEntryConflictException e ) - { - throw new IllegalStateException( e ); - } - } - private void writeExternalUpdatesToTree() throws IOException { try ( Writer writer = tree.writer(); @@ -223,14 +209,6 @@ private void writeScanUpdatesToTree() throws IOException, IndexEntryConflictExce } } - @Override - public void verifyDeferredConstraints( NodePropertyAccessor nodePropertyAccessor ) throws IndexEntryConflictException - { - // On building tree - finishUp(); // TODO just kidding, perhaps not here - super.verifyDeferredConstraints( nodePropertyAccessor ); - } - @Override public IndexUpdater newPopulatingUpdater( NodePropertyAccessor accessor ) { diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/index/schema/BlockStorage.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/index/schema/BlockStorage.java index 5eb38925f0c9..78e41e436080 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/index/schema/BlockStorage.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/index/schema/BlockStorage.java @@ -125,7 +125,7 @@ public void merge() throws IOException File tempFile = new File( blockFile.getParent(), blockFile.getName() + ".b" ); try { - int mergeFactor = 10; + int mergeFactor = 16; File targetFile = tempFile; while ( numberOfBlocksInCurrentFile > 1 ) { diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/index/schema/WorkSyncedNativeIndexPopulator.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/index/schema/WorkSyncedNativeIndexPopulator.java index 9b762982e5d2..ba75d89e84d3 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/index/schema/WorkSyncedNativeIndexPopulator.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/index/schema/WorkSyncedNativeIndexPopulator.java @@ -137,6 +137,12 @@ public void consistencyCheck() actual.consistencyCheck(); } + @Override + public void scanCompleted() throws IndexEntryConflictException + { + actual.scanCompleted(); + } + private class IndexUpdateApply { void process( Collection> indexEntryUpdates ) throws Exception