From 194d51efc4391a951b535a3f19d4001eca011209 Mon Sep 17 00:00:00 2001 From: Anton Persson Date: Tue, 25 Jul 2017 11:21:32 +0200 Subject: [PATCH] Use label scan store for index population independent of number of affected nodes --- .../storeview/DynamicIndexStoreView.java | 13 +---------- .../api/index/IndexPopulationJobTest.java | 4 ++-- .../storeview/DynamicIndexStoreViewTest.java | 23 +------------------ 3 files changed, 4 insertions(+), 36 deletions(-) diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/transaction/state/storeview/DynamicIndexStoreView.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/transaction/state/storeview/DynamicIndexStoreView.java index 147384437cc6b..5d85e140abd5a 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/transaction/state/storeview/DynamicIndexStoreView.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/transaction/state/storeview/DynamicIndexStoreView.java @@ -124,8 +124,7 @@ private boolean useAllNodeStoreScan( int[] labelIds ) { try { - return ArrayUtils.isEmpty( labelIds ) || isEmptyLabelScanStore() || - isNumberOfLabeledNodesExceedThreshold( labelIds ); + return ArrayUtils.isEmpty( labelIds ) || isEmptyLabelScanStore(); } catch ( Exception e ) { @@ -139,16 +138,6 @@ private boolean isEmptyLabelScanStore() throws Exception return labelScanStore.isEmpty(); } - private boolean isNumberOfLabeledNodesExceedThreshold( int[] labelIds ) - { - return getNumberOfLabeledNodes( labelIds ) > getVisitAllNodesThreshold(); - } - - private long getVisitAllNodesThreshold() - { - return (long) ((VISIT_ALL_NODES_THRESHOLD_PERCENTAGE / 100f) * nodeStore.getHighestPossibleIdInUse()); - } - private long getNumberOfLabeledNodes( int[] labelIds ) { return IntStream.of( labelIds ) 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 16f154a6785ce..aa7dba26bdd6a 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 @@ -160,7 +160,7 @@ public void shouldPopulateIndexWithOneNode() throws Exception IndexEntryUpdate update = IndexEntryUpdate.add( nodeId, descriptor, Values.of( value ) ); verify( populator ).create(); - verify( populator ).configureSampling( true ); + verify( populator ).configureSampling( false ); verify( populator ).includeSample( update ); verify( populator ).add( any( IndexEntryUpdate.class) ); verify( populator ).sampleResult(); @@ -208,7 +208,7 @@ public void shouldPopulateIndexWithASmallDataset() throws Exception IndexEntryUpdate update2 = add( node4, descriptor, Values.of( value ) ); verify( populator ).create(); - verify( populator ).configureSampling( true ); + verify( populator ).configureSampling( false ); verify( populator ).includeSample( update1 ); verify( populator ).includeSample( update2 ); verify( populator, times( 2 ) ).add( any( IndexEntryUpdate.class ) ); diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/state/storeview/DynamicIndexStoreViewTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/state/storeview/DynamicIndexStoreViewTest.java index 96e18cccce22c..41547b6c609f0 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/state/storeview/DynamicIndexStoreViewTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/state/storeview/DynamicIndexStoreViewTest.java @@ -74,28 +74,7 @@ public void setUp() } @Test - public void visitAllNodesWhenThresholdReached() throws Exception - { - when( nodeStore.getHighestPossibleIdInUse() ).thenReturn( 10L ); - when( nodeStore.getHighId() ).thenReturn( 10L ); - - mockLabelNodeCount( countStore, 1 ); - mockLabelNodeCount( countStore, 2 ); - mockLabelNodeCount( countStore, 3 ); - - DynamicIndexStoreView storeView = dynamicIndexStoreView(); - - StoreScan storeScan = storeView - .visitNodes( new int[]{1, 2, 3}, propertyKeyIdFilter, propertyUpdateVisitor, labelUpdateVisitor, false ); - - storeScan.run(); - - Mockito.verify( nodeStore, times( 10 ) ) - .getRecord( anyLong(), any( NodeRecord.class ), any( RecordLoad.class ) ); - } - - @Test - public void visitOnlyLabeledNodesWhenThresholdNotReached() throws Exception + public void visitOnlyLabeledNodes() throws Exception { LabelScanReader labelScanReader = mock( LabelScanReader.class ); when( labelScanStore.newReader() ).thenReturn( labelScanReader );