From 9c0cc41623411e235e0bf934f1ddd137ce4240ab Mon Sep 17 00:00:00 2001 From: fickludd Date: Mon, 7 May 2018 10:47:17 +0200 Subject: [PATCH] Made IndexRule extend SchemaIndexDescriptor --- .../checking/index/IndexAccessors.java | 6 +- .../full/FullCheckIntegrationTest.java | 14 ++-- .../schema/index/SchemaIndexDescriptor.java | 20 +++-- .../index/SchemaIndexDescriptorFactory.java | 9 ++- .../impl/api/index/IndexingService.java | 8 +- .../kernel/impl/api/store/SchemaCache.java | 6 +- .../neo4j/kernel/impl/newapi/Operations.java | 3 +- .../recordstorage/RecordStorageReader.java | 9 +-- .../kernel/impl/store/SchemaStorage.java | 2 +- .../kernel/impl/store/record/IndexRule.java | 77 ++++++------------- .../store/record/SchemaRuleSerialization.java | 8 +- .../internal/BatchInserterImpl.java | 8 +- .../DropBrokenUniquenessConstraintIT.java | 2 +- .../impl/api/index/IndexingServiceTest.java | 40 +++++----- .../kernel/impl/store/SchemaStorageTest.java | 6 +- .../kernel/impl/store/SchemaStoreTest.java | 12 +-- .../impl/store/record/IndexRuleTest.java | 8 +- .../record/SchemaRuleSerializationTest.java | 12 +-- .../org/neo4j/tools/dump/DumpCountsStore.java | 2 +- 19 files changed, 111 insertions(+), 141 deletions(-) diff --git a/community/consistency-check/src/main/java/org/neo4j/consistency/checking/index/IndexAccessors.java b/community/consistency-check/src/main/java/org/neo4j/consistency/checking/index/IndexAccessors.java index 6b9dfe5164d22..37bcd1a3536b4 100644 --- a/community/consistency-check/src/main/java/org/neo4j/consistency/checking/index/IndexAccessors.java +++ b/community/consistency-check/src/main/java/org/neo4j/consistency/checking/index/IndexAccessors.java @@ -67,7 +67,7 @@ public IndexAccessors( IndexProviderMap providers, else { if ( InternalIndexState.ONLINE == - provider( providers, indexRule ).getInitialState( indexRule.getId(), indexRule.getIndexDescriptor() ) ) + provider( providers, indexRule ).getInitialState( indexRule.getId(), indexRule ) ) { onlineIndexRules.add( indexRule ); } @@ -92,13 +92,13 @@ public IndexAccessors( IndexProviderMap providers, { long indexId = indexRule.getId(); accessors.put( indexId, provider( providers, indexRule ) - .getOnlineAccessor( indexId, indexRule.getIndexDescriptor(), samplingConfig ) ); + .getOnlineAccessor( indexId, indexRule, samplingConfig ) ); } } private IndexProvider provider( IndexProviderMap providers, IndexRule indexRule ) { - return providers.apply( indexRule.getProviderDescriptor() ); + return providers.apply( indexRule.providerDescriptor() ); } public Collection notOnlineRules() diff --git a/community/consistency-check/src/test/java/org/neo4j/consistency/checking/full/FullCheckIntegrationTest.java b/community/consistency-check/src/test/java/org/neo4j/consistency/checking/full/FullCheckIntegrationTest.java index b5ff02e4ae364..5f3fbec5740d8 100644 --- a/community/consistency-check/src/test/java/org/neo4j/consistency/checking/full/FullCheckIntegrationTest.java +++ b/community/consistency-check/src/test/java/org/neo4j/consistency/checking/full/FullCheckIntegrationTest.java @@ -454,8 +454,8 @@ public void shouldNotReportIndexInconsistenciesIfIndexIsFailed() throws Exceptio { IndexRule rule = rules.next(); IndexSamplingConfig samplingConfig = new IndexSamplingConfig( Config.defaults() ); - IndexPopulator populator = storeAccess.indexes().apply( rule.getProviderDescriptor() ) - .getPopulator( rule.getId(), rule.getIndexDescriptor(), samplingConfig ); + IndexPopulator populator = storeAccess.indexes().apply( rule.providerDescriptor() ) + .getPopulator( rule.getId(), rule, samplingConfig ); populator.markAsFailed( "Oh noes! I was a shiny index and then I was failed" ); populator.close( false ); @@ -563,9 +563,9 @@ public void shouldReportNodesThatAreNotIndexed() throws Exception while ( indexRuleIterator.hasNext() ) { IndexRule indexRule = indexRuleIterator.next(); - SchemaIndexDescriptor descriptor = indexRule.getIndexDescriptor(); + SchemaIndexDescriptor descriptor = indexRule; IndexAccessor accessor = fixture.directStoreAccess().indexes(). - apply( indexRule.getProviderDescriptor() ).getOnlineAccessor( + apply( indexRule.providerDescriptor() ).getOnlineAccessor( indexRule.getId(), descriptor, samplingConfig ); try ( IndexUpdater updater = accessor.newUpdater( IndexUpdateMode.ONLINE ) ) { @@ -600,10 +600,10 @@ public void shouldReportNodesWithDuplicatePropertyValueInUniqueIndex() throws Ex while ( indexRuleIterator.hasNext() ) { IndexRule indexRule = indexRuleIterator.next(); - IndexAccessor accessor = fixture.directStoreAccess().indexes().apply( indexRule.getProviderDescriptor() ) - .getOnlineAccessor( indexRule.getId(), indexRule.getIndexDescriptor(), samplingConfig ); + IndexAccessor accessor = fixture.directStoreAccess().indexes().apply( indexRule.providerDescriptor() ) + .getOnlineAccessor( indexRule.getId(), indexRule, samplingConfig ); IndexUpdater updater = accessor.newUpdater( IndexUpdateMode.ONLINE ); - updater.process( IndexEntryUpdate.add( 42, indexRule.getIndexDescriptor().schema(), values( indexRule ) ) ); + updater.process( IndexEntryUpdate.add( 42, indexRule.schema(), values( indexRule ) ) ); updater.close(); accessor.force( IOLimiter.unlimited() ); accessor.close(); diff --git a/community/kernel/src/main/java/org/neo4j/kernel/api/schema/index/SchemaIndexDescriptor.java b/community/kernel/src/main/java/org/neo4j/kernel/api/schema/index/SchemaIndexDescriptor.java index b986e35178de6..116be503dcdf2 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/api/schema/index/SchemaIndexDescriptor.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/api/schema/index/SchemaIndexDescriptor.java @@ -30,6 +30,7 @@ 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 static java.lang.String.format; import static org.neo4j.kernel.api.schema.index.SchemaIndexDescriptor.Filter.GENERAL; @@ -83,20 +84,17 @@ public interface Supplier private final SchemaDescriptor schema; private final SchemaIndexDescriptor.Type type; private final Optional name; - private final String providerKey; - private final String providerVersion; + private final IndexProvider.Descriptor providerDescriptor; public SchemaIndexDescriptor( SchemaDescriptor schema, Type type, Optional name, - String providerKey, - String providerVersion ) + IndexProvider.Descriptor providerDescriptor ) { this.schema = schema; this.type = type; this.name = name; - this.providerKey = providerKey; - this.providerVersion = providerVersion; + this.providerDescriptor = providerDescriptor; } // METHODS @@ -134,6 +132,16 @@ public int[] properties() return schema.getPropertyIds(); } + public Optional name() + { + return name; + } + + public IndexProvider.Descriptor providerDescriptor() + { + return providerDescriptor; + } + /** * @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/api/schema/index/SchemaIndexDescriptorFactory.java b/community/kernel/src/main/java/org/neo4j/kernel/api/schema/index/SchemaIndexDescriptorFactory.java index e4893b58b2610..285dd13b2841e 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/api/schema/index/SchemaIndexDescriptorFactory.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/api/schema/index/SchemaIndexDescriptorFactory.java @@ -23,6 +23,7 @@ import java.util.Optional; import org.neo4j.internal.kernel.api.schema.SchemaDescriptor; +import org.neo4j.kernel.api.index.IndexProvider; import org.neo4j.kernel.api.schema.SchemaDescriptorFactory; import static org.neo4j.kernel.api.schema.index.SchemaIndexDescriptor.Type.GENERAL; @@ -46,16 +47,16 @@ public static SchemaIndexDescriptor uniqueForLabel( int labelId, int... property public static SchemaIndexDescriptor forSchema( SchemaDescriptor schema ) { - return new SchemaIndexDescriptor( schema, GENERAL, null, null, null ); + return new SchemaIndexDescriptor( schema, GENERAL, null, null ); } - public static SchemaIndexDescriptor forSchema( SchemaDescriptor schema, Optional name, String providerKey, String providerVersion ) + public static SchemaIndexDescriptor forSchema( SchemaDescriptor schema, Optional name, IndexProvider.Descriptor providerDescriptor ) { - return new SchemaIndexDescriptor( schema, GENERAL, name, providerKey, providerVersion ); + return new SchemaIndexDescriptor( schema, GENERAL, name, providerDescriptor ); } public static SchemaIndexDescriptor uniqueForSchema( SchemaDescriptor schema ) { - return new SchemaIndexDescriptor( schema, UNIQUE, null, null, null ); + return new SchemaIndexDescriptor( schema, UNIQUE, null, null ); } } diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/IndexingService.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/IndexingService.java index 52a2cfe9034f7..81a3d02ad66a4 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/IndexingService.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/IndexingService.java @@ -203,8 +203,8 @@ public void init() IndexProxy indexProxy; long indexId = indexRule.getId(); - SchemaIndexDescriptor descriptor = indexRule.getIndexDescriptor(); - IndexProvider.Descriptor providerDescriptor = indexRule.getProviderDescriptor(); + SchemaIndexDescriptor descriptor = indexRule; + IndexProvider.Descriptor providerDescriptor = indexRule.providerDescriptor(); IndexProvider provider = providerMap.apply( providerDescriptor ); InternalIndexState initialState = provider.getInitialState( indexId, descriptor ); indexStates.computeIfAbsent( initialState, internalIndexState -> new ArrayList<>() ) @@ -766,8 +766,8 @@ public IndexMap apply( IndexMap indexMap ) indexMap.putIndexProxy( ruleId, index ); continue; } - final SchemaIndexDescriptor descriptor = rule.getIndexDescriptor(); - Descriptor providerDescriptor = rule.getProviderDescriptor(); + final SchemaIndexDescriptor descriptor = rule; + Descriptor providerDescriptor = rule.providerDescriptor(); boolean flipToTentative = rule.canSupportUniqueConstraint(); if ( state == State.RUNNING ) { 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 716931f0c3d97..5043f9ac40543 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 @@ -284,7 +284,7 @@ else if ( rule instanceof IndexRule ) IndexRule indexRule = (IndexRule) rule; indexRuleById.put( indexRule.getId(), indexRule ); SchemaDescriptor schemaDescriptor = indexRule.schema(); - SchemaIndexDescriptor schemaIndexDescriptor = indexRule.getIndexDescriptor(); + SchemaIndexDescriptor schemaIndexDescriptor = indexRule; indexDescriptors.put( schemaDescriptor, schemaIndexDescriptor ); Set forLabel = @@ -314,7 +314,7 @@ else if ( indexRuleById.containsKey( id ) ) indexDescriptors.remove( schema ); Set forLabel = indexDescriptorsByLabel.get( schema.keyId() ); - forLabel.remove( rule.getIndexDescriptor() ); + forLabel.remove( rule ); if ( forLabel.isEmpty() ) { indexDescriptorsByLabel.remove( schema.keyId() ); @@ -323,7 +323,7 @@ else if ( indexRuleById.containsKey( id ) ) for ( int propertyId : rule.schema().getPropertyIds() ) { List forProperty = indexByProperty.get( propertyId ); - forProperty.remove( rule.getIndexDescriptor() ); + forProperty.remove( rule ); if ( forProperty.isEmpty() ) { indexByProperty.remove( propertyId ); diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/Operations.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/Operations.java index ad713de878618..269108fc0062d 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/Operations.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/Operations.java @@ -895,8 +895,7 @@ public IndexReference indexCreate( SchemaDescriptor descriptor, SchemaIndexDescriptor index = SchemaIndexDescriptorFactory.forSchema( descriptor, name, - providerDescriptor.getKey(), - providerDescriptor.getVersion() ); + providerDescriptor ); ktx.txState().indexRuleDoAdd( index ); return index; } 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 f961577c24a1a..8c19966c3782f 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 @@ -286,7 +286,7 @@ public Iterator indexesGetForLabel( int labelId ) @Override public Iterator indexesGetAll() { - return toIndexDescriptors( schemaCache.indexRules() ); + return (Iterator)schemaCache.indexRules().iterator(); } @Override @@ -687,7 +687,7 @@ private IndexRule indexRule( SchemaIndexDescriptor index ) { for ( IndexRule rule : schemaCache.indexRules() ) { - if ( rule.getIndexDescriptor().equals( index ) ) + if ( rule.equals( index ) ) { return rule; } @@ -809,11 +809,6 @@ private Direction directionOf( long nodeId, long relationshipId, long startNode, " with startNode:" + startNode + " and endNode:" + endNode ); } - private static Iterator toIndexDescriptors( Iterable rules ) - { - return Iterators.map( IndexRule::getIndexDescriptor, rules.iterator() ); - } - @Override public void acquire() { diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/store/SchemaStorage.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/store/SchemaStorage.java index 8fc5a384bf964..ff4c4fa747869 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/store/SchemaStorage.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/store/SchemaStorage.java @@ -56,7 +56,7 @@ public SchemaStorage( RecordStore schemaStore ) */ public IndexRule indexGetForSchema( final SchemaIndexDescriptor descriptor ) { - Iterator rules = loadAllSchemaRules( descriptor::isSame, IndexRule.class, false ); + Iterator rules = loadAllSchemaRules( descriptor::equals, IndexRule.class, false ); IndexRule foundRule = null; diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/store/record/IndexRule.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/store/record/IndexRule.java index 29c2eca084cbd..6267193ef65f4 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/store/record/IndexRule.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/store/record/IndexRule.java @@ -19,8 +19,9 @@ */ package org.neo4j.kernel.impl.store.record; +import java.util.Optional; + import org.neo4j.graphdb.Label; -import org.neo4j.internal.kernel.api.schema.SchemaDescriptor; import org.neo4j.kernel.api.index.IndexProvider; import org.neo4j.kernel.api.schema.index.SchemaIndexDescriptor; import org.neo4j.storageengine.api.schema.SchemaRule; @@ -30,13 +31,10 @@ /** * A {@link Label} can have zero or more index rules which will have data specified in the rules indexed. */ -public class IndexRule implements SchemaRule, SchemaIndexDescriptor.Supplier +public class IndexRule extends SchemaIndexDescriptor implements SchemaRule { - private final IndexProvider.Descriptor providerDescriptor; - private final SchemaIndexDescriptor descriptor; - private final Long owningConstraint; private final long id; - private final String name; + private final Long owningConstraintId; public static IndexRule indexRule( long id, SchemaIndexDescriptor descriptor, IndexProvider.Descriptor providerDescriptor ) @@ -65,34 +63,32 @@ public static IndexRule constraintIndexRule( long id, SchemaIndexDescriptor desc } IndexRule( long id, IndexProvider.Descriptor providerDescriptor, - SchemaIndexDescriptor descriptor, Long owningConstraint ) + SchemaIndexDescriptor descriptor, Long owningConstraintId ) { - this( id, providerDescriptor, descriptor, owningConstraint, null ); + this( id, providerDescriptor, descriptor, owningConstraintId, null ); } IndexRule( long id, IndexProvider.Descriptor providerDescriptor, - SchemaIndexDescriptor descriptor, Long owningConstraint, String name ) + SchemaIndexDescriptor descriptor, Long owningConstraintId, String name ) { + super( descriptor.schema(), + descriptor.type(), + Optional.of( descriptor.name().orElse( "index_" + id ) ), + descriptor.providerDescriptor() ); + this.id = id; - this.name = SchemaRule.nameOrDefault( name, "index_" + id ); - if ( providerDescriptor == null ) + + if ( descriptor.providerDescriptor() == null ) { throw new IllegalArgumentException( "null provider descriptor prohibited" ); } - this.descriptor = descriptor; - this.owningConstraint = owningConstraint; - this.providerDescriptor = providerDescriptor; - } - - public IndexProvider.Descriptor getProviderDescriptor() - { - return providerDescriptor; + this.owningConstraintId = owningConstraintId; } public boolean canSupportUniqueConstraint() { - return descriptor.type() == SchemaIndexDescriptor.Type.UNIQUE; + return type() == SchemaIndexDescriptor.Type.UNIQUE; } /** @@ -114,7 +110,7 @@ public Long getOwningConstraint() { throw new IllegalStateException( "Can only get owner from constraint indexes." ); } - return owningConstraint; + return owningConstraintId; } public boolean isIndexWithoutOwningConstraint() @@ -128,7 +124,7 @@ public IndexRule withOwningConstraint( long constraintId ) { throw new IllegalStateException( this + " is not a constraint index" ); } - return constraintIndexRule( id, descriptor, providerDescriptor, constraintId ); + return constraintIndexRule( id, this, this.providerDescriptor(), constraintId ); } @Override @@ -137,40 +133,11 @@ public String toString() String ownerString = ""; if ( canSupportUniqueConstraint() ) { - ownerString = ", owner=" + owningConstraint; - } - - return "IndexRule[id=" + id + ", descriptor=" + descriptor.userDescription( idTokenNameLookup ) + - ", provider=" + providerDescriptor + ownerString + "]"; - } - - @Override - public SchemaDescriptor schema() - { - return descriptor.schema(); - } - - @Override - public SchemaIndexDescriptor getIndexDescriptor() - { - return descriptor; - } - - @Override - public boolean equals( Object o ) - { - if ( o instanceof IndexRule ) - { - IndexRule that = (IndexRule) o; - return this.descriptor.equals( that.descriptor ); + ownerString = ", owner=" + owningConstraintId; } - return false; - } - @Override - public int hashCode() - { - return this.descriptor.hashCode(); + return "IndexRule[id=" + id + ", descriptor=" + this.userDescription( idTokenNameLookup ) + + ", provider=" + this.providerDescriptor() + ownerString + "]"; } @Override @@ -182,6 +149,6 @@ public long getId() @Override public String getName() { - return name; + return name().get(); } } diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/store/record/SchemaRuleSerialization.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/store/record/SchemaRuleSerialization.java index b450754e572f1..81f21d782f83c 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/store/record/SchemaRuleSerialization.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/store/record/SchemaRuleSerialization.java @@ -128,11 +128,11 @@ public static byte[] serialize( IndexRule indexRule ) target.putInt( LEGACY_LABEL_OR_REL_TYPE_ID ); target.put( INDEX_RULE ); - IndexProvider.Descriptor providerDescriptor = indexRule.getProviderDescriptor(); + IndexProvider.Descriptor providerDescriptor = indexRule.providerDescriptor(); UTF8.putEncodedStringInto( providerDescriptor.getKey(), target ); UTF8.putEncodedStringInto( providerDescriptor.getVersion(), target ); - SchemaIndexDescriptor schemaIndexDescriptor = indexRule.getIndexDescriptor(); + SchemaIndexDescriptor schemaIndexDescriptor = indexRule; switch ( schemaIndexDescriptor.type() ) { case GENERAL: @@ -205,12 +205,12 @@ public static int lengthOf( IndexRule indexRule ) int length = 4; // legacy label or relType id length += 1; // schema rule type - IndexProvider.Descriptor providerDescriptor = indexRule.getProviderDescriptor(); + IndexProvider.Descriptor providerDescriptor = indexRule.providerDescriptor(); length += UTF8.computeRequiredByteBufferSize( providerDescriptor.getKey() ); length += UTF8.computeRequiredByteBufferSize( providerDescriptor.getVersion() ); length += 1; // index type - SchemaIndexDescriptor schemaIndexDescriptor = indexRule.getIndexDescriptor(); + SchemaIndexDescriptor schemaIndexDescriptor = indexRule; if ( schemaIndexDescriptor.type() == SchemaIndexDescriptor.Type.UNIQUE ) { length += 8; // owning constraint id 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 59e09fcfe5cd5..03e48a7e60dbd 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 @@ -496,9 +496,9 @@ private void repopulateAllIndexes() throws IOException, IndexEntryConflictExcept for ( int i = 0; i < rules.length; i++ ) { IndexRule rule = rules[i]; - SchemaIndexDescriptor index = rule.getIndexDescriptor(); + SchemaIndexDescriptor index = rule; descriptors[i] = index.schema(); - IndexPopulator populator = schemaIndexProviders.apply( rule.getProviderDescriptor() ) + IndexPopulator populator = schemaIndexProviders.apply( rule.providerDescriptor() ) .getPopulator( rule.getId(), index, new IndexSamplingConfig( config ) ); populator.create(); populators.add( new IndexPopulatorWithSchema( populator, index ) ); @@ -585,8 +585,8 @@ private IndexRule[] getIndexesNeedingPopulation() List indexesNeedingPopulation = new ArrayList<>(); for ( IndexRule rule : schemaCache.indexRules() ) { - IndexProvider provider = schemaIndexProviders.apply( rule.getProviderDescriptor() ); - if ( provider.getInitialState( rule.getId(), rule.getIndexDescriptor() ) != InternalIndexState.FAILED ) + IndexProvider provider = schemaIndexProviders.apply( rule.providerDescriptor() ); + if ( provider.getInitialState( rule.getId(), rule ) != InternalIndexState.FAILED ) { indexesNeedingPopulation.add( rule ); } diff --git a/community/kernel/src/test/java/org/neo4j/graphdb/schema/DropBrokenUniquenessConstraintIT.java b/community/kernel/src/test/java/org/neo4j/graphdb/schema/DropBrokenUniquenessConstraintIT.java index 3826e402dbfe0..3f10ebda93c12 100644 --- a/community/kernel/src/test/java/org/neo4j/graphdb/schema/DropBrokenUniquenessConstraintIT.java +++ b/community/kernel/src/test/java/org/neo4j/graphdb/schema/DropBrokenUniquenessConstraintIT.java @@ -180,7 +180,7 @@ public void shouldDropUniquenessConstraintWhereConstraintRecordIsMissingAndIndex private void setOwnerNull( SchemaStore schemaStore, IndexRule rule ) { - rule = constraintIndexRule( rule.getId(), rule.getIndexDescriptor(), rule.getProviderDescriptor(), null ); + rule = constraintIndexRule( rule.getId(), rule, rule.providerDescriptor(), null ); List dynamicRecords = schemaStore.allocateFrom( rule ); for ( DynamicRecord record : dynamicRecords ) { diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexingServiceTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexingServiceTest.java index 4394f970eaba8..db4728471ee8a 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexingServiceTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexingServiceTest.java @@ -377,11 +377,11 @@ public void shouldLogIndexStateOnInit() throws Exception mock( IndexStoreView.class ), mockLookup, asList( onlineIndex, populatingIndex, failedIndex ), logProvider, IndexingService.NO_MONITOR, schemaState ) ); - when( provider.getInitialState( onlineIndex.getId(), onlineIndex.getIndexDescriptor() ) ) + when( provider.getInitialState( onlineIndex.getId(), onlineIndex ) ) .thenReturn( ONLINE ); - when( provider.getInitialState( populatingIndex.getId(), populatingIndex.getIndexDescriptor() ) ) + when( provider.getInitialState( populatingIndex.getId(), populatingIndex ) ) .thenReturn( InternalIndexState.POPULATING ); - when( provider.getInitialState( failedIndex.getId(), failedIndex.getIndexDescriptor() ) ) + when( provider.getInitialState( failedIndex.getId(), failedIndex ) ) .thenReturn( InternalIndexState.FAILED ); when(mockLookup.labelGetName( 1 )).thenReturn( "LabelOne" ); @@ -418,11 +418,11 @@ public void shouldLogIndexStateOnStart() throws Exception asList( onlineIndex, populatingIndex, failedIndex ), logProvider, IndexingService.NO_MONITOR, schemaState ); - when( provider.getInitialState( onlineIndex.getId(), onlineIndex.getIndexDescriptor() ) ) + when( provider.getInitialState( onlineIndex.getId(), onlineIndex ) ) .thenReturn( ONLINE ); - when( provider.getInitialState( populatingIndex.getId(), populatingIndex.getIndexDescriptor() ) ) + when( provider.getInitialState( populatingIndex.getId(), populatingIndex ) ) .thenReturn( InternalIndexState.POPULATING ); - when( provider.getInitialState( failedIndex.getId(), failedIndex.getIndexDescriptor() ) ) + when( provider.getInitialState( failedIndex.getId(), failedIndex ) ) .thenReturn( InternalIndexState.FAILED ); when( provider.getOnlineAccessor( anyLong(), any( SchemaIndexDescriptor.class ), any( IndexSamplingConfig.class ) ) ).thenAnswer( invocation -> mock( IndexAccessor.class ) ); @@ -441,7 +441,7 @@ public void shouldLogIndexStateOnStart() throws Exception indexingService.start(); // then - verify( provider ).getPopulationFailure( 3, failedIndex.getIndexDescriptor() ); + verify( provider ).getPopulationFailure( 3, failedIndex ); logProvider.assertAtLeastOnce( logMatch.debug( "IndexingService.start: index 1 on :LabelOne(propertyOne) is ONLINE" ), logMatch.debug( "IndexingService.start: index 2 on :LabelOne(propertyTwo) is POPULATING" ), @@ -490,8 +490,8 @@ public void shouldSnapshotOnlineIndexes() throws Exception File theFile = new File( "Blah" ); when( indexAccessor.snapshotFiles()).thenAnswer( newResourceIterator( theFile ) ); - when( indexProvider.getInitialState( indexId, rule1.getIndexDescriptor() ) ).thenReturn( ONLINE ); - when( indexProvider.getInitialState( indexId2, rule2.getIndexDescriptor() ) ).thenReturn( ONLINE ); + when( indexProvider.getInitialState( indexId, rule1 ) ).thenReturn( ONLINE ); + when( indexProvider.getInitialState( indexId2, rule2 ) ).thenReturn( ONLINE ); when( storeView.indexSample( anyLong(), any( DoubleLongRegister.class ) ) ) .thenReturn( newDoubleLongRegister( 32L, 32L ) ); @@ -522,8 +522,8 @@ public void shouldNotSnapshotPopulatingIndexes() throws Exception doAnswer( waitForLatch( populatorLatch ) ).when( populator ).create(); when( indexAccessor.snapshotFiles() ).thenAnswer( newResourceIterator( theFile ) ); - when( indexProvider.getInitialState( indexId, rule1.getIndexDescriptor() ) ).thenReturn( POPULATING ); - when( indexProvider.getInitialState( indexId2, rule2.getIndexDescriptor() ) ).thenReturn( ONLINE ); + when( indexProvider.getInitialState( indexId, rule1 ) ).thenReturn( POPULATING ); + when( indexProvider.getInitialState( indexId2, rule2 ) ).thenReturn( ONLINE ); when( storeView.indexSample( anyLong(), any( DoubleLongRegister.class ) ) ).thenReturn( newDoubleLongRegister( 32L, 32L ) ); life.start(); @@ -766,11 +766,11 @@ public void shouldNotLoseIndexDescriptorDueToOtherSimilarIndexDuringRecovery() t IndexingService indexing = newIndexingServiceWithMockedDependencies( populator, accessor, withData( update ), index ); - when( indexProvider.getInitialState( indexId, index.getIndexDescriptor() ) ).thenReturn( ONLINE ); + when( indexProvider.getInitialState( indexId, index ) ).thenReturn( ONLINE ); life.init(); // WHEN dropping another index, which happens to have the same label/property... while recovering - IndexRule otherIndex = IndexRule.indexRule( otherIndexId, index.getIndexDescriptor(), PROVIDER_DESCRIPTOR ); + IndexRule otherIndex = IndexRule.indexRule( otherIndexId, index, PROVIDER_DESCRIPTOR ); indexing.createIndexes( otherIndex ); indexing.dropIndex( otherIndex ); // and WHEN finally creating our index again (at a later point in recovery) @@ -895,7 +895,7 @@ public void shouldStoreIndexFailureWhenFailingToCreateOnlineAccessorAfterRecover when( nameLookup.labelGetName( labelId ) ).thenReturn( "TheLabel" ); when( nameLookup.propertyKeyGetName( propertyKeyId ) ).thenReturn( "propertyKey" ); - when( indexProvider.getInitialState( indexId, indexRule.getIndexDescriptor() ) ).thenReturn( POPULATING ); + when( indexProvider.getInitialState( indexId, indexRule ) ).thenReturn( POPULATING ); when( indexProvider.getOnlineAccessor( eq( indexId ), any( SchemaIndexDescriptor.class ), any( IndexSamplingConfig.class ) ) ) .thenThrow( exception ); @@ -934,15 +934,15 @@ public void shouldLogIndexStateOutliersOnInit() throws Exception List indexes = new ArrayList<>(); int nextIndexId = 1; IndexRule populatingIndex = indexRule( nextIndexId, nextIndexId++, 1, PROVIDER_DESCRIPTOR ); - when( provider.getInitialState( populatingIndex.getId(), populatingIndex.getIndexDescriptor() ) ).thenReturn( POPULATING ); + when( provider.getInitialState( populatingIndex.getId(), populatingIndex ) ).thenReturn( POPULATING ); indexes.add( populatingIndex ); IndexRule failedIndex = indexRule( nextIndexId, nextIndexId++, 1, PROVIDER_DESCRIPTOR ); - when( provider.getInitialState( failedIndex.getId(), failedIndex.getIndexDescriptor() ) ).thenReturn( FAILED ); + when( provider.getInitialState( failedIndex.getId(), failedIndex ) ).thenReturn( FAILED ); indexes.add( failedIndex ); for ( int i = 0; i < 10; i++ ) { IndexRule indexRule = indexRule( nextIndexId, nextIndexId++, 1, PROVIDER_DESCRIPTOR ); - when( provider.getInitialState( indexRule.getId(), indexRule.getIndexDescriptor() ) ).thenReturn( ONLINE ); + when( provider.getInitialState( indexRule.getId(), indexRule ) ).thenReturn( ONLINE ); indexes.add( indexRule ); } for ( int i = 0; i < nextIndexId; i++ ) @@ -983,15 +983,15 @@ public void shouldLogIndexStateOutliersOnStart() throws Exception List indexes = new ArrayList<>(); int nextIndexId = 1; IndexRule populatingIndex = indexRule( nextIndexId, nextIndexId++, 1, PROVIDER_DESCRIPTOR ); - when( provider.getInitialState( populatingIndex.getId(), populatingIndex.getIndexDescriptor() ) ).thenReturn( POPULATING ); + when( provider.getInitialState( populatingIndex.getId(), populatingIndex ) ).thenReturn( POPULATING ); indexes.add( populatingIndex ); IndexRule failedIndex = indexRule( nextIndexId, nextIndexId++, 1, PROVIDER_DESCRIPTOR ); - when( provider.getInitialState( failedIndex.getId(), failedIndex.getIndexDescriptor() ) ).thenReturn( FAILED ); + when( provider.getInitialState( failedIndex.getId(), failedIndex ) ).thenReturn( FAILED ); indexes.add( failedIndex ); for ( int i = 0; i < 10; i++ ) { IndexRule indexRule = indexRule( nextIndexId, nextIndexId++, 1, PROVIDER_DESCRIPTOR ); - when( provider.getInitialState( indexRule.getId(), indexRule.getIndexDescriptor() ) ).thenReturn( ONLINE ); + when( provider.getInitialState( indexRule.getId(), indexRule ) ).thenReturn( ONLINE ); indexes.add( indexRule ); } for ( int i = 0; i < nextIndexId; i++ ) diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/store/SchemaStorageTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/store/SchemaStorageTest.java index 6e87fdce2e564..bad2b8755af72 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/store/SchemaStorageTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/store/SchemaStorageTest.java @@ -145,7 +145,7 @@ public void shouldReturnIndexRuleForLabelAndPropertyComposite() assertTrue( SchemaDescriptorPredicates.hasProperty( rule, propId( d ) ) ); assertTrue( SchemaDescriptorPredicates.hasProperty( rule, propId( e ) ) ); assertTrue( SchemaDescriptorPredicates.hasProperty( rule, propId( f ) ) ); - assertEquals( SchemaIndexDescriptor.Type.GENERAL, rule.getIndexDescriptor().type() ); + assertEquals( SchemaIndexDescriptor.Type.GENERAL, rule.type() ); } @Test @@ -171,7 +171,7 @@ public void shouldReturnIndexRuleForLabelAndVeryManyPropertiesComposite() { assertTrue( SchemaDescriptorPredicates.hasProperty( rule, propId( prop ) ) ); } - assertEquals( SchemaIndexDescriptor.Type.GENERAL, rule.getIndexDescriptor().type() ); + assertEquals( SchemaIndexDescriptor.Type.GENERAL, rule.type() ); } @Test @@ -335,7 +335,7 @@ private void assertRule( IndexRule rule, String label, String propertyKey, Schem { assertTrue( SchemaDescriptorPredicates.hasLabel( rule, labelId( label ) ) ); assertTrue( SchemaDescriptorPredicates.hasProperty( rule, propId( propertyKey ) ) ); - assertEquals( type, rule.getIndexDescriptor().type() ); + assertEquals( type, rule.type() ); } private void assertRule( ConstraintRule rule, String label, String propertyKey, ConstraintDescriptor.Type type ) diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/store/SchemaStoreTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/store/SchemaStoreTest.java index b6e18c1ccc05c..9129f1a0369f6 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/store/SchemaStoreTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/store/SchemaStoreTest.java @@ -96,8 +96,8 @@ public void storeAndLoadSchemaRule() throws Exception // THEN assertEquals( indexRule.getId(), readIndexRule.getId() ); assertEquals( indexRule.schema(), readIndexRule.schema() ); - assertEquals( indexRule.getIndexDescriptor(), readIndexRule.getIndexDescriptor() ); - assertEquals( indexRule.getProviderDescriptor(), readIndexRule.getProviderDescriptor() ); + assertEquals( indexRule, readIndexRule ); + assertEquals( indexRule.providerDescriptor(), readIndexRule.providerDescriptor() ); } @Test @@ -115,8 +115,8 @@ public void storeAndLoadCompositeSchemaRule() throws Exception // THEN assertEquals( indexRule.getId(), readIndexRule.getId() ); assertEquals( indexRule.schema(), readIndexRule.schema() ); - assertEquals( indexRule.getIndexDescriptor(), readIndexRule.getIndexDescriptor() ); - assertEquals( indexRule.getProviderDescriptor(), readIndexRule.getProviderDescriptor() ); + assertEquals( indexRule, readIndexRule ); + assertEquals( indexRule.providerDescriptor(), readIndexRule.providerDescriptor() ); } @Test @@ -133,8 +133,8 @@ public void storeAndLoad_Big_CompositeSchemaRule() throws Exception // THEN assertEquals( indexRule.getId(), readIndexRule.getId() ); assertEquals( indexRule.schema(), readIndexRule.schema() ); - assertEquals( indexRule.getIndexDescriptor(), readIndexRule.getIndexDescriptor() ); - assertEquals( indexRule.getProviderDescriptor(), readIndexRule.getProviderDescriptor() ); + assertEquals( indexRule, readIndexRule ); + assertEquals( indexRule.providerDescriptor(), readIndexRule.providerDescriptor() ); } @Test diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/store/record/IndexRuleTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/store/record/IndexRuleTest.java index ab077ce76721f..3620a86140a11 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/store/record/IndexRuleTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/store/record/IndexRuleTest.java @@ -44,8 +44,8 @@ public void shouldCreateGeneralIndex() assertThat( indexRule.getId(), equalTo( RULE_ID ) ); assertFalse( indexRule.canSupportUniqueConstraint() ); assertThat( indexRule.schema(), equalTo( descriptor.schema() ) ); - assertThat( indexRule.getIndexDescriptor(), equalTo( descriptor ) ); - assertThat( indexRule.getProviderDescriptor(), equalTo( PROVIDER_DESCRIPTOR ) ); + assertThat( indexRule, equalTo( descriptor ) ); + assertThat( indexRule.providerDescriptor(), equalTo( PROVIDER_DESCRIPTOR ) ); assertException( indexRule::getOwningConstraint, IllegalStateException.class ); assertException( () -> indexRule.withOwningConstraint( RULE_ID_2 ), IllegalStateException.class ); } @@ -61,8 +61,8 @@ public void shouldCreateUniqueIndex() assertThat( indexRule.getId(), equalTo( RULE_ID ) ); assertTrue( indexRule.canSupportUniqueConstraint() ); assertThat( indexRule.schema(), equalTo( descriptor.schema() ) ); - assertThat( indexRule.getIndexDescriptor(), equalTo( descriptor ) ); - assertThat( indexRule.getProviderDescriptor(), equalTo( PROVIDER_DESCRIPTOR ) ); + assertThat( indexRule, equalTo( descriptor ) ); + assertThat( indexRule.providerDescriptor(), equalTo( PROVIDER_DESCRIPTOR ) ); assertThat( indexRule.getOwningConstraint(), equalTo( null ) ); IndexRule withConstraint = indexRule.withOwningConstraint( RULE_ID_2 ); diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/store/record/SchemaRuleSerializationTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/store/record/SchemaRuleSerializationTest.java index 3767f38be76c1..cdac12306f42e 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/store/record/SchemaRuleSerializationTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/store/record/SchemaRuleSerializationTest.java @@ -457,9 +457,9 @@ private void assertParseIndexRule( String serialized, String name ) throws Excep // THEN assertThat( deserialized.getId(), equalTo( ruleId ) ); - assertThat( deserialized.getIndexDescriptor(), equalTo( index ) ); + assertThat( deserialized, equalTo( index ) ); assertThat( deserialized.schema(), equalTo( index.schema() ) ); - assertThat( deserialized.getProviderDescriptor(), equalTo( indexProvider ) ); + assertThat( deserialized.providerDescriptor(), equalTo( indexProvider ) ); assertThat( deserialized.getName(), is( name ) ); assertException( deserialized::getOwningConstraint, IllegalStateException.class ); } @@ -478,9 +478,9 @@ private void assertParseUniqueIndexRule( String serialized, String name ) throws // THEN assertThat( deserialized.getId(), equalTo( ruleId ) ); - assertThat( deserialized.getIndexDescriptor(), equalTo( index ) ); + assertThat( deserialized, equalTo( index ) ); assertThat( deserialized.schema(), equalTo( index.schema() ) ); - assertThat( deserialized.getProviderDescriptor(), equalTo( indexProvider ) ); + assertThat( deserialized.providerDescriptor(), equalTo( indexProvider ) ); assertThat( deserialized.getOwningConstraint(), equalTo( constraintId ) ); assertThat( deserialized.getName(), is( name ) ); } @@ -575,9 +575,9 @@ private void assertSerializeAndDeserializeIndexRule( IndexRule indexRule ) IndexRule deserialized = assertIndexRule( serialiseAndDeserialise( indexRule ) ); assertThat( deserialized.getId(), equalTo( indexRule.getId() ) ); - assertThat( deserialized.getIndexDescriptor(), equalTo( indexRule.getIndexDescriptor() ) ); + assertThat( deserialized, equalTo( indexRule ) ); assertThat( deserialized.schema(), equalTo( indexRule.schema() ) ); - assertThat( deserialized.getProviderDescriptor(), equalTo( indexRule.getProviderDescriptor() ) ); + assertThat( deserialized.providerDescriptor(), equalTo( indexRule.providerDescriptor() ) ); } private IndexRule assertIndexRule( SchemaRule schemaRule ) diff --git a/tools/src/main/java/org/neo4j/tools/dump/DumpCountsStore.java b/tools/src/main/java/org/neo4j/tools/dump/DumpCountsStore.java index f2e46c50b570c..c6f4b05a70dc0 100644 --- a/tools/src/main/java/org/neo4j/tools/dump/DumpCountsStore.java +++ b/tools/src/main/java/org/neo4j/tools/dump/DumpCountsStore.java @@ -265,7 +265,7 @@ private static Map getAllIndexesFrom( SchemaStorage while ( indexRules.hasNext() ) { IndexRule rule = indexRules.next(); - indexes.put( rule.getId(), rule.getIndexDescriptor() ); + indexes.put( rule.getId(), rule ); } return indexes; }