From 0c8cc6da03812c5f2ba5fc8a97757e84cbb4a3e9 Mon Sep 17 00:00:00 2001 From: Ragnar Mellbin Date: Thu, 24 Aug 2017 12:38:40 +0200 Subject: [PATCH] Bloom index now properly indexes relationships --- .../BloomIndexTransactionEventUpdater.java | 11 ++++++----- .../api/impl/bloom/integration/BloomIT.java | 19 ++++++++++++++++--- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/enterprise/bloom-index/src/main/java/org/neo4j/kernel/api/impl/bloom/BloomIndexTransactionEventUpdater.java b/enterprise/bloom-index/src/main/java/org/neo4j/kernel/api/impl/bloom/BloomIndexTransactionEventUpdater.java index f83ade6ba8d5a..cc6da8d8f2d3f 100644 --- a/enterprise/bloom-index/src/main/java/org/neo4j/kernel/api/impl/bloom/BloomIndexTransactionEventUpdater.java +++ b/enterprise/bloom-index/src/main/java/org/neo4j/kernel/api/impl/bloom/BloomIndexTransactionEventUpdater.java @@ -25,6 +25,7 @@ import java.util.HashMap; import java.util.Map; +import org.neo4j.graphdb.Entity; import org.neo4j.graphdb.Node; import org.neo4j.graphdb.NotFoundException; import org.neo4j.graphdb.event.PropertyEntry; @@ -62,7 +63,6 @@ public Object beforeCommit( TransactionData data ) throws Exception data.assignedNodeProperties().forEach( propertyEntry -> nodeMap.put( propertyEntry.entity().getId(), propertyEntry.entity().getAllProperties() ) ); Map> relationshipMap = new HashMap>(); - data.removedRelationshipProperties().forEach( propertyEntry -> { try @@ -89,14 +89,15 @@ public void afterCommit( TransactionData data, Object state ) deleteIndexData( data.deletedNodes(), nodeIndex ); //update relationship index Map> relationshipMap = ((Map>[]) state)[1]; - updatePropertyData( data.removedNodeProperties(), relationshipMap, relationshipIndex ); - updatePropertyData( data.assignedNodeProperties(), relationshipMap, relationshipIndex ); + updatePropertyData( data.removedRelationshipProperties(), relationshipMap, relationshipIndex ); + updatePropertyData( data.assignedRelationshipProperties(), relationshipMap, relationshipIndex ); deleteIndexData( data.deletedNodes(), nodeIndex ); } - private void updatePropertyData( Iterable> propertyEntries, Map> state, WritableDatabaseBloomIndex nodeIndex ) + private void updatePropertyData( Iterable> propertyEntries, Map> state, + WritableDatabaseBloomIndex nodeIndex ) { - for ( PropertyEntry propertyEntry : propertyEntries ) + for ( PropertyEntry propertyEntry : propertyEntries ) { long nodeId = propertyEntry.entity().getId(); Map allProperties = state.get( nodeId ); diff --git a/enterprise/bloom-index/src/test/java/org/neo4j/kernel/api/impl/bloom/integration/BloomIT.java b/enterprise/bloom-index/src/test/java/org/neo4j/kernel/api/impl/bloom/integration/BloomIT.java index 3410b51a03f9e..65c9de0c9a8ce 100644 --- a/enterprise/bloom-index/src/test/java/org/neo4j/kernel/api/impl/bloom/integration/BloomIT.java +++ b/enterprise/bloom-index/src/test/java/org/neo4j/kernel/api/impl/bloom/integration/BloomIT.java @@ -27,6 +27,9 @@ import java.util.Collections; import org.neo4j.graphdb.GraphDatabaseService; +import org.neo4j.graphdb.Node; +import org.neo4j.graphdb.Relationship; +import org.neo4j.graphdb.RelationshipType; import org.neo4j.graphdb.Result; import org.neo4j.graphdb.Transaction; import org.neo4j.graphdb.factory.GraphDatabaseSettings; @@ -39,7 +42,9 @@ public class BloomIT { public static final String NODES = "CALL dbms.bloom.bloomNodes([\"%s\"])"; + public static final String RELS = "CALL dbms.bloom.bloomRelationships([\"%s\"])"; public static final String NODEID = "nodeid"; + public static final String RELID = "relid"; @Rule public final EphemeralFileSystemRule fs = new EphemeralFileSystemRule(); @@ -52,7 +57,7 @@ public void before() throws Exception factory = new TestGraphDatabaseFactory(); factory.setFileSystem( fs.get() ); factory.addKernelExtensions( Collections.singletonList( new BloomKernelExtensionFactory() ) ); - db = factory.newImpermanentDatabase( Collections.singletonMap( GraphDatabaseSettings.bloom_indexed_properties, "prop" ) ); + db = factory.newImpermanentDatabase( Collections.singletonMap( GraphDatabaseSettings.bloom_indexed_properties, "prop, relprop" ) ); } @Test @@ -60,13 +65,21 @@ public void shouldPopulateAndQueryIndexes() throws Exception { try ( Transaction transaction = db.beginTx() ) { - db.createNode().setProperty( "prop", "This is a integration test." ); + Node node1 = db.createNode(); + node1.setProperty( "prop", "This is a integration test." ); + Node node2 = db.createNode(); + node2.setProperty( "prop", "This is a related integration test" ); + Relationship relationship = node1.createRelationshipTo( node2, RelationshipType.withName( "type" ) ); + relationship.setProperty( "relprop", "They relate" ); transaction.success(); } Result result = db.execute( String.format( NODES, "integration" ) ); - assertEquals( 0L, result.next().get( NODEID ) ); + assertEquals( 1L, result.next().get( NODEID ) ); + assertFalse( result.hasNext() ); + result = db.execute( String.format( RELS, "relate" ) ); + assertEquals( 0L, result.next().get( RELID ) ); assertFalse( result.hasNext() ); }