From dd1a7486558e7143d3663ec868de919e4958400b Mon Sep 17 00:00:00 2001 From: Ragnar Mellbin Date: Thu, 21 Sep 2017 16:41:27 +0200 Subject: [PATCH] Do not explicitly load the bloom procedures As this causes the DB to crash on startup when starting with the plugin jar. The procedures are picked up separately and explicitly loading them as well leads to a conflict. This also means that we need to load the procedures manually in the integration test. --- .../bloom/BloomKernelExtension.java | 1 - .../fulltext/integrations/bloom/BloomIT.java | 55 +++++++++++-------- 2 files changed, 32 insertions(+), 24 deletions(-) diff --git a/enterprise/fulltext-addon/src/main/java/org/neo4j/kernel/api/impl/fulltext/integrations/bloom/BloomKernelExtension.java b/enterprise/fulltext-addon/src/main/java/org/neo4j/kernel/api/impl/fulltext/integrations/bloom/BloomKernelExtension.java index e9a5b69f766a7..dbefb88369b08 100644 --- a/enterprise/fulltext-addon/src/main/java/org/neo4j/kernel/api/impl/fulltext/integrations/bloom/BloomKernelExtension.java +++ b/enterprise/fulltext-addon/src/main/java/org/neo4j/kernel/api/impl/fulltext/integrations/bloom/BloomKernelExtension.java @@ -89,7 +89,6 @@ public void start() throws IOException, KernelException provider.init(); procedures.registerComponent( FulltextProvider.class, context -> provider, true ); - procedures.registerProcedure( BloomProcedures.class ); } } diff --git a/enterprise/fulltext-addon/src/test/java/org/neo4j/kernel/api/impl/fulltext/integrations/bloom/BloomIT.java b/enterprise/fulltext-addon/src/test/java/org/neo4j/kernel/api/impl/fulltext/integrations/bloom/BloomIT.java index 90a15d55f65e0..c3645cfca894f 100644 --- a/enterprise/fulltext-addon/src/test/java/org/neo4j/kernel/api/impl/fulltext/integrations/bloom/BloomIT.java +++ b/enterprise/fulltext-addon/src/test/java/org/neo4j/kernel/api/impl/fulltext/integrations/bloom/BloomIT.java @@ -39,12 +39,15 @@ import org.neo4j.graphdb.Transaction; import org.neo4j.graphdb.config.InvalidSettingException; import org.neo4j.graphdb.factory.GraphDatabaseBuilder; +import org.neo4j.graphdb.factory.GraphDatabaseFactory; import org.neo4j.helpers.collection.Iterators; import org.neo4j.helpers.progress.ProgressMonitorFactory; +import org.neo4j.kernel.api.exceptions.KernelException; import org.neo4j.kernel.api.impl.fulltext.FulltextProvider; import org.neo4j.kernel.configuration.Config; +import org.neo4j.kernel.impl.proc.Procedures; +import org.neo4j.kernel.internal.GraphDatabaseAPI; import org.neo4j.logging.NullLogProvider; -import org.neo4j.test.TestGraphDatabaseFactory; import org.neo4j.test.mockito.matcher.RootCauseMatcher; import org.neo4j.test.rule.TestDirectory; import org.neo4j.test.rule.fs.DefaultFileSystemRule; @@ -76,17 +79,23 @@ public class BloomIT @Before public void before() throws Exception { - TestGraphDatabaseFactory factory = new TestGraphDatabaseFactory(); - factory.setFileSystem( fs.get() ); + GraphDatabaseFactory factory = new GraphDatabaseFactory(); builder = factory.newEmbeddedDatabaseBuilder( testDirectory.graphDbDir() ); builder.setConfig( bloom_enabled, "true" ); } + private GraphDatabaseService getDb() throws KernelException + { + GraphDatabaseService db = builder.newGraphDatabase(); + ((GraphDatabaseAPI) db).getDependencyResolver().resolveDependency( Procedures.class ).registerProcedure( BloomProcedures.class ); + return db; + } + @Test public void shouldPopulateAndQueryIndexes() throws Exception { builder.setConfig( bloom_indexed_properties, "prop, relprop" ); - db = builder.newGraphDatabase(); + db = getDb(); try ( Transaction transaction = db.beginTx() ) { Node node1 = db.createNode(); @@ -112,7 +121,7 @@ public void shouldBeAbleToConfigureAnalyzer() throws Exception { builder.setConfig( bloom_indexed_properties, "prop" ); builder.setConfig( BloomFulltextConfig.bloom_analyzer, "org.apache.lucene.analysis.sv.SwedishAnalyzer" ); - db = builder.newGraphDatabase(); + db = getDb(); try ( Transaction transaction = db.beginTx() ) { Node node1 = db.createNode(); @@ -138,7 +147,7 @@ public void shouldBeAbleToConfigureAnalyzer() throws Exception public void shouldPopulateIndexWithExistingDataOnIndexCreate() throws Exception { builder.setConfig( bloom_indexed_properties, "something" ); - db = builder.newGraphDatabase(); + db = getDb(); long nodeId; try ( Transaction tx = db.beginTx() ) @@ -154,7 +163,7 @@ public void shouldPopulateIndexWithExistingDataOnIndexCreate() throws Exception builder.setConfig( bloom_indexed_properties, "prop" ); builder.setConfig( BloomFulltextConfig.bloom_analyzer, "org.apache.lucene.analysis.da.DanishAnalyzer" ); - db = builder.newGraphDatabase(); + db = getDb(); db.execute( "CALL db.fulltext.bloomAwaitPopulation" ).close(); @@ -169,7 +178,7 @@ public void startupPopulationShouldNotCauseDuplicates() throws Exception { builder.setConfig( bloom_indexed_properties, "prop" ); - db = builder.newGraphDatabase(); + db = getDb(); long nodeId; try ( Transaction tx = db.beginTx() ) { @@ -187,7 +196,7 @@ public void startupPopulationShouldNotCauseDuplicates() throws Exception assertFalse( result.hasNext() ); db.shutdown(); - db = builder.newGraphDatabase(); + db = getDb(); // Verify it's STILL indexed exactly once db.execute( "CALL db.fulltext.bloomAwaitPopulation" ).close(); @@ -202,7 +211,7 @@ public void staleDataFromEntityDeleteShouldNotBeAccessibleAfterConfigurationChan { builder.setConfig( bloom_indexed_properties, "prop" ); - db = builder.newGraphDatabase(); + db = getDb(); long nodeId; try ( Transaction tx = db.beginTx() ) { @@ -214,7 +223,7 @@ public void staleDataFromEntityDeleteShouldNotBeAccessibleAfterConfigurationChan db.shutdown(); builder.setConfig( bloom_indexed_properties, "not-prop" ); - db = builder.newGraphDatabase(); + db = getDb(); try ( Transaction tx = db.beginTx() ) { @@ -225,7 +234,7 @@ public void staleDataFromEntityDeleteShouldNotBeAccessibleAfterConfigurationChan db.shutdown(); builder.setConfig( bloom_indexed_properties, "prop" ); - db = builder.newGraphDatabase(); + db = getDb(); // Verify that the node is no longer indexed db.execute( "CALL db.fulltext.bloomAwaitPopulation" ).close(); @@ -239,7 +248,7 @@ public void staleDataFromPropertyRemovalShouldNotBeAccessibleAfterConfigurationC { builder.setConfig( bloom_indexed_properties, "prop" ); - db = builder.newGraphDatabase(); + db = getDb(); long nodeId; try ( Transaction tx = db.beginTx() ) { @@ -251,7 +260,7 @@ public void staleDataFromPropertyRemovalShouldNotBeAccessibleAfterConfigurationC db.shutdown(); builder.setConfig( bloom_indexed_properties, "not-prop" ); - db = builder.newGraphDatabase(); + db = getDb(); try ( Transaction tx = db.beginTx() ) { @@ -262,7 +271,7 @@ public void staleDataFromPropertyRemovalShouldNotBeAccessibleAfterConfigurationC db.shutdown(); builder.setConfig( bloom_indexed_properties, "prop" ); - db = builder.newGraphDatabase(); + db = getDb(); // Verify that the node is no longer indexed db.execute( "CALL db.fulltext.bloomAwaitPopulation" ).close(); @@ -275,7 +284,7 @@ public void staleDataFromPropertyRemovalShouldNotBeAccessibleAfterConfigurationC public void updatesAreAvailableToConcurrentReadTransactions() throws Exception { builder.setConfig( bloom_indexed_properties, "prop" ); - db = builder.newGraphDatabase(); + db = getDb(); try ( Transaction tx = db.beginTx() ) { @@ -312,7 +321,7 @@ public void updatesAreAvailableToConcurrentReadTransactions() throws Exception public void shouldNotBeAbleToStartWithoutConfiguringProperties() throws Exception { expectedException.expect( new RootCauseMatcher<>( RuntimeException.class, "Properties to index must be configured for bloom fulltext" ) ); - db = builder.newGraphDatabase(); + db = getDb(); } @Test @@ -320,14 +329,14 @@ public void shouldNotBeAbleToStartWithIllegalPropertyKey() throws Exception { expectedException.expect( InvalidSettingException.class ); builder.setConfig( bloom_indexed_properties, "prop, " + FulltextProvider.FIELD_ENTITY_ID + ", hello" ); - db = builder.newGraphDatabase(); + db = getDb(); } @Test public void shouldBeAbleToRunConsistencyCheck() throws Exception { builder.setConfig( bloom_indexed_properties, "prop" ); - db = builder.newGraphDatabase(); + db = getDb(); try ( Transaction tx = db.beginTx() ) { @@ -354,7 +363,7 @@ public void shouldReindexNodesWhenAnalyzerIsChanged() throws Exception builder.setConfig( bloom_indexed_properties, "prop" ); builder.setConfig( BloomFulltextConfig.bloom_analyzer, ENGLISH ); - db = builder.newGraphDatabase(); + db = getDb(); try ( Transaction tx = db.beginTx() ) { db.createNode().setProperty( "prop", "Hello and hello again." ); @@ -376,7 +385,7 @@ public void shouldReindexNodesWhenAnalyzerIsChanged() throws Exception db.shutdown(); builder.setConfig( BloomFulltextConfig.bloom_analyzer, SWEDISH ); - db = builder.newGraphDatabase(); + db = getDb(); db.execute( "CALL db.fulltext.bloomAwaitPopulation" ).close(); try ( Transaction ignore = db.beginTx() ) @@ -398,7 +407,7 @@ public void shouldReindexAfterBeingTemporarilyDisabled() throws Exception builder.setConfig( bloom_indexed_properties, "prop" ); // Create a node while the index is enabled. - db = builder.newGraphDatabase(); + db = getDb(); try ( Transaction tx = db.beginTx() ) { db.createNode().setProperty( "prop", "Hello and hello again." ); @@ -420,7 +429,7 @@ public void shouldReindexAfterBeingTemporarilyDisabled() throws Exception // Re-enable the index and restart. Wait for the index to rebuild. db.shutdown(); builder.setConfig( bloom_enabled, "true" ); - db = builder.newGraphDatabase(); + db = getDb(); db.execute( "CALL db.fulltext.bloomAwaitPopulation" ).close(); // Now we should be able to find the node that was added while the index was disabled.