diff --git a/community/kernel/src/main/java/org/neo4j/graphdb/factory/GraphDatabaseFactoryState.java b/community/kernel/src/main/java/org/neo4j/graphdb/factory/GraphDatabaseFactoryState.java index f14c307e7930..c59c0535b1ad 100644 --- a/community/kernel/src/main/java/org/neo4j/graphdb/factory/GraphDatabaseFactoryState.java +++ b/community/kernel/src/main/java/org/neo4j/graphdb/factory/GraphDatabaseFactoryState.java @@ -21,8 +21,10 @@ import java.util.ArrayList; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.function.Predicate; import org.neo4j.graphdb.security.URLAccessRule; import org.neo4j.helpers.Service; @@ -39,13 +41,14 @@ public class GraphDatabaseFactoryState private final List> kernelExtensions; private Monitors monitors; private LogProvider userLogProvider; - private Map urlAccessRules; + private final Map urlAccessRules; - public GraphDatabaseFactoryState() { + public GraphDatabaseFactoryState() + { settingsClasses = new ArrayList<>(); settingsClasses.add( GraphDatabaseSettings.class ); kernelExtensions = new ArrayList<>(); - for ( KernelExtensionFactory factory : Service.load( KernelExtensionFactory.class ) ) + for ( KernelExtensionFactory factory : Service.load( KernelExtensionFactory.class ) ) { kernelExtensions.add( factory ); } @@ -67,6 +70,19 @@ public Iterable> getKernelExtension() return kernelExtensions; } + public void removeKernelExtensions( Predicate> toRemove ) + { + Iterator> iterator = kernelExtensions.iterator(); + while ( iterator.hasNext() ) + { + KernelExtensionFactory extension = iterator.next(); + if ( toRemove.test( extension ) ) + { + iterator.remove(); + } + } + } + public void setKernelExtensions( Iterable> newKernelExtensions ) { kernelExtensions.clear(); diff --git a/enterprise/ha/src/test/java/org/neo4j/graphdb/factory/TestHighlyAvailableGraphDatabaseFactory.java b/enterprise/ha/src/test/java/org/neo4j/graphdb/factory/TestHighlyAvailableGraphDatabaseFactory.java index c039e88d9f10..b9ae19e083ac 100644 --- a/enterprise/ha/src/test/java/org/neo4j/graphdb/factory/TestHighlyAvailableGraphDatabaseFactory.java +++ b/enterprise/ha/src/test/java/org/neo4j/graphdb/factory/TestHighlyAvailableGraphDatabaseFactory.java @@ -20,6 +20,7 @@ package org.neo4j.graphdb.factory; import java.util.Collections; +import java.util.function.Predicate; import org.neo4j.kernel.extension.KernelExtensionFactory; import org.neo4j.kernel.impl.ha.ClusterManager; @@ -50,4 +51,10 @@ public TestHighlyAvailableGraphDatabaseFactory setKernelExtensions( Iterable> toRemove ) + { + getCurrentState().removeKernelExtensions( toRemove ); + return this; + } } diff --git a/enterprise/ha/src/test/java/org/neo4j/kernel/api/impl/labelscan/LabelScanStoreHaIT.java b/enterprise/ha/src/test/java/org/neo4j/kernel/api/impl/labelscan/LabelScanStoreHaIT.java index 6935b782740b..71d4e0bfed43 100644 --- a/enterprise/ha/src/test/java/org/neo4j/kernel/api/impl/labelscan/LabelScanStoreHaIT.java +++ b/enterprise/ha/src/test/java/org/neo4j/kernel/api/impl/labelscan/LabelScanStoreHaIT.java @@ -24,11 +24,10 @@ import org.junit.Rule; import org.junit.Test; -import java.util.Collections; - import org.neo4j.graphdb.GraphDatabaseService; import org.neo4j.graphdb.Label; import org.neo4j.graphdb.Transaction; +import org.neo4j.graphdb.factory.GraphDatabaseSettings; import org.neo4j.graphdb.factory.TestHighlyAvailableGraphDatabaseFactory; import org.neo4j.kernel.api.labelscan.LabelScanStore; import org.neo4j.kernel.extension.KernelExtensionFactory; @@ -40,6 +39,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; + import static org.neo4j.helpers.collection.Iterators.count; import static org.neo4j.kernel.impl.ha.ClusterManager.allAvailabilityGuardsReleased; import static org.neo4j.kernel.impl.ha.ClusterManager.allSeesAllAsAvailable; @@ -111,15 +111,18 @@ public void setUp() { KernelExtensionFactory testExtension = labelScanStoreExtension( monitor ); TestHighlyAvailableGraphDatabaseFactory factory = new TestHighlyAvailableGraphDatabaseFactory(); - factory.addKernelExtensions( Collections.singletonList( testExtension ) ); + factory.removeKernelExtensions( extension -> extension.getClass().getName().contains( "LabelScan" ) ); + factory.addKernelExtension( testExtension ); ClusterManager clusterManager = new ClusterManager.Builder( testDirectory.directory( "root" ) ) .withDbFactory( factory ) + .withSharedSetting( GraphDatabaseSettings.label_index, labelIndexSettingName() ) .withStoreDirInitializer( ( serverId, storeDir ) -> { if ( serverId == 1 ) { GraphDatabaseService db = new TestGraphDatabaseFactory() .addKernelExtension( testExtension ) .newEmbeddedDatabaseBuilder( storeDir.getAbsoluteFile() ) + .setConfig( GraphDatabaseSettings.label_index, labelIndexSettingName() ) .newGraphDatabase(); try { @@ -141,6 +144,8 @@ public void setUp() cluster.await( allAvailabilityGuardsReleased() ); } + protected abstract String labelIndexSettingName(); + protected abstract KernelExtensionFactory labelScanStoreExtension( LabelScanStore.Monitor monitor ); @After diff --git a/enterprise/ha/src/test/java/org/neo4j/kernel/api/impl/labelscan/LuceneLabelScanStoreHaIT.java b/enterprise/ha/src/test/java/org/neo4j/kernel/api/impl/labelscan/LuceneLabelScanStoreHaIT.java index 84a2fa81885b..b8749412e145 100644 --- a/enterprise/ha/src/test/java/org/neo4j/kernel/api/impl/labelscan/LuceneLabelScanStoreHaIT.java +++ b/enterprise/ha/src/test/java/org/neo4j/kernel/api/impl/labelscan/LuceneLabelScanStoreHaIT.java @@ -19,6 +19,7 @@ */ package org.neo4j.kernel.api.impl.labelscan; +import org.neo4j.graphdb.factory.GraphDatabaseSettings.LabelIndex; import org.neo4j.kernel.api.labelscan.LabelScanStore; import org.neo4j.kernel.extension.KernelExtensionFactory; @@ -29,4 +30,10 @@ protected KernelExtensionFactory labelScanStoreExtension( LabelScanStore.Moni { return new LuceneLabelScanStoreExtension( 100, monitor ); } + + @Override + protected String labelIndexSettingName() + { + return LabelIndex.LUCENE.name(); + } } diff --git a/enterprise/ha/src/test/java/org/neo4j/kernel/api/impl/labelscan/NativeLabelScanStoreHaIT.java b/enterprise/ha/src/test/java/org/neo4j/kernel/api/impl/labelscan/NativeLabelScanStoreHaIT.java index 139160dc1032..8fea8b7d9f38 100644 --- a/enterprise/ha/src/test/java/org/neo4j/kernel/api/impl/labelscan/NativeLabelScanStoreHaIT.java +++ b/enterprise/ha/src/test/java/org/neo4j/kernel/api/impl/labelscan/NativeLabelScanStoreHaIT.java @@ -19,6 +19,7 @@ */ package org.neo4j.kernel.api.impl.labelscan; +import org.neo4j.graphdb.factory.GraphDatabaseSettings.LabelIndex; import org.neo4j.kernel.api.labelscan.LabelScanStore; import org.neo4j.kernel.extension.KernelExtensionFactory; import org.neo4j.kernel.impl.api.scan.NativeLabelScanStoreExtension; @@ -30,4 +31,10 @@ protected KernelExtensionFactory labelScanStoreExtension( LabelScanStore.Moni { return new NativeLabelScanStoreExtension( 100, monitor ); } + + @Override + protected String labelIndexSettingName() + { + return LabelIndex.NATIVE.name(); + } }