From f151fe8e9850692e2f369f5477544fcf4028eff0 Mon Sep 17 00:00:00 2001 From: fickludd Date: Tue, 8 May 2018 14:35:03 +0200 Subject: [PATCH] Let SchemaCache store CapableIndexDescriptor --- .../kernel/api/schema/SchemaDescriptor.java | 2 + .../api/schema/index/IndexDescriptor.java | 7 ++ .../schema/index/PendingIndexDescriptor.java | 19 ++++- .../api/index/CapableIndexDescriptor.java | 3 +- .../impl/api/index/IndexProviderMap.java | 21 +++++ .../impl/api/store/DefaultIndexReference.java | 7 -- .../kernel/impl/api/store/SchemaCache.java | 82 ++++++++++--------- .../kernel/impl/newapi/AllStoreHolder.java | 30 +++---- .../impl/newapi/IndexTxStateUpdater.java | 12 +-- .../recordstorage/RecordStorageEngine.java | 2 +- .../recordstorage/RecordStorageReader.java | 11 +-- .../impl/util/diffsets/SuperDiffSets.java | 4 +- .../storageengine/api/StorageReader.java | 15 ++-- .../api/txstate/ReadableDiffSets.java | 4 +- .../api/txstate/SuperReadableDiffSets.java | 2 +- .../internal/BatchInserterImpl.java | 28 +++---- .../neo4j/kernel/impl/api/index/IndexIT.java | 8 +- .../impl/api/index/IndexStatisticsTest.java | 2 +- .../impl/api/store/SchemaCacheTest.java | 8 +- .../impl/newapi/OperationsLockTest.java | 10 ++- .../impl/api/MultipleOpenCursorsTest.java | 5 +- .../java/org/neo4j/kernel/ha/HaCountsIT.java | 2 +- .../UniquenessConstraintCreationIT.java | 8 +- 23 files changed, 169 insertions(+), 123 deletions(-) diff --git a/community/kernel-api/src/main/java/org/neo4j/internal/kernel/api/schema/SchemaDescriptor.java b/community/kernel-api/src/main/java/org/neo4j/internal/kernel/api/schema/SchemaDescriptor.java index 0b6e0db80e13..128eb9d67a40 100644 --- a/community/kernel-api/src/main/java/org/neo4j/internal/kernel/api/schema/SchemaDescriptor.java +++ b/community/kernel-api/src/main/java/org/neo4j/internal/kernel/api/schema/SchemaDescriptor.java @@ -19,8 +19,10 @@ */ package org.neo4j.internal.kernel.api.schema; +import java.util.Arrays; import java.util.function.Predicate; +import org.neo4j.internal.kernel.api.IndexReference; import org.neo4j.internal.kernel.api.TokenNameLookup; import org.neo4j.storageengine.api.lock.ResourceType; diff --git a/community/kernel/src/main/java/org/neo4j/kernel/api/schema/index/IndexDescriptor.java b/community/kernel/src/main/java/org/neo4j/kernel/api/schema/index/IndexDescriptor.java index 0b1df0d7c82a..1c1ef3e44d49 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/api/schema/index/IndexDescriptor.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/api/schema/index/IndexDescriptor.java @@ -25,6 +25,7 @@ import org.neo4j.internal.kernel.api.IndexCapability; import org.neo4j.kernel.api.index.IndexProvider; import org.neo4j.kernel.impl.api.index.CapableIndexDescriptor; +import org.neo4j.kernel.impl.api.index.IndexProviderMap; import org.neo4j.storageengine.api.schema.SchemaRule; import static org.neo4j.internal.kernel.api.schema.SchemaUtil.idTokenNameLookup; @@ -157,4 +158,10 @@ public CapableIndexDescriptor withoutCapabilities() { return new CapableIndexDescriptor( id, providerDescriptor, this, owningConstraintId, IndexCapability.NO_CAPABILITY ); } + + public CapableIndexDescriptor withCapabilities( IndexProviderMap indexProviderMap ) + { + IndexCapability capability = indexProviderMap.apply( providerDescriptor ).getCapability(); + return new CapableIndexDescriptor( id, providerDescriptor, this, owningConstraintId, capability ); + } } diff --git a/community/kernel/src/main/java/org/neo4j/kernel/api/schema/index/PendingIndexDescriptor.java b/community/kernel/src/main/java/org/neo4j/kernel/api/schema/index/PendingIndexDescriptor.java index c27adcce0065..9cb0ecd9afd1 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/api/schema/index/PendingIndexDescriptor.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/api/schema/index/PendingIndexDescriptor.java @@ -25,12 +25,15 @@ import java.util.function.Predicate; import org.neo4j.helpers.collection.Iterators; -import org.neo4j.internal.kernel.api.IndexReference; +import org.neo4j.internal.kernel.api.CapableIndexReference; +import org.neo4j.internal.kernel.api.IndexOrder; +import org.neo4j.internal.kernel.api.IndexValueCapability; import org.neo4j.internal.kernel.api.TokenNameLookup; import org.neo4j.internal.kernel.api.schema.SchemaDescriptor; import org.neo4j.internal.kernel.api.schema.SchemaDescriptorSupplier; import org.neo4j.internal.kernel.api.schema.SchemaUtil; import org.neo4j.kernel.api.index.IndexProvider; +import org.neo4j.values.storable.ValueCategory; import static java.lang.String.format; import static org.neo4j.kernel.api.schema.index.PendingIndexDescriptor.Filter.GENERAL; @@ -40,7 +43,7 @@ * Internal representation of a graph index, including the schema unit it targets (eg. label-property combination) * and the type of index. UNIQUE indexes are used to back uniqueness constraints. */ -public class PendingIndexDescriptor implements SchemaDescriptorSupplier, IndexReference +public class PendingIndexDescriptor implements SchemaDescriptorSupplier, CapableIndexReference { public enum Type { @@ -154,6 +157,18 @@ public IndexProvider.Descriptor providerDescriptor() return providerDescriptor; } + @Override + public IndexOrder[] orderCapability( ValueCategory... valueCategories ) + { + return ORDER_NONE; + } + + @Override + public IndexValueCapability valueCapability( ValueCategory... valueCategories ) + { + return IndexValueCapability.NO; + } + /** * @param tokenNameLookup used for looking up names for token ids. * @return a user friendly description of what this index indexes. diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/CapableIndexDescriptor.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/CapableIndexDescriptor.java index b4c0b1b81501..a72d6d40e9fb 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/CapableIndexDescriptor.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/CapableIndexDescriptor.java @@ -19,7 +19,6 @@ */ package org.neo4j.kernel.impl.api.index; -import org.neo4j.internal.kernel.api.CapableIndexReference; import org.neo4j.internal.kernel.api.IndexCapability; import org.neo4j.internal.kernel.api.IndexOrder; import org.neo4j.internal.kernel.api.IndexValueCapability; @@ -28,7 +27,7 @@ import org.neo4j.kernel.api.schema.index.PendingIndexDescriptor; import org.neo4j.values.storable.ValueCategory; -public class CapableIndexDescriptor extends IndexDescriptor implements CapableIndexReference +public class CapableIndexDescriptor extends IndexDescriptor { private final IndexCapability indexCapability; diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/IndexProviderMap.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/IndexProviderMap.java index 68cb1b6341ca..217a6ca39d51 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/IndexProviderMap.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/IndexProviderMap.java @@ -32,4 +32,25 @@ public interface IndexProviderMap extends Function visitor ); + + IndexProviderMap EMPTY = new IndexProviderMap() + { + @Override + public IndexProvider apply( IndexProvider.Descriptor descriptor ) throws IndexProviderNotFoundException + { + return IndexProvider.EMPTY; + } + + @Override + public IndexProvider getDefaultProvider() + { + return IndexProvider.EMPTY; + } + + @Override + public void accept( Consumer visitor ) + { + // yey! + } + }; } diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/store/DefaultIndexReference.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/store/DefaultIndexReference.java index 6688eff38edd..c4763ba90465 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/store/DefaultIndexReference.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/store/DefaultIndexReference.java @@ -79,13 +79,6 @@ public static IndexReference general( int label, int...properties ) return new DefaultIndexReference( false, label, properties ); } - public static IndexReference fromDescriptor( PendingIndexDescriptor descriptor ) - { - boolean unique = descriptor.type() == PendingIndexDescriptor.Type.UNIQUE; - SchemaDescriptor schema = descriptor.schema(); - return new DefaultIndexReference( unique, schema.keyId(), schema.getPropertyIds() ); - } - public static PendingIndexDescriptor toDescriptor( IndexReference reference ) { if ( reference.isUnique() ) diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/store/SchemaCache.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/store/SchemaCache.java index a315cd5e6dd7..997916d09fd5 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/store/SchemaCache.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/store/SchemaCache.java @@ -40,10 +40,11 @@ import org.neo4j.internal.kernel.api.schema.SchemaDescriptor; import org.neo4j.internal.kernel.api.schema.SchemaDescriptorPredicates; import org.neo4j.internal.kernel.api.schema.constraints.ConstraintDescriptor; -import org.neo4j.kernel.api.schema.index.PendingIndexDescriptor; +import org.neo4j.kernel.api.schema.index.IndexDescriptor; +import org.neo4j.kernel.impl.api.index.CapableIndexDescriptor; +import org.neo4j.kernel.impl.api.index.IndexProviderMap; import org.neo4j.kernel.impl.constraints.ConstraintSemantics; import org.neo4j.kernel.impl.store.record.ConstraintRule; -import org.neo4j.kernel.api.schema.index.IndexDescriptor; import org.neo4j.storageengine.api.schema.SchemaRule; import static java.util.Collections.emptyIterator; @@ -55,14 +56,18 @@ public class SchemaCache { private final Lock cacheUpdateLock = new StampedLock().asWriteLock(); + private final IndexProviderMap indexProviderMap; private volatile SchemaCacheState schemaCacheState; - public SchemaCache( ConstraintSemantics constraintSemantics, Iterable initialRules ) + public SchemaCache( ConstraintSemantics constraintSemantics, + Iterable initialRules, + IndexProviderMap indexProviderMap ) { - this.schemaCacheState = new SchemaCacheState( constraintSemantics, initialRules ); + this.indexProviderMap = indexProviderMap; + this.schemaCacheState = new SchemaCacheState( constraintSemantics, initialRules, indexProviderMap ); } - public Iterable indexRules() + public Iterable indexRules() { return schemaCacheState.indexRules(); } @@ -118,7 +123,7 @@ public void load( Iterable rules ) try { ConstraintSemantics constraintSemantics = schemaCacheState.constraintSemantics; - this.schemaCacheState = new SchemaCacheState( constraintSemantics, rules ); + this.schemaCacheState = new SchemaCacheState( constraintSemantics, rules, indexProviderMap ); } finally { @@ -156,17 +161,17 @@ public void removeSchemaRule( long id ) } } - public PendingIndexDescriptor indexDescriptor( SchemaDescriptor descriptor ) + public CapableIndexDescriptor indexDescriptor( SchemaDescriptor descriptor ) { return schemaCacheState.indexDescriptor( descriptor ); } - public Iterator indexDescriptorsForLabel( int labelId ) + public Iterator indexDescriptorsForLabel( int labelId ) { return schemaCacheState.indexDescriptorsForLabel( labelId ); } - public Iterator indexesByProperty( int propertyId ) + public Iterator indexesByProperty( int propertyId ) { return schemaCacheState.indexesByProperty( propertyId ); } @@ -174,19 +179,22 @@ public Iterator indexesByProperty( int propertyId ) private static class SchemaCacheState { private final ConstraintSemantics constraintSemantics; + private final IndexProviderMap indexProviderMap; private final Set constraints; - private final MutableLongObjectMap indexRuleById; + private final MutableLongObjectMap indexRuleById; private final MutableLongObjectMap constraintRuleById; - private final Map indexDescriptors; - private final MutableIntObjectMap> indexDescriptorsByLabel; + private final Map indexDescriptors; + private final MutableIntObjectMap> indexDescriptorsByLabel; private final Map,Object> dependantState; - private final MutableIntObjectMap> indexByProperty; + private final MutableIntObjectMap> indexByProperty; - SchemaCacheState( ConstraintSemantics constraintSemantics, Iterable rules ) + SchemaCacheState( ConstraintSemantics constraintSemantics, Iterable rules, + IndexProviderMap indexProviderMap ) { this.constraintSemantics = constraintSemantics; + this.indexProviderMap = indexProviderMap; this.constraints = new HashSet<>(); this.indexRuleById = new LongObjectHashMap<>(); this.constraintRuleById = new LongObjectHashMap<>(); @@ -209,6 +217,7 @@ private static class SchemaCacheState this.indexDescriptorsByLabel = IntObjectHashMap.newMap( schemaCacheState.indexDescriptorsByLabel ); this.dependantState = new ConcurrentHashMap<>(); this.indexByProperty = IntObjectHashMap.newMap( schemaCacheState.indexByProperty ); + this.indexProviderMap = schemaCacheState.indexProviderMap; } private void load( Iterable schemaRuleIterator ) @@ -219,7 +228,7 @@ private void load( Iterable schemaRuleIterator ) } } - Iterable indexRules() + Iterable indexRules() { return indexRuleById.values(); } @@ -249,20 +258,20 @@ Iterator constraints() return constraints.iterator(); } - PendingIndexDescriptor indexDescriptor( SchemaDescriptor descriptor ) + CapableIndexDescriptor indexDescriptor( SchemaDescriptor descriptor ) { return indexDescriptors.get( descriptor ); } - Iterator indexesByProperty( int propertyId ) + Iterator indexesByProperty( int propertyId ) { - List indexes = indexByProperty.get( propertyId ); + List indexes = indexByProperty.get( propertyId ); return (indexes == null) ? emptyIterator() : indexes.iterator(); } - Iterator indexDescriptorsForLabel( int labelId ) + Iterator indexDescriptorsForLabel( int labelId ) { - Set forLabel = indexDescriptorsByLabel.get( labelId ); + Set forLabel = indexDescriptorsByLabel.get( labelId ); return forLabel == null ? emptyIterator() : forLabel.iterator(); } @@ -281,21 +290,20 @@ void addSchemaRule( SchemaRule rule ) } else if ( rule instanceof IndexDescriptor ) { - IndexDescriptor indexRule = (IndexDescriptor) rule; - indexRuleById.put( indexRule.getId(), indexRule ); - SchemaDescriptor schemaDescriptor = indexRule.schema(); - PendingIndexDescriptor schemaIndexDescriptor = indexRule; - indexDescriptors.put( schemaDescriptor, schemaIndexDescriptor ); + CapableIndexDescriptor index = ((IndexDescriptor) rule).withCapabilities( indexProviderMap ); + indexRuleById.put( index.getId(), index ); + SchemaDescriptor schemaDescriptor = index.schema(); + indexDescriptors.put( schemaDescriptor, index ); - Set forLabel = + Set forLabel = indexDescriptorsByLabel.getIfAbsentPut( schemaDescriptor.keyId(), HashSet::new ); - forLabel.add( schemaIndexDescriptor ); + forLabel.add( index ); - for ( int propertyId : indexRule.schema().getPropertyIds() ) + for ( int propertyId : index.schema().getPropertyIds() ) { - List indexesForProperty = + List indexesForProperty = indexByProperty.getIfAbsentPut( propertyId, ArrayList::new ); - indexesForProperty.add( schemaIndexDescriptor ); + indexesForProperty.add( index ); } } } @@ -309,21 +317,21 @@ void removeSchemaRule( long id ) } else if ( indexRuleById.containsKey( id ) ) { - IndexDescriptor rule = indexRuleById.remove( id ); - SchemaDescriptor schema = rule.schema(); + CapableIndexDescriptor index = indexRuleById.remove( id ); + SchemaDescriptor schema = index.schema(); indexDescriptors.remove( schema ); - Set forLabel = indexDescriptorsByLabel.get( schema.keyId() ); - forLabel.remove( rule ); + Set forLabel = indexDescriptorsByLabel.get( schema.keyId() ); + forLabel.remove( index ); if ( forLabel.isEmpty() ) { indexDescriptorsByLabel.remove( schema.keyId() ); } - for ( int propertyId : rule.schema().getPropertyIds() ) + for ( int propertyId : index.schema().getPropertyIds() ) { - List forProperty = indexByProperty.get( propertyId ); - forProperty.remove( rule ); + List forProperty = indexByProperty.get( propertyId ); + forProperty.remove( index ); if ( forProperty.isEmpty() ) { indexByProperty.remove( propertyId ); diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/AllStoreHolder.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/AllStoreHolder.java index 8b0406e574bf..43fe50fcc1fe 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/AllStoreHolder.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/AllStoreHolder.java @@ -55,17 +55,17 @@ import org.neo4j.kernel.api.proc.Context; import org.neo4j.kernel.api.schema.LabelSchemaDescriptor; import org.neo4j.kernel.api.schema.SchemaDescriptorFactory; -import org.neo4j.kernel.api.schema.index.PendingIndexDescriptor; import org.neo4j.kernel.api.schema.index.IndexDescriptorFactory; +import org.neo4j.kernel.api.schema.index.PendingIndexDescriptor; import org.neo4j.kernel.api.txstate.TransactionCountingStateVisitor; import org.neo4j.kernel.api.txstate.TransactionState; import org.neo4j.kernel.impl.api.ClockContext; import org.neo4j.kernel.impl.api.CountsRecordState; import org.neo4j.kernel.impl.api.KernelTransactionImplementation; import org.neo4j.kernel.impl.api.SchemaState; +import org.neo4j.kernel.impl.api.index.CapableIndexDescriptor; import org.neo4j.kernel.impl.api.security.OverriddenAccessMode; import org.neo4j.kernel.impl.api.security.RestrictedAccessMode; -import org.neo4j.kernel.impl.api.store.DefaultCapableIndexReference; import org.neo4j.kernel.impl.api.store.DefaultIndexReference; import org.neo4j.kernel.impl.index.ExplicitIndexStore; import org.neo4j.kernel.impl.index.IndexEntityType; @@ -94,11 +94,9 @@ import org.neo4j.values.storable.Values; import static java.lang.String.format; -import static org.neo4j.helpers.collection.Iterators.emptyResourceIterator; import static org.neo4j.helpers.collection.Iterators.filter; import static org.neo4j.helpers.collection.Iterators.iterator; import static org.neo4j.helpers.collection.Iterators.singleOrNull; -import static org.neo4j.kernel.impl.api.store.DefaultIndexReference.fromDescriptor; import static org.neo4j.register.Registers.newDoubleLongRegister; import static org.neo4j.storageengine.api.txstate.TxStateVisitor.EMPTY; @@ -330,11 +328,10 @@ public CapableIndexReference index( int label, int... properties ) // This means we have invalid label or property ids. return CapableIndexReference.NO_INDEX; } - PendingIndexDescriptor indexDescriptor = storageReader.indexGetForSchema( descriptor ); + CapableIndexDescriptor indexDescriptor = storageReader.indexGetForSchema( descriptor ); if ( ktx.hasTxStateWithChanges() ) { - ReadableDiffSets diffSets = - ktx.txState().indexDiffSetsByLabel( label ); + ReadableDiffSets diffSets = ktx.txState().indexDiffSetsByLabel( label ); if ( indexDescriptor != null ) { if ( diffSets.isRemoved( indexDescriptor ) ) @@ -343,17 +340,16 @@ public CapableIndexReference index( int label, int... properties ) } else { - return indexGetCapability( indexDescriptor ); + return indexDescriptor; } } else { - Iterator fromTxState = filter( - SchemaDescriptor.equalTo( descriptor ), - diffSets.apply( emptyResourceIterator() ) ); + Iterator fromTxState = + filter( SchemaDescriptor.equalTo( descriptor ), diffSets.getAdded().iterator() ); if ( fromTxState.hasNext() ) { - return DefaultCapableIndexReference.fromDescriptor( fromTxState.next() ); + return fromTxState.next(); } else { @@ -362,7 +358,7 @@ public CapableIndexReference index( int label, int... properties ) } } - return indexDescriptor != null ? indexGetCapability( indexDescriptor ) : CapableIndexReference.NO_INDEX; + return indexDescriptor != null ? indexDescriptor : CapableIndexReference.NO_INDEX; } @Override @@ -371,12 +367,12 @@ public Iterator indexesGetForLabel( int labelId ) sharedOptimisticLock( ResourceTypes.LABEL, labelId ); ktx.assertOpen(); - Iterator iterator = storageReader.indexesGetForLabel( labelId ); + Iterator iterator = storageReader.indexesGetForLabel( labelId ); if ( ktx.hasTxStateWithChanges() ) { iterator = ktx.txState().indexDiffSetsByLabel( labelId ).apply( iterator ); } - return Iterators.map( DefaultIndexReference::fromDescriptor, iterator ); + return (Iterator)iterator; } @Override @@ -384,7 +380,7 @@ public Iterator indexesGetAll() { ktx.assertOpen(); - Iterator iterator = storageReader.indexesGetAll(); + Iterator iterator = storageReader.indexesGetAll(); if ( ktx.hasTxStateWithChanges() ) { iterator = ktx.txState().indexChanges().apply( storageReader.indexesGetAll() ); @@ -393,7 +389,7 @@ public Iterator indexesGetAll() return Iterators.map( indexDescriptor -> { sharedOptimisticLock( ResourceTypes.LABEL, indexDescriptor.schema().keyId() ); - return fromDescriptor( indexDescriptor ); + return indexDescriptor; }, iterator ); } diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/IndexTxStateUpdater.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/IndexTxStateUpdater.java index 17aa095ae77c..1f55a0b36ddd 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/IndexTxStateUpdater.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/IndexTxStateUpdater.java @@ -28,7 +28,7 @@ import org.neo4j.internal.kernel.api.NodeCursor; import org.neo4j.internal.kernel.api.PropertyCursor; -import org.neo4j.kernel.api.schema.index.PendingIndexDescriptor; +import org.neo4j.kernel.impl.api.index.CapableIndexDescriptor; import org.neo4j.kernel.impl.api.index.IndexingService; import org.neo4j.storageengine.api.StorageReader; import org.neo4j.values.storable.Value; @@ -84,10 +84,10 @@ void onLabelChange( int labelId, NodeCursor node, PropertyCursor propertyCursor, } // Check all indexes of the changed label - Iterator indexes = storageReader.indexesGetForLabel( labelId ); + Iterator indexes = storageReader.indexesGetForLabel( labelId ); while ( indexes.hasNext() ) { - PendingIndexDescriptor index = indexes.next(); + CapableIndexDescriptor index = indexes.next(); int[] indexPropertyIds = index.schema().getPropertyIds(); if ( nodeHasIndexProperties( nodePropertyIds, indexPropertyIds ) ) { @@ -118,7 +118,7 @@ private boolean noSchemaChangedInTx() void onPropertyAdd( NodeCursor node, PropertyCursor propertyCursor, int propertyKeyId, Value value ) { assert noSchemaChangedInTx(); - Iterator indexes = + Iterator indexes = storageReader.indexesGetRelatedToProperty( propertyKeyId ); NodeSchemaMatcher.onMatchingSchema( indexes, node, propertyCursor, propertyKeyId, ( index, propertyKeyIds ) -> @@ -132,7 +132,7 @@ void onPropertyAdd( NodeCursor node, PropertyCursor propertyCursor, int property void onPropertyRemove( NodeCursor node, PropertyCursor propertyCursor, int propertyKeyId, Value value ) { assert noSchemaChangedInTx(); - Iterator indexes = + Iterator indexes = storageReader.indexesGetRelatedToProperty( propertyKeyId ); NodeSchemaMatcher.onMatchingSchema( indexes, node, propertyCursor, propertyKeyId, ( index, propertyKeyIds ) -> @@ -146,7 +146,7 @@ void onPropertyChange( NodeCursor node, PropertyCursor propertyCursor, int prope Value beforeValue, Value afterValue ) { assert noSchemaChangedInTx(); - Iterator indexes = storageReader.indexesGetRelatedToProperty( propertyKeyId ); + Iterator indexes = storageReader.indexesGetRelatedToProperty( propertyKeyId ); NodeSchemaMatcher.onMatchingSchema( indexes, node, propertyCursor, propertyKeyId, ( index, propertyKeyIds ) -> { diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/storageengine/impl/recordstorage/RecordStorageEngine.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/storageengine/impl/recordstorage/RecordStorageEngine.java index a871cf42ce3c..56eacdd8fbc7 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/storageengine/impl/recordstorage/RecordStorageEngine.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/storageengine/impl/recordstorage/RecordStorageEngine.java @@ -201,7 +201,7 @@ public RecordStorageEngine( try { indexUpdatesConverter = new PropertyPhysicalToLogicalConverter( neoStores.getPropertyStore() ); - schemaCache = new SchemaCache( constraintSemantics, Collections.emptyList() ); + schemaCache = new SchemaCache( constraintSemantics, Collections.emptyList(), indexProviderMap ); schemaStorage = new SchemaStorage( neoStores.getSchemaStore() ); NeoStoreIndexStoreView neoStoreIndexStoreView = new NeoStoreIndexStoreView( lockService, neoStores ); diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/storageengine/impl/recordstorage/RecordStorageReader.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/storageengine/impl/recordstorage/RecordStorageReader.java index 3d3b97d994b6..4b0fd210cb1f 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/storageengine/impl/recordstorage/RecordStorageReader.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/storageengine/impl/recordstorage/RecordStorageReader.java @@ -52,6 +52,7 @@ import org.neo4j.kernel.impl.api.DegreeVisitor; import org.neo4j.kernel.impl.api.IndexReaderFactory; import org.neo4j.kernel.impl.api.RelationshipVisitor; +import org.neo4j.kernel.impl.api.index.CapableIndexDescriptor; import org.neo4j.kernel.impl.api.index.IndexProxy; import org.neo4j.kernel.impl.api.index.IndexingService; import org.neo4j.kernel.impl.api.store.DefaultCapableIndexReference; @@ -270,25 +271,25 @@ public PrimitiveLongResourceIterator nodesGetForLabel( int labelId ) } @Override - public PendingIndexDescriptor indexGetForSchema( SchemaDescriptor descriptor ) + public CapableIndexDescriptor indexGetForSchema( SchemaDescriptor descriptor ) { return schemaCache.indexDescriptor( descriptor ); } @Override - public Iterator indexesGetForLabel( int labelId ) + public Iterator indexesGetForLabel( int labelId ) { return schemaCache.indexDescriptorsForLabel( labelId ); } @Override - public Iterator indexesGetAll() + public Iterator indexesGetAll() { - return (Iterator)schemaCache.indexRules().iterator(); + return schemaCache.indexRules().iterator(); } @Override - public Iterator indexesGetRelatedToProperty( int propertyId ) + public Iterator indexesGetRelatedToProperty( int propertyId ) { return schemaCache.indexesByProperty( propertyId ); } diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/util/diffsets/SuperDiffSets.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/util/diffsets/SuperDiffSets.java index 9a25963a2f3d..3e348fd90076 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/util/diffsets/SuperDiffSets.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/util/diffsets/SuperDiffSets.java @@ -139,9 +139,9 @@ public boolean isEmpty() } @Override - public Iterator apply( Iterator source ) + public Iterator apply( Iterator source ) { - Iterator result = source; + Iterator result = (Iterator)source; if ( ( removedElements != null && !removedElements.isEmpty() ) || ( addedElements != null && !addedElements.isEmpty() ) ) { diff --git a/community/kernel/src/main/java/org/neo4j/storageengine/api/StorageReader.java b/community/kernel/src/main/java/org/neo4j/storageengine/api/StorageReader.java index 44e2814520e9..80e9dd3bb1c3 100644 --- a/community/kernel/src/main/java/org/neo4j/storageengine/api/StorageReader.java +++ b/community/kernel/src/main/java/org/neo4j/storageengine/api/StorageReader.java @@ -47,6 +47,7 @@ import org.neo4j.kernel.api.schema.index.PendingIndexDescriptor; import org.neo4j.kernel.impl.api.DegreeVisitor; import org.neo4j.kernel.impl.api.RelationshipVisitor; +import org.neo4j.kernel.impl.api.index.CapableIndexDescriptor; import org.neo4j.kernel.impl.api.store.RelationshipIterator; import org.neo4j.kernel.impl.locking.Lock; import org.neo4j.kernel.impl.store.InvalidRecordException; @@ -210,20 +211,20 @@ Cursor acquireSinglePropertyCursor( long propertyId, int propertyK * @param labelId label to list indexes for. * @return {@link PendingIndexDescriptor} associated with the given {@code labelId}. */ - Iterator indexesGetForLabel( int labelId ); + Iterator indexesGetForLabel( int labelId ); /** - * @return all {@link PendingIndexDescriptor} in storage. + * @return all {@link CapableIndexDescriptor} in storage. */ - Iterator indexesGetAll(); + Iterator indexesGetAll(); /** * Returns all indexes (including unique) related to a property. */ - Iterator indexesGetRelatedToProperty( int propertyId ); + Iterator indexesGetRelatedToProperty( int propertyId ); /** - * @param index {@link PendingIndexDescriptor} to get related uniqueness constraint for. + * @param index {@link CapableIndexDescriptor} to get related uniqueness constraint for. * @return schema rule id of uniqueness constraint that owns the given {@code index}, or {@code null} * if the given index isn't related to a uniqueness constraint. */ @@ -289,9 +290,9 @@ long indexGetCommittedId( PendingIndexDescriptor index ) * Looks for a stored index by given {@code descriptor} * * @param descriptor a description of the index. - * @return {@link PendingIndexDescriptor} for matching index, or {@code null} if not found. + * @return {@link CapableIndexDescriptor} for matching index, or {@code null} if not found. */ - PendingIndexDescriptor indexGetForSchema( SchemaDescriptor descriptor ); + CapableIndexDescriptor indexGetForSchema( SchemaDescriptor descriptor ); /** * Returns state of a stored index. diff --git a/community/kernel/src/main/java/org/neo4j/storageengine/api/txstate/ReadableDiffSets.java b/community/kernel/src/main/java/org/neo4j/storageengine/api/txstate/ReadableDiffSets.java index 62c5c75aced5..21ef6eeaf830 100644 --- a/community/kernel/src/main/java/org/neo4j/storageengine/api/txstate/ReadableDiffSets.java +++ b/community/kernel/src/main/java/org/neo4j/storageengine/api/txstate/ReadableDiffSets.java @@ -83,9 +83,9 @@ public boolean isEmpty() } @Override - public Iterator apply( Iterator source ) + public Iterator apply( Iterator source ) { - return source; + return (Iterator)source; } @Override diff --git a/community/kernel/src/main/java/org/neo4j/storageengine/api/txstate/SuperReadableDiffSets.java b/community/kernel/src/main/java/org/neo4j/storageengine/api/txstate/SuperReadableDiffSets.java index 8a3c60563fab..2e93d27d34b6 100644 --- a/community/kernel/src/main/java/org/neo4j/storageengine/api/txstate/SuperReadableDiffSets.java +++ b/community/kernel/src/main/java/org/neo4j/storageengine/api/txstate/SuperReadableDiffSets.java @@ -44,7 +44,7 @@ public interface SuperReadableDiffSets boolean isEmpty(); - Iterator apply( Iterator source ); + Iterator apply( Iterator source ); int delta(); diff --git a/community/kernel/src/main/java/org/neo4j/unsafe/batchinsert/internal/BatchInserterImpl.java b/community/kernel/src/main/java/org/neo4j/unsafe/batchinsert/internal/BatchInserterImpl.java index f2a28dcf4281..d8c2dea96f95 100644 --- a/community/kernel/src/main/java/org/neo4j/unsafe/batchinsert/internal/BatchInserterImpl.java +++ b/community/kernel/src/main/java/org/neo4j/unsafe/batchinsert/internal/BatchInserterImpl.java @@ -184,7 +184,7 @@ public class BatchInserterImpl implements BatchInserter, IndexConfigStoreProvide private final BatchTokenHolder relationshipTypeTokens; private final BatchTokenHolder labelTokens; private final IdGeneratorFactory idGeneratorFactory; - private final IndexProviderMap schemaIndexProviders; + private final IndexProviderMap indexProviderMap; private final LabelScanStore labelScanStore; private final Log msgLog; private final SchemaCache schemaCache; @@ -279,28 +279,28 @@ public BatchInserterImpl( final File storeDir, final FileSystemAbstraction fileS schemaStore = neoStores.getSchemaStore(); labelTokenStore = neoStores.getLabelTokenStore(); + Dependencies deps = new Dependencies(); + KernelExtensions extensions = life.add( new KernelExtensions( + new SimpleKernelContext( storeDir, DatabaseInfo.UNKNOWN, deps ), + kernelExtensions, deps, UnsatisfiedDependencyStrategies.ignore() ) ); + IndexProvider provider = extensions.resolveDependency( IndexProvider.class, + HighestSelectionStrategy.INSTANCE ); + indexProviderMap = new DefaultIndexProviderMap( provider ); + List indexes = propertyKeyTokenStore.getTokens( 10000 ); propertyKeyTokens = new BatchTokenHolder( indexes ); labelTokens = new BatchTokenHolder( labelTokenStore.getTokens( Integer.MAX_VALUE ) ); List types = relationshipTypeTokenStore.getTokens( Integer.MAX_VALUE ); relationshipTypeTokens = new BatchTokenHolder( types ); indexStore = life.add( new IndexConfigStore( this.storeDir, fileSystem ) ); - schemaCache = new SchemaCache( new StandardConstraintSemantics(), schemaStore ); + schemaCache = new SchemaCache( new StandardConstraintSemantics(), schemaStore, indexProviderMap ); indexStoreView = new NeoStoreIndexStoreView( LockService.NO_LOCK_SERVICE, neoStores ); - Dependencies deps = new Dependencies(); Monitors monitors = new Monitors(); deps.satisfyDependencies( fileSystem, config, logService, indexStoreView, pageCache, monitors, RecoveryCleanupWorkCollector.IMMEDIATE ); - KernelExtensions extensions = life.add( new KernelExtensions( - new SimpleKernelContext( storeDir, DatabaseInfo.UNKNOWN, deps ), - kernelExtensions, deps, UnsatisfiedDependencyStrategies.ignore() ) ); - - IndexProvider provider = extensions.resolveDependency( IndexProvider.class, - HighestSelectionStrategy.INSTANCE ); - schemaIndexProviders = new DefaultIndexProviderMap( provider ); labelScanStore = new NativeLabelScanStore( pageCache, storeDir, fileSystem, FullStoreChangeStream.EMPTY, false, new Monitors(), RecoveryCleanupWorkCollector.IMMEDIATE ); life.add( labelScanStore ); @@ -470,7 +470,7 @@ private void createIndexRule( int labelId, int[] propertyKeyIds ) IndexDescriptor schemaRule = IndexDescriptor.indexRule( schemaStore.nextId(), IndexDescriptorFactory.forLabel( labelId, propertyKeyIds ), - schemaIndexProviders.getDefaultProvider().getProviderDescriptor() ); + indexProviderMap.getDefaultProvider().getProviderDescriptor() ); for ( DynamicRecord record : schemaStore.allocateFrom( schemaRule ) ) { @@ -497,7 +497,7 @@ private void repopulateAllIndexes() throws IOException, IndexEntryConflictExcept { IndexDescriptor index = indexDescriptors[i]; descriptors[i] = index.schema(); - IndexPopulator populator = schemaIndexProviders.apply( index.providerDescriptor() ) + IndexPopulator populator = indexProviderMap.apply( index.providerDescriptor() ) .getPopulator( index, new IndexSamplingConfig( config ) ); populator.create(); populators.add( new IndexPopulatorWithSchema( populator, index ) ); @@ -584,7 +584,7 @@ private IndexDescriptor[] getIndexesNeedingPopulation() List indexesNeedingPopulation = new ArrayList<>(); for ( IndexDescriptor rule : schemaCache.indexRules() ) { - IndexProvider provider = schemaIndexProviders.apply( rule.providerDescriptor() ); + IndexProvider provider = indexProviderMap.apply( rule.providerDescriptor() ); if ( provider.getInitialState( rule ) != InternalIndexState.FAILED ) { indexesNeedingPopulation.add( rule ); @@ -611,7 +611,7 @@ private void createUniqueIndexAndOwningConstraint( PendingIndexDescriptor schema IndexDescriptor.constraintIndexRule( indexRuleId, schemaIndexDescriptor, - this.schemaIndexProviders.getDefaultProvider().getProviderDescriptor(), + this.indexProviderMap.getDefaultProvider().getProviderDescriptor(), constraintRuleId ); ConstraintRule constraintRule = diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexIT.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexIT.java index fb8737bdcdee..a146150fd6f4 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexIT.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexIT.java @@ -60,7 +60,6 @@ import static org.mockito.Mockito.mock; import static org.neo4j.helpers.collection.Iterators.asSet; import static org.neo4j.internal.kernel.api.security.LoginContext.AUTH_DISABLED; -import static org.neo4j.kernel.impl.api.store.DefaultIndexReference.fromDescriptor; public class IndexIT extends KernelIntegrationTest { @@ -189,7 +188,7 @@ public void shouldBeAbleToRemoveAConstraintIndexWithoutOwner() throws Exception // when SchemaWrite schemaWrite = schemaWriteInNewTransaction(); - schemaWrite.indexDrop( fromDescriptor( constraintIndex ) ); + schemaWrite.indexDrop( constraintIndex ); commit(); // then @@ -306,8 +305,9 @@ public void shouldListAll() throws Exception // given SchemaWrite schemaWrite = schemaWriteInNewTransaction(); IndexReference index1 = schemaWrite.indexCreate( descriptor ); - IndexReference index2 = fromDescriptor( - ((IndexBackedConstraintDescriptor) schemaWrite.uniquePropertyConstraintCreate( descriptor2 )).ownedIndexDescriptor()) ; + IndexReference index2 = + ((IndexBackedConstraintDescriptor) schemaWrite.uniquePropertyConstraintCreate( descriptor2 )) + .ownedIndexDescriptor(); commit(); // then/when diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexStatisticsTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexStatisticsTest.java index b5519bd178c2..e9ebd94e786b 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexStatisticsTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexStatisticsTest.java @@ -721,7 +721,7 @@ private static class IndexOnlineMonitor extends IndexingService.MonitorAdapter @Override public void populationCompleteOn( IndexDescriptor descriptor ) { - onlineIndexes.add( DefaultIndexReference.fromDescriptor( descriptor ) ); + onlineIndexes.add( descriptor ); } public boolean isIndexOnline( IndexReference descriptor ) diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/store/SchemaCacheTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/store/SchemaCacheTest.java index 31f5e36c5c9b..6cc4e49603f9 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/store/SchemaCacheTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/store/SchemaCacheTest.java @@ -33,6 +33,7 @@ import org.neo4j.kernel.api.schema.constaints.ConstraintDescriptorFactory; import org.neo4j.kernel.api.schema.index.PendingIndexDescriptor; import org.neo4j.kernel.api.schema.index.IndexDescriptorFactory; +import org.neo4j.kernel.impl.api.index.IndexProviderMap; import org.neo4j.kernel.impl.constraints.StandardConstraintSemantics; import org.neo4j.kernel.impl.store.record.ConstraintRule; import org.neo4j.kernel.api.schema.index.IndexDescriptor; @@ -63,7 +64,7 @@ public void should_construct_schema_cache() { // GIVEN Collection rules = asList( hans, witch, gretel, robot ); - SchemaCache cache = new SchemaCache( new ConstraintSemantics(), rules ); + SchemaCache cache = new SchemaCache( new ConstraintSemantics(), rules, IndexProviderMap.EMPTY ); // THEN assertEquals( asSet( hans, gretel ), Iterables.asSet( cache.indexRules() ) ); @@ -74,7 +75,7 @@ public void should_construct_schema_cache() public void addRemoveIndexes() { Collection rules = asList( hans, witch, gretel, robot ); - SchemaCache cache = new SchemaCache( new ConstraintSemantics(), rules ); + SchemaCache cache = new SchemaCache( new ConstraintSemantics(), rules, IndexProviderMap.EMPTY ); IndexDescriptor rule1 = newIndexRule( 10, 11, 12 ); IndexDescriptor rule2 = newIndexRule( 13, 14, 15 ); @@ -361,7 +362,8 @@ private ConstraintRule uniquenessConstraintRule( long ruleId, int labelId, int p private static SchemaCache newSchemaCache( SchemaRule... rules ) { return new SchemaCache( new ConstraintSemantics(), (rules == null || rules.length == 0) - ? Collections.emptyList() : Arrays.asList( rules ) ); + ? Collections.emptyList() : Arrays.asList( rules ), + IndexProviderMap.EMPTY ); } private static class ConstraintSemantics extends StandardConstraintSemantics diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/newapi/OperationsLockTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/newapi/OperationsLockTest.java index 05eed8a25ef7..c2462d60409a 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/newapi/OperationsLockTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/newapi/OperationsLockTest.java @@ -43,18 +43,19 @@ import org.neo4j.internal.kernel.api.security.SecurityContext; import org.neo4j.kernel.api.explicitindex.AutoIndexOperations; import org.neo4j.kernel.api.explicitindex.AutoIndexing; +import org.neo4j.kernel.api.index.IndexProvider; import org.neo4j.kernel.api.schema.SchemaDescriptorFactory; import org.neo4j.kernel.api.schema.constaints.ConstraintDescriptorFactory; import org.neo4j.kernel.api.schema.constaints.RelExistenceConstraintDescriptor; import org.neo4j.kernel.api.schema.constaints.UniquenessConstraintDescriptor; -import org.neo4j.kernel.api.schema.index.PendingIndexDescriptor; +import org.neo4j.kernel.api.schema.index.IndexDescriptor; import org.neo4j.kernel.api.schema.index.IndexDescriptorFactory; import org.neo4j.kernel.api.txstate.TransactionState; import org.neo4j.kernel.impl.api.KernelTransactionImplementation; import org.neo4j.kernel.impl.api.SchemaState; +import org.neo4j.kernel.impl.api.index.CapableIndexDescriptor; import org.neo4j.kernel.impl.api.state.ConstraintIndexCreator; import org.neo4j.kernel.impl.api.state.TxState; -import org.neo4j.kernel.impl.api.store.DefaultIndexReference; import org.neo4j.kernel.impl.constraints.ConstraintSemantics; import org.neo4j.kernel.impl.index.ExplicitIndexStore; import org.neo4j.kernel.impl.locking.LockTracer; @@ -447,11 +448,12 @@ public void shouldAcquireSchemaReadLockLazilyBeforeGettingAllConstraints() public void shouldAcquireSchemaWriteLockBeforeRemovingIndexRule() throws Exception { // given - PendingIndexDescriptor index = IndexDescriptorFactory.forLabel( 0, 0 ); + CapableIndexDescriptor index = IndexDescriptor.indexRule( 0, IndexDescriptorFactory.forLabel( 0, 0 ), + IndexProvider.UNDECIDED ).withoutCapabilities(); when( storageReader.indexGetForSchema( any() )).thenReturn( index ); // when - operations.indexDrop( DefaultIndexReference.fromDescriptor( index ) ); + operations.indexDrop( index ); // then order.verify( locks ).acquireExclusive( LockTracer.NONE, ResourceTypes.LABEL, 0 ); diff --git a/community/lucene-index/src/test/java/org/neo4j/kernel/impl/api/MultipleOpenCursorsTest.java b/community/lucene-index/src/test/java/org/neo4j/kernel/impl/api/MultipleOpenCursorsTest.java index 8175dfd79239..9466a63f2990 100644 --- a/community/lucene-index/src/test/java/org/neo4j/kernel/impl/api/MultipleOpenCursorsTest.java +++ b/community/lucene-index/src/test/java/org/neo4j/kernel/impl/api/MultipleOpenCursorsTest.java @@ -51,7 +51,6 @@ import org.neo4j.kernel.api.exceptions.schema.RepeatedPropertyInCompositeSchemaException; import org.neo4j.kernel.api.schema.index.PendingIndexDescriptor; import org.neo4j.kernel.api.schema.index.IndexDescriptorFactory; -import org.neo4j.kernel.impl.api.store.DefaultIndexReference; import org.neo4j.test.rule.DatabaseRule; import org.neo4j.test.rule.EmbeddedDatabaseRule; import org.neo4j.test.rule.RandomRule; @@ -829,8 +828,8 @@ NodeValueIndexCursor indexQuery( KernelTransaction ktx, PendingIndexDescriptor i throws KernelException { NodeValueIndexCursor cursor = ktx.cursors().allocateNodeValueIndexCursor(); - ktx.dataRead().nodeIndexSeek( DefaultIndexReference.fromDescriptor( indexDescriptor ), - cursor, IndexOrder.NONE, indexQueries ); + ktx.dataRead().nodeIndexSeek( indexDescriptor, + cursor, IndexOrder.NONE, indexQueries ); return cursor; } } diff --git a/enterprise/ha/src/test/java/org/neo4j/kernel/ha/HaCountsIT.java b/enterprise/ha/src/test/java/org/neo4j/kernel/ha/HaCountsIT.java index 92af8ee73b5f..7c6bc1034a35 100644 --- a/enterprise/ha/src/test/java/org/neo4j/kernel/ha/HaCountsIT.java +++ b/enterprise/ha/src/test/java/org/neo4j/kernel/ha/HaCountsIT.java @@ -260,7 +260,7 @@ private long awaitOnline( HighlyAvailableGraphDatabase db, PendingIndexDescripto try ( Transaction tx = db.beginTx() ) { KernelTransaction transaction = kernelTransaction( db ); - switch ( transaction.schemaRead().indexGetState( DefaultIndexReference.fromDescriptor( index ) ) ) + switch ( transaction.schemaRead().indexGetState( index ) ) { case ONLINE: return indexingService( db ).getIndexId( index.schema() ); diff --git a/enterprise/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/UniquenessConstraintCreationIT.java b/enterprise/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/UniquenessConstraintCreationIT.java index e11feabdc0fe..55883df4013a 100644 --- a/enterprise/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/UniquenessConstraintCreationIT.java +++ b/enterprise/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/UniquenessConstraintCreationIT.java @@ -30,6 +30,7 @@ import org.neo4j.graphdb.GraphDatabaseService; import org.neo4j.graphdb.Node; import org.neo4j.graphdb.ResourceIterator; +import org.neo4j.internal.kernel.api.IndexReference; import org.neo4j.internal.kernel.api.SchemaWrite; import org.neo4j.internal.kernel.api.TokenNameLookup; import org.neo4j.internal.kernel.api.TokenWrite; @@ -65,7 +66,6 @@ import static org.neo4j.graphdb.Label.label; import static org.neo4j.helpers.collection.Iterators.asSet; import static org.neo4j.helpers.collection.Iterators.single; -import static org.neo4j.kernel.impl.api.store.DefaultIndexReference.fromDescriptor; public class UniquenessConstraintCreationIT extends AbstractConstraintCreationIT @@ -184,7 +184,7 @@ public void shouldCreateAnIndexToGoAlongWithAUniquePropertyConstraint() throws E // then Transaction transaction = newTransaction(); - assertEquals( asSet( fromDescriptor( uniqueIndex ) ), asSet( transaction.schemaRead().indexesGetAll() ) ); + assertEquals( asSet( uniqueIndex ), asSet( transaction.schemaRead().indexesGetAll() ) ); commit(); } @@ -194,7 +194,7 @@ public void shouldDropCreatedConstraintIndexWhenRollingBackConstraintCreation() // given Transaction transaction = newTransaction( LoginContext.AUTH_DISABLED ); transaction.schemaWrite().uniquePropertyConstraintCreate( descriptor ); - assertEquals( asSet( fromDescriptor( uniqueIndex ) ), asSet( transaction.schemaRead().indexesGetAll() ) ); + assertEquals( asSet( uniqueIndex ), asSet( transaction.schemaRead().indexesGetAll() ) ); // when rollback(); @@ -273,7 +273,7 @@ public void shouldDropConstraintIndexWhenDroppingConstraint() throws Exception Transaction transaction = newTransaction( LoginContext.AUTH_DISABLED ); ConstraintDescriptor constraint = transaction.schemaWrite().uniquePropertyConstraintCreate( descriptor ); - assertEquals( asSet( fromDescriptor( uniqueIndex ) ), asSet( transaction.schemaRead().indexesGetAll() ) ); + assertEquals( asSet( uniqueIndex ), asSet( transaction.schemaRead().indexesGetAll() ) ); commit(); // when