diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/index/labelscan/NativeLabelScanStore.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/index/labelscan/NativeLabelScanStore.java index 2e98e277c3ddc..12f58d3036c66 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/index/labelscan/NativeLabelScanStore.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/index/labelscan/NativeLabelScanStore.java @@ -292,7 +292,7 @@ public void init() throws IOException { // GBPTree is corrupt. Try to rebuild. monitor.notValidIndex(); - drop(); + dropStrict(); instantiateTree(); needsRebuild = true; } @@ -323,6 +323,18 @@ private void instantiateTree() throws IOException @Override public void drop() throws IOException + { + try + { + dropStrict(); + } + catch ( NoSuchFileException e ) + { + // Even better, it didn't even exist + } + } + + private void dropStrict() throws IOException { storeFileHandle().delete(); } diff --git a/community/neo4j/src/test/java/org/neo4j/store/label/DropOtherLabelIndexesIT.java b/community/neo4j/src/test/java/org/neo4j/store/label/DropOtherLabelIndexesIT.java index 2a90809a1c829..dc499d8b42492 100644 --- a/community/neo4j/src/test/java/org/neo4j/store/label/DropOtherLabelIndexesIT.java +++ b/community/neo4j/src/test/java/org/neo4j/store/label/DropOtherLabelIndexesIT.java @@ -22,6 +22,9 @@ import org.junit.Rule; import org.junit.Test; +import java.util.HashSet; +import java.util.Set; + import org.neo4j.graphdb.GraphDatabaseService; import org.neo4j.graphdb.Node; import org.neo4j.graphdb.ResourceIterator; @@ -30,6 +33,7 @@ import org.neo4j.graphdb.factory.GraphDatabaseSettings.LabelIndex; import org.neo4j.test.TestGraphDatabaseFactory; import org.neo4j.test.TestLabels; +import org.neo4j.test.rule.RandomRule; import org.neo4j.test.rule.TestDirectory; import static org.junit.Assert.assertEquals; @@ -39,6 +43,9 @@ public class DropOtherLabelIndexesIT { private static final TestLabels LABEL = TestLabels.LABEL_ONE; + @Rule + public final RandomRule random = new RandomRule(); + @Rule public final TestDirectory directory = TestDirectory.testDirectory(); @@ -50,30 +57,27 @@ public class DropOtherLabelIndexesIT public void shouldDropUnselectedLabelIndexes() throws Exception { // GIVEN - GraphDatabaseService db = db( LabelIndex.NATIVE ); - Node nodeA = createNode( db ); - assertNodes( db, nodeA ); - db.shutdown(); - - // WHEN - db = db( LabelIndex.LUCENE ); - Node nodeB = createNode( db ); - assertNodes( db, nodeA, nodeB ); - db.shutdown(); + LabelIndex[] types = LabelIndex.values(); + Set expectedNodes = new HashSet<>(); + for ( int i = 0; i < 5; i++ ) + { + // WHEN + GraphDatabaseService db = db( random.among( types ) ); + Node node = createNode( db ); + expectedNodes.add( node ); - // THEN - db = db( LabelIndex.NATIVE ); - Node nodeC = createNode( db ); - assertNodes( db, nodeA, nodeB, nodeC ); - db.shutdown(); + // THEN + assertNodes( db, expectedNodes ); + db.shutdown(); + } } - private void assertNodes( GraphDatabaseService db, Node... expectedNodes ) + private void assertNodes( GraphDatabaseService db, Set expectedNodes ) { try ( Transaction tx = db.beginTx(); ResourceIterator found = db.findNodes( LABEL ) ) { - assertEquals( asSet( expectedNodes ), asSet( found ) ); + assertEquals( expectedNodes, asSet( found ) ); tx.success(); } }