From 91cca30510ee5cf28110e6044451eccca02ad7c5 Mon Sep 17 00:00:00 2001 From: Anton Persson Date: Thu, 19 Oct 2017 13:51:57 +0200 Subject: [PATCH] Introduce IndexMeta as container for: - IndexDescriptor - SchemaIndexProvider.Descriptor - IndexCapability Those three where passed to IndexProxy instances individually even though they together describe an index completely. Now they are contained in one IndexMeta class instead for simplicity. --- .../index/AbstractSwallowingIndexProxy.java | 21 +++----- .../impl/api/index/FailedIndexProxy.java | 9 +--- .../FailedPopulatingIndexProxyFactory.java | 25 +++------ .../impl/api/index/FlippableIndexProxy.java | 4 +- .../kernel/impl/api/index/IndexMeta.java | 53 +++++++++++++++++++ .../impl/api/index/IndexPopulationJob.java | 18 ++----- .../impl/api/index/IndexProxyCreator.java | 35 +++++------- .../api/index/MultipleIndexPopulator.java | 52 +++++++----------- .../impl/api/index/OnlineIndexProxy.java | 22 +++----- .../impl/api/index/PopulatingIndexProxy.java | 21 +++----- .../impl/api/index/RecoveringIndexProxy.java | 9 +--- .../kernel/impl/newapi/AllStoreHolder.java | 5 +- .../BatchingMultipleIndexPopulatorTest.java | 4 +- .../impl/api/index/FailedIndexProxyTest.java | 13 +++-- .../api/index/IndexPopulationJobTest.java | 2 +- .../api/index/MultipleIndexPopulatorTest.java | 4 +- .../MultipleIndexPopulatorUpdatesTest.java | 6 +-- .../impl/api/index/OnlineIndexProxyTest.java | 4 +- .../LabelScanViewNodeStoreScanTest.java | 13 ++--- 19 files changed, 154 insertions(+), 166 deletions(-) create mode 100644 community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/IndexMeta.java diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/AbstractSwallowingIndexProxy.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/AbstractSwallowingIndexProxy.java index 94cbe0626680..20a2c5478198 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/AbstractSwallowingIndexProxy.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/AbstractSwallowingIndexProxy.java @@ -34,19 +34,12 @@ public abstract class AbstractSwallowingIndexProxy implements IndexProxy { - private final IndexDescriptor descriptor; - private final IndexCapability indexCapability; - private final SchemaIndexProvider.Descriptor providerDescriptor; + private final IndexMeta indexMeta; private final IndexPopulationFailure populationFailure; - AbstractSwallowingIndexProxy( IndexDescriptor descriptor, - SchemaIndexProvider.Descriptor providerDescriptor, - IndexCapability indexCapability, - IndexPopulationFailure populationFailure ) + AbstractSwallowingIndexProxy( IndexMeta indexMeta, IndexPopulationFailure populationFailure ) { - this.descriptor = descriptor; - this.providerDescriptor = providerDescriptor; - this.indexCapability = indexCapability; + this.indexMeta = indexMeta; this.populationFailure = populationFailure; } @@ -83,25 +76,25 @@ public void force() @Override public IndexCapability getIndexCapability() { - return indexCapability; + return indexMeta.indexCapability(); } @Override public IndexDescriptor getDescriptor() { - return descriptor; + return indexMeta.indexDescriptor(); } @Override public LabelSchemaDescriptor schema() { - return descriptor.schema(); + return indexMeta.indexDescriptor().schema(); } @Override public SchemaIndexProvider.Descriptor getProviderDescriptor() { - return providerDescriptor; + return indexMeta.providerDescriptor(); } @Override diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/FailedIndexProxy.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/FailedIndexProxy.java index 01221bec7c66..cca0ccf41aad 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/FailedIndexProxy.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/FailedIndexProxy.java @@ -24,12 +24,9 @@ import java.util.concurrent.Future; import org.neo4j.graphdb.ResourceIterator; -import org.neo4j.internal.kernel.api.IndexCapability; import org.neo4j.kernel.api.exceptions.index.IndexPopulationFailedKernelException; import org.neo4j.kernel.api.index.IndexPopulator; import org.neo4j.kernel.api.index.InternalIndexState; -import org.neo4j.kernel.api.index.SchemaIndexProvider; -import org.neo4j.kernel.api.schema.index.IndexDescriptor; import org.neo4j.logging.Log; import org.neo4j.logging.LogProvider; @@ -43,16 +40,14 @@ public class FailedIndexProxy extends AbstractSwallowingIndexProxy private final IndexCountsRemover indexCountsRemover; private final Log log; - FailedIndexProxy( IndexDescriptor descriptor, - SchemaIndexProvider.Descriptor providerDescriptor, - IndexCapability indexCapability, + FailedIndexProxy( IndexMeta indexMeta, String indexUserDescription, IndexPopulator populator, IndexPopulationFailure populationFailure, IndexCountsRemover indexCountsRemover, LogProvider logProvider ) { - super( descriptor, providerDescriptor, indexCapability, populationFailure ); + super( indexMeta, populationFailure ); this.populator = populator; this.indexUserDescription = indexUserDescription; this.indexCountsRemover = indexCountsRemover; diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/FailedPopulatingIndexProxyFactory.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/FailedPopulatingIndexProxyFactory.java index 669d89dcedf9..3be156a20756 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/FailedPopulatingIndexProxyFactory.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/FailedPopulatingIndexProxyFactory.java @@ -19,35 +19,26 @@ */ package org.neo4j.kernel.impl.api.index; -import org.neo4j.internal.kernel.api.IndexCapability; import org.neo4j.kernel.api.index.IndexPopulator; -import org.neo4j.kernel.api.index.SchemaIndexProvider; -import org.neo4j.kernel.api.schema.index.IndexDescriptor; import org.neo4j.logging.LogProvider; import static org.neo4j.kernel.impl.api.index.IndexPopulationFailure.failure; public class FailedPopulatingIndexProxyFactory implements FailedIndexProxyFactory { - private final IndexDescriptor descriptor; - private final SchemaIndexProvider.Descriptor providerDescriptor; - private final IndexCapability indexCapability; + private final IndexMeta indexMeta; private final IndexPopulator populator; private final String indexUserDescription; private final IndexCountsRemover indexCountsRemover; private final LogProvider logProvider; - FailedPopulatingIndexProxyFactory( IndexDescriptor descriptor, - SchemaIndexProvider.Descriptor providerDescriptor, - IndexCapability indexCapability, - IndexPopulator populator, - String indexUserDescription, - IndexCountsRemover indexCountsRemover, - LogProvider logProvider ) + FailedPopulatingIndexProxyFactory( IndexMeta indexMeta, + IndexPopulator populator, + String indexUserDescription, + IndexCountsRemover indexCountsRemover, + LogProvider logProvider ) { - this.descriptor = descriptor; - this.providerDescriptor = providerDescriptor; - this.indexCapability = indexCapability; + this.indexMeta = indexMeta; this.populator = populator; this.indexUserDescription = indexUserDescription; this.indexCountsRemover = indexCountsRemover; @@ -57,7 +48,7 @@ public class FailedPopulatingIndexProxyFactory implements FailedIndexProxyFactor @Override public IndexProxy create( Throwable failure ) { - return new FailedIndexProxy( descriptor, providerDescriptor, indexCapability, indexUserDescription, populator, failure( failure ), + return new FailedIndexProxy( indexMeta, indexUserDescription, populator, failure( failure ), indexCountsRemover, logProvider ); } } diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/FlippableIndexProxy.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/FlippableIndexProxy.java index 5e2f2c84bd52..d94ba1a814bc 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/FlippableIndexProxy.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/FlippableIndexProxy.java @@ -382,7 +382,7 @@ public PopulationProgress getIndexPopulationProgress() } } - public void setFlipTarget( IndexProxyFactory flipTarget ) + void setFlipTarget( IndexProxyFactory flipTarget ) { lock.writeLock().lock(); try @@ -395,7 +395,7 @@ public void setFlipTarget( IndexProxyFactory flipTarget ) } } - public void flipTo( IndexProxy targetDelegate ) + void flipTo( IndexProxy targetDelegate ) { lock.writeLock().lock(); try diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/IndexMeta.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/IndexMeta.java new file mode 100644 index 000000000000..69113185a81c --- /dev/null +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/IndexMeta.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2002-2017 "Neo Technology," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Neo4j is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.neo4j.kernel.impl.api.index; + +import org.neo4j.internal.kernel.api.IndexCapability; +import org.neo4j.kernel.api.index.SchemaIndexProvider; +import org.neo4j.kernel.api.schema.index.IndexDescriptor; + +public class IndexMeta +{ + private final IndexDescriptor indexDescriptor; + private final SchemaIndexProvider.Descriptor providerDescriptor; + private final IndexCapability indexCapability; + + public IndexMeta( IndexDescriptor indexDescriptor, SchemaIndexProvider.Descriptor providerDescriptor, IndexCapability indexCapability ) + { + this.indexDescriptor = indexDescriptor; + this.providerDescriptor = providerDescriptor; + this.indexCapability = indexCapability; + } + + public IndexDescriptor indexDescriptor() + { + return indexDescriptor; + } + + public SchemaIndexProvider.Descriptor providerDescriptor() + { + return providerDescriptor; + } + + public IndexCapability indexCapability() + { + return indexCapability; + } +} diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/IndexPopulationJob.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/IndexPopulationJob.java index f1a31f8178f0..b1c26ebe5735 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/IndexPopulationJob.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/IndexPopulationJob.java @@ -23,12 +23,9 @@ import java.util.concurrent.Future; import org.neo4j.function.Suppliers; -import org.neo4j.internal.kernel.api.IndexCapability; import org.neo4j.kernel.api.exceptions.index.IndexPopulationFailedKernelException; import org.neo4j.kernel.api.index.IndexEntryUpdate; import org.neo4j.kernel.api.index.IndexPopulator; -import org.neo4j.kernel.api.index.SchemaIndexProvider; -import org.neo4j.kernel.api.schema.index.IndexDescriptor; import org.neo4j.kernel.impl.api.SchemaState; import org.neo4j.storageengine.api.schema.PopulationProgress; @@ -38,8 +35,7 @@ /** * A background job for initially populating one or more index over existing data in the database. * Use provided store view to scan store. Participating {@link IndexPopulator} are added with - * {@link #addPopulator(IndexPopulator, long, IndexDescriptor, SchemaIndexProvider.Descriptor, IndexCapability, String, - * FlippableIndexProxy, FailedIndexProxyFactory)} + * {@link #addPopulator(IndexPopulator, long, IndexMeta, String, FlippableIndexProxy, FailedIndexProxyFactory)} * before {@link #run() running} this job. */ public class IndexPopulationJob implements Runnable @@ -64,25 +60,21 @@ public IndexPopulationJob( MultipleIndexPopulator multiPopulator, IndexingServic * be added before calling {@link #run()}. * * @param populator {@link IndexPopulator} to participate. - * @param descriptor {@link IndexDescriptor} describing the index. - * @param providerDescriptor provider of this index. - * @param indexCapability capability of this index. + * @param indexId id of index. + * @param indexMeta {@link IndexMeta} meta information about index. * @param indexUserDescription user description of this index. * @param flipper {@link FlippableIndexProxy} to call after a successful population. * @param failedIndexProxyFactory {@link FailedIndexProxyFactory} to use after an unsuccessful population. */ void addPopulator( IndexPopulator populator, long indexId, - IndexDescriptor descriptor, - SchemaIndexProvider.Descriptor providerDescriptor, - IndexCapability indexCapability, + IndexMeta indexMeta, String indexUserDescription, FlippableIndexProxy flipper, FailedIndexProxyFactory failedIndexProxyFactory ) { assert storeScan == null : "Population have already started, too late to add populators at this point"; - this.multiPopulator.addPopulator( populator, indexId, descriptor, providerDescriptor, indexCapability, - flipper, failedIndexProxyFactory, indexUserDescription ); + this.multiPopulator.addPopulator( populator, indexId, indexMeta, flipper, failedIndexProxyFactory, indexUserDescription ); } /** diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/IndexProxyCreator.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/IndexProxyCreator.java index 18ec8888a749..3f754164ada4 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/IndexProxyCreator.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/IndexProxyCreator.java @@ -68,22 +68,18 @@ IndexProxy createPopulatingIndexProxy( final long ruleId, // TODO: This is here because there is a circular dependency from PopulatingIndexProxy to FlippableIndexProxy final String indexUserDescription = indexUserDescription( descriptor, providerDescriptor ); IndexPopulator populator = populatorFromProvider( providerDescriptor, ruleId, descriptor, samplingConfig ); - IndexCapability indexCapability = indexCapabilityFromProvider( providerDescriptor, descriptor ); + IndexMeta indexMeta = indexMetaFromProvider( providerDescriptor, descriptor ); FailedIndexProxyFactory failureDelegateFactory = new FailedPopulatingIndexProxyFactory( - descriptor, - providerDescriptor, - indexCapability, + indexMeta, populator, indexUserDescription, new IndexCountsRemover( storeView, ruleId ), logProvider ); - PopulatingIndexProxy populatingIndex = - new PopulatingIndexProxy( descriptor, providerDescriptor, indexCapability, populationJob ); + PopulatingIndexProxy populatingIndex = new PopulatingIndexProxy( indexMeta, populationJob ); - populationJob.addPopulator( populator, ruleId, descriptor, providerDescriptor, indexCapability, - indexUserDescription, flipper, failureDelegateFactory ); + populationJob.addPopulator( populator, ruleId, indexMeta, indexUserDescription, flipper, failureDelegateFactory ); flipper.flipTo( populatingIndex ); @@ -94,9 +90,7 @@ IndexProxy createPopulatingIndexProxy( final long ruleId, OnlineIndexProxy onlineProxy = new OnlineIndexProxy( ruleId, - descriptor, - providerDescriptor, - indexCapabilityFromProvider( providerDescriptor, descriptor ), + indexMeta, onlineAccessorFromProvider( providerDescriptor, ruleId, descriptor, samplingConfig ), storeView, true ); @@ -113,8 +107,8 @@ IndexProxy createPopulatingIndexProxy( final long ruleId, IndexProxy createRecoveringIndexProxy( IndexDescriptor descriptor, SchemaIndexProvider.Descriptor providerDescriptor ) { - IndexCapability indexCapability = indexCapabilityFromProvider( providerDescriptor, descriptor ); - IndexProxy proxy = new RecoveringIndexProxy( descriptor, providerDescriptor, indexCapability ); + IndexMeta indexMeta = indexMetaFromProvider( providerDescriptor, descriptor ); + IndexProxy proxy = new RecoveringIndexProxy( indexMeta ); return new ContractCheckingIndexProxy( proxy, true ); } @@ -127,9 +121,9 @@ IndexProxy createOnlineIndexProxy( long ruleId, { IndexAccessor onlineAccessor = onlineAccessorFromProvider( providerDescriptor, ruleId, descriptor, samplingConfig ); - IndexCapability indexCapability = indexCapabilityFromProvider( providerDescriptor, descriptor ); + IndexMeta indexMeta = indexMetaFromProvider( providerDescriptor, descriptor ); IndexProxy proxy; - proxy = new OnlineIndexProxy( ruleId, descriptor, providerDescriptor, indexCapability, onlineAccessor, storeView, false ); + proxy = new OnlineIndexProxy( ruleId, indexMeta, onlineAccessor, storeView, false ); proxy = new ContractCheckingIndexProxy( proxy, true ); return proxy; } @@ -148,12 +142,11 @@ IndexProxy createFailedIndexProxy( long ruleId, IndexPopulationFailure populationFailure ) { IndexPopulator indexPopulator = populatorFromProvider( providerDescriptor, ruleId, descriptor, samplingConfig ); - IndexCapability indexCapability = indexCapabilityFromProvider( providerDescriptor, descriptor ); + IndexMeta indexMeta = indexMetaFromProvider( providerDescriptor, descriptor ); String indexUserDescription = indexUserDescription( descriptor, providerDescriptor ); IndexProxy proxy; proxy = new FailedIndexProxy( - descriptor, - providerDescriptor, indexCapability, + indexMeta, indexUserDescription, indexPopulator, populationFailure, @@ -185,9 +178,9 @@ private IndexAccessor onlineAccessorFromProvider( SchemaIndexProvider.Descriptor return indexProvider.getOnlineAccessor( ruleId, descriptor, samplingConfig ); } - private IndexCapability indexCapabilityFromProvider( SchemaIndexProvider.Descriptor providerDescriptor, - IndexDescriptor indexDescriptor ) + private IndexMeta indexMetaFromProvider( SchemaIndexProvider.Descriptor providerDescriptor, IndexDescriptor indexDescriptor ) { - return providerMap.apply( providerDescriptor ).getCapability( indexDescriptor ); + IndexCapability indexCapability = providerMap.apply( providerDescriptor ).getCapability( indexDescriptor ); + return new IndexMeta( indexDescriptor, providerDescriptor, indexCapability ); } } diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/MultipleIndexPopulator.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/MultipleIndexPopulator.java index 3ef6b30c0f57..ed1c91da5988 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/MultipleIndexPopulator.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/MultipleIndexPopulator.java @@ -35,7 +35,6 @@ import org.neo4j.function.ThrowingConsumer; import org.neo4j.helpers.collection.Pair; import org.neo4j.helpers.collection.Visitor; -import org.neo4j.internal.kernel.api.IndexCapability; import org.neo4j.kernel.api.exceptions.index.FlipFailedKernelException; import org.neo4j.kernel.api.exceptions.index.IndexEntryConflictException; import org.neo4j.kernel.api.exceptions.index.IndexPopulationFailedKernelException; @@ -43,11 +42,8 @@ import org.neo4j.kernel.api.index.IndexPopulator; import org.neo4j.kernel.api.index.IndexUpdater; import org.neo4j.kernel.api.index.PropertyAccessor; -import org.neo4j.kernel.api.index.SchemaIndexProvider; -import org.neo4j.kernel.api.index.SchemaIndexProvider.Descriptor; import org.neo4j.kernel.api.schema.LabelSchemaDescriptor; import org.neo4j.kernel.api.schema.LabelSchemaSupplier; -import org.neo4j.kernel.api.schema.index.IndexDescriptor; import org.neo4j.logging.Log; import org.neo4j.logging.LogProvider; import org.neo4j.storageengine.api.schema.IndexSample; @@ -76,8 +72,8 @@ * Usage of this class should be something like: *
    *
  1. Instantiation.
  2. - *
  3. One or more calls to {@link #addPopulator(IndexPopulator, long, IndexDescriptor, Descriptor, IndexCapability, - * FlippableIndexProxy, FailedIndexProxyFactory, String)}.
  4. + *
  5. One or more calls to {@link #addPopulator(IndexPopulator, long, IndexMeta, FlippableIndexProxy, + * FailedIndexProxyFactory, String)}.
  6. *
  7. Call to {@link #create()} to create data structures and files to start accepting updates.
  8. *
  9. Call to {@link #indexAllNodes()} (blocking call).
  10. *
  11. While all nodes are being indexed, calls to {@link #queue(IndexEntryUpdate)} are accepted.
  12. @@ -116,25 +112,21 @@ public MultipleIndexPopulator( IndexStoreView storeView, LogProvider logProvider IndexPopulation addPopulator( IndexPopulator populator, long indexId, - IndexDescriptor descriptor, - Descriptor providerDescriptor, - IndexCapability indexCapability, + IndexMeta indexMeta, FlippableIndexProxy flipper, FailedIndexProxyFactory failedIndexProxyFactory, String indexUserDescription ) { - IndexPopulation population = createPopulation( populator, indexId, descriptor, providerDescriptor, indexCapability, - flipper, failedIndexProxyFactory, indexUserDescription ); + IndexPopulation population = + createPopulation( populator, indexId, indexMeta, flipper, failedIndexProxyFactory, indexUserDescription ); populations.add( population ); return population; } - protected IndexPopulation createPopulation( IndexPopulator populator, long indexId, IndexDescriptor descriptor, - Descriptor providerDescriptor, IndexCapability indexCapability, FlippableIndexProxy flipper, - FailedIndexProxyFactory failedIndexProxyFactory, String indexUserDescription ) + protected IndexPopulation createPopulation( IndexPopulator populator, long indexId, IndexMeta indexMeta, + FlippableIndexProxy flipper, FailedIndexProxyFactory failedIndexProxyFactory, String indexUserDescription ) { - return new IndexPopulation( populator, indexId, descriptor, providerDescriptor, indexCapability, flipper, - failedIndexProxyFactory, indexUserDescription ); + return new IndexPopulation( populator, indexId, indexMeta, flipper, failedIndexProxyFactory, indexUserDescription ); } boolean hasPopulators() @@ -264,7 +256,7 @@ public MultipleIndexUpdater newPopulatingUpdater( PropertyAccessor accessor ) forEachPopulation( population -> { IndexUpdater updater = population.populator.newPopulatingUpdater( accessor ); - updaters.put( population.descriptor.schema(), Pair.of( population, updater ) ); + updaters.put( population.schema(), Pair.of( population, updater ) ); } ); return new MultipleIndexUpdater( this, updaters, logProvider ); } @@ -470,32 +462,26 @@ public void close() public class IndexPopulation implements LabelSchemaSupplier { public final IndexPopulator populator; - final long indexId; - final IndexDescriptor descriptor; - final SchemaIndexProvider.Descriptor providerDescriptor; - final IndexCountsRemover indexCountsRemover; - private final IndexCapability indexCapability; final FlippableIndexProxy flipper; - final FailedIndexProxyFactory failedIndexProxyFactory; - final String indexUserDescription; + private final long indexId; + private final IndexMeta indexMeta; + private final IndexCountsRemover indexCountsRemover; + private final FailedIndexProxyFactory failedIndexProxyFactory; + private final String indexUserDescription; List> batchedUpdates; IndexPopulation( IndexPopulator populator, long indexId, - IndexDescriptor descriptor, - Descriptor providerDescriptor, - IndexCapability indexCapability, + IndexMeta indexMeta, FlippableIndexProxy flipper, FailedIndexProxyFactory failedIndexProxyFactory, String indexUserDescription ) { this.populator = populator; this.indexId = indexId; - this.descriptor = descriptor; - this.providerDescriptor = providerDescriptor; - this.indexCapability = indexCapability; + this.indexMeta = indexMeta; this.flipper = flipper; this.failedIndexProxyFactory = failedIndexProxyFactory; this.indexUserDescription = indexUserDescription; @@ -505,8 +491,8 @@ public class IndexPopulation implements LabelSchemaSupplier private void flipToFailed( Throwable t ) { - flipper.flipTo( new FailedIndexProxy( descriptor, providerDescriptor, indexCapability, - indexUserDescription, populator, failure( t ), indexCountsRemover, logProvider ) ); + flipper.flipTo( + new FailedIndexProxy( indexMeta, indexUserDescription, populator, failure( t ), indexCountsRemover, logProvider ) ); } private void onUpdate( IndexEntryUpdate update ) @@ -536,7 +522,7 @@ private void flip() throws FlipFailedKernelException @Override public LabelSchemaDescriptor schema() { - return descriptor.schema(); + return indexMeta.indexDescriptor().schema(); } public boolean batch( IndexEntryUpdate update ) diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/OnlineIndexProxy.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/OnlineIndexProxy.java index 4a5fa8589360..4bde8879700b 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/OnlineIndexProxy.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/OnlineIndexProxy.java @@ -43,11 +43,9 @@ public class OnlineIndexProxy implements IndexProxy { private final long indexId; - private final IndexDescriptor descriptor; + private final IndexMeta indexMeta; final IndexAccessor accessor; private final IndexStoreView storeView; - private final SchemaIndexProvider.Descriptor providerDescriptor; - private final IndexCapability indexCapability; private final IndexCountsRemover indexCountsRemover; private boolean started; @@ -78,19 +76,15 @@ public class OnlineIndexProxy implements IndexProxy private final boolean forcedIdempotentMode; OnlineIndexProxy( long indexId, - IndexDescriptor descriptor, - SchemaIndexProvider.Descriptor providerDescriptor, - IndexCapability indexCapability, + IndexMeta indexMeta, IndexAccessor accessor, IndexStoreView storeView, boolean forcedIdempotentMode ) { this.indexId = indexId; - this.descriptor = descriptor; + this.indexMeta = indexMeta; this.accessor = accessor; this.storeView = storeView; - this.providerDescriptor = providerDescriptor; - this.indexCapability = indexCapability; this.forcedIdempotentMode = forcedIdempotentMode; this.indexCountsRemover = new IndexCountsRemover( storeView, indexId ); } @@ -124,19 +118,19 @@ public Future drop() throws IOException @Override public IndexDescriptor getDescriptor() { - return descriptor; + return indexMeta.indexDescriptor(); } @Override public LabelSchemaDescriptor schema() { - return descriptor.schema(); + return indexMeta.indexDescriptor().schema(); } @Override public SchemaIndexProvider.Descriptor getProviderDescriptor() { - return providerDescriptor; + return indexMeta.providerDescriptor(); } @Override @@ -148,7 +142,7 @@ public InternalIndexState getState() @Override public IndexCapability getIndexCapability() { - return indexCapability; + return indexMeta.indexCapability(); } @Override @@ -209,7 +203,7 @@ public ResourceIterator snapshotFiles() throws IOException @Override public String toString() { - return getClass().getSimpleName() + "[accessor:" + accessor + ", descriptor:" + descriptor + "]"; + return getClass().getSimpleName() + "[accessor:" + accessor + ", descriptor:" + indexMeta.indexDescriptor() + "]"; } @Override diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/PopulatingIndexProxy.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/PopulatingIndexProxy.java index e0fc06cf9cc9..3c486fa0f376 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/PopulatingIndexProxy.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/PopulatingIndexProxy.java @@ -42,19 +42,12 @@ public class PopulatingIndexProxy implements IndexProxy { - private final IndexDescriptor descriptor; - private final IndexCapability indexCapability; - private final SchemaIndexProvider.Descriptor providerDescriptor; + private final IndexMeta indexMeta; private final IndexPopulationJob job; - PopulatingIndexProxy( IndexDescriptor descriptor, - SchemaIndexProvider.Descriptor providerDescriptor, - IndexCapability indexCapability, - IndexPopulationJob job ) + PopulatingIndexProxy( IndexMeta indexMeta, IndexPopulationJob job ) { - this.descriptor = descriptor; - this.providerDescriptor = providerDescriptor; - this.indexCapability = indexCapability; + this.indexMeta = indexMeta; this.job = job; } @@ -99,19 +92,19 @@ public Future drop() @Override public IndexDescriptor getDescriptor() { - return descriptor; + return indexMeta.indexDescriptor(); } @Override public LabelSchemaDescriptor schema() { - return descriptor.schema(); + return indexMeta.indexDescriptor().schema(); } @Override public SchemaIndexProvider.Descriptor getProviderDescriptor() { - return providerDescriptor; + return indexMeta.providerDescriptor(); } @Override @@ -123,7 +116,7 @@ public InternalIndexState getState() @Override public IndexCapability getIndexCapability() { - return indexCapability; + return indexMeta.indexCapability(); } @Override diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/RecoveringIndexProxy.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/RecoveringIndexProxy.java index 1ea1837836c1..d2a8748825ea 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/RecoveringIndexProxy.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/index/RecoveringIndexProxy.java @@ -23,22 +23,17 @@ import java.util.concurrent.Future; import org.neo4j.graphdb.ResourceIterator; -import org.neo4j.internal.kernel.api.IndexCapability; import org.neo4j.kernel.api.exceptions.index.IndexPopulationFailedKernelException; import org.neo4j.kernel.api.index.InternalIndexState; -import org.neo4j.kernel.api.index.SchemaIndexProvider; -import org.neo4j.kernel.api.schema.index.IndexDescriptor; import org.neo4j.storageengine.api.schema.PopulationProgress; import static org.neo4j.helpers.FutureAdapter.VOID; public class RecoveringIndexProxy extends AbstractSwallowingIndexProxy { - RecoveringIndexProxy( IndexDescriptor descriptor, - SchemaIndexProvider.Descriptor providerDescriptor, - IndexCapability indexCapability ) + RecoveringIndexProxy( IndexMeta indexMeta ) { - super( descriptor, providerDescriptor, indexCapability, null ); + super( indexMeta, null ); } @Override 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 4ad453dd3710..0b1fe78bb3a0 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 @@ -148,14 +148,15 @@ public CapableIndexReference index( int label, int... properties ) { return CapableIndexReference.NO_INDEX; } + boolean unique = indexDescriptor.type() == IndexDescriptor.Type.UNIQUE; try { IndexCapability indexCapability = read.indexGetCapability( indexDescriptor ); - return new IndexReference( indexDescriptor.type() == IndexDescriptor.Type.UNIQUE, indexCapability, label, properties ); + return new IndexReference( unique, indexCapability, label, properties ); } catch ( IndexNotFoundKernelException e ) { - throw new IllegalStateException( e ); + throw new IllegalStateException( "Could not find capability for index " + indexDescriptor, e ); } } diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/BatchingMultipleIndexPopulatorTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/BatchingMultipleIndexPopulatorTest.java index 276c0a79825b..58dfef475ea2 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/BatchingMultipleIndexPopulatorTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/BatchingMultipleIndexPopulatorTest.java @@ -349,8 +349,8 @@ private static IndexPopulator addPopulator( BatchingMultipleIndexPopulator batch flipper.setFlipTarget( indexProxyFactory ); batchingPopulator.addPopulator( - populator, descriptor.schema().getLabelId(), descriptor, - new SchemaIndexProvider.Descriptor( "foo", "1" ), NO_CAPABILITY, + populator, descriptor.schema().getLabelId(), + new IndexMeta( descriptor, new SchemaIndexProvider.Descriptor( "foo", "1" ), NO_CAPABILITY ), flipper, failedIndexProxyFactory, "testIndex" ); return populator; diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/FailedIndexProxyTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/FailedIndexProxyTest.java index e095eafe8057..f02e7afc7675 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/FailedIndexProxyTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/FailedIndexProxyTest.java @@ -26,6 +26,7 @@ import org.neo4j.internal.kernel.api.IndexCapability; import org.neo4j.kernel.api.index.IndexPopulator; import org.neo4j.kernel.api.index.SchemaIndexProvider; +import org.neo4j.kernel.api.schema.index.IndexDescriptor; import org.neo4j.kernel.api.schema.index.IndexDescriptorFactory; import org.neo4j.logging.AssertableLogProvider; import org.neo4j.logging.NullLogProvider; @@ -39,7 +40,6 @@ public class FailedIndexProxyTest { private final SchemaIndexProvider.Descriptor providerDescriptor = mock( SchemaIndexProvider.Descriptor.class ); private final IndexCapability indexCapability = mock( IndexCapability.class ); - private final String userDescription = "description"; private final IndexPopulator indexPopulator = mock( IndexPopulator.class ); private final IndexPopulationFailure indexPopulationFailure = mock( IndexPopulationFailure.class ); private final IndexCountsRemover indexCountsRemover = mock( IndexCountsRemover.class ); @@ -48,8 +48,8 @@ public class FailedIndexProxyTest public void shouldRemoveIndexCountsWhenTheIndexItselfIsDropped() throws IOException { // given - FailedIndexProxy index = new FailedIndexProxy( - IndexDescriptorFactory.forLabel( 1, 2 ), providerDescriptor, indexCapability, + String userDescription = "description"; + FailedIndexProxy index = new FailedIndexProxy( indexMeta( IndexDescriptorFactory.forLabel( 1, 2 ) ), userDescription, indexPopulator, indexPopulationFailure, indexCountsRemover, NullLogProvider.getInstance() ); // when @@ -68,7 +68,7 @@ public void shouldLogReasonForDroppingIndex() throws IOException AssertableLogProvider logProvider = new AssertableLogProvider(); // when - new FailedIndexProxy( IndexDescriptorFactory.forLabel( 0, 0 ), new SchemaIndexProvider.Descriptor( "foo", "bar" ), indexCapability, + new FailedIndexProxy( indexMeta( IndexDescriptorFactory.forLabel( 0, 0 ) ), "foo", mock( IndexPopulator.class ), IndexPopulationFailure.failure( "it broke" ), indexCountsRemover, logProvider ).drop(); @@ -77,4 +77,9 @@ public void shouldLogReasonForDroppingIndex() throws IOException inLog( FailedIndexProxy.class ).info( "FailedIndexProxy#drop index on foo dropped due to:\nit broke" ) ); } + + private IndexMeta indexMeta( IndexDescriptor descriptor ) + { + return new IndexMeta( descriptor, providerDescriptor, indexCapability ); + } } diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexPopulationJobTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexPopulationJobTest.java index 9c6d6787d176..0d7d1c387651 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexPopulationJobTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexPopulationJobTest.java @@ -618,7 +618,7 @@ private IndexPopulationJob newIndexPopulationJob( FailedIndexProxyFactory failur MultipleIndexPopulator multiPopulator = new MultipleIndexPopulator( storeView, logProvider ); IndexPopulationJob job = new IndexPopulationJob( multiPopulator, NO_MONITOR, stateHolder ); - job.addPopulator( populator, indexId, descriptor, PROVIDER_DESCRIPTOR, NO_CAPABILITY, + job.addPopulator( populator, indexId, new IndexMeta( descriptor, PROVIDER_DESCRIPTOR, NO_CAPABILITY ), format( ":%s(%s)", FIRST.name(), name ), flipper, failureDelegateFactory ); return job; } diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/MultipleIndexPopulatorTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/MultipleIndexPopulatorTest.java index ddcc46f24797..5a1173faf32a 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/MultipleIndexPopulatorTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/MultipleIndexPopulatorTest.java @@ -432,8 +432,8 @@ private IndexPopulation addPopulator( MultipleIndexPopulator multipleIndexPopula IndexDescriptor descriptor, IndexPopulator indexPopulator, FlippableIndexProxy flippableIndexProxy, FailedIndexProxyFactory failedIndexProxyFactory ) { - return multipleIndexPopulator.addPopulator( indexPopulator, indexId, descriptor, - mock( SchemaIndexProvider.Descriptor.class ), NO_CAPABILITY, + return multipleIndexPopulator.addPopulator( indexPopulator, indexId, + new IndexMeta( descriptor, mock( SchemaIndexProvider.Descriptor.class ), NO_CAPABILITY ), flippableIndexProxy, failedIndexProxyFactory, "userIndexDescription" ); } diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/MultipleIndexPopulatorUpdatesTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/MultipleIndexPopulatorUpdatesTest.java index 6c5a121b4de6..cf3ef0a3ca3d 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/MultipleIndexPopulatorUpdatesTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/MultipleIndexPopulatorUpdatesTest.java @@ -125,8 +125,8 @@ private MultipleIndexPopulator.IndexPopulation addPopulator( MultipleIndexPopula long indexId, IndexDescriptor descriptor, IndexPopulator indexPopulator, FlippableIndexProxy flippableIndexProxy, FailedIndexProxyFactory failedIndexProxyFactory ) { - return multipleIndexPopulator.addPopulator( indexPopulator, indexId, descriptor, - mock( SchemaIndexProvider.Descriptor.class ), NO_CAPABILITY, + return multipleIndexPopulator.addPopulator( indexPopulator, indexId, + new IndexMeta( descriptor, mock( SchemaIndexProvider.Descriptor.class ), NO_CAPABILITY ), flippableIndexProxy, failedIndexProxyFactory, "userIndexDescription" ); } @@ -172,7 +172,7 @@ public StoreScan visitNodes( int[] labelIds propertyUpdatesVisitor, labelIds, propertyKeyIdFilter, processListener ); } - public void setProcessListener( Listener processListener ) + void setProcessListener( Listener processListener ) { this.processListener = processListener; } diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/OnlineIndexProxyTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/OnlineIndexProxyTest.java index 421bc5521896..c7af1e090263 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/OnlineIndexProxyTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/OnlineIndexProxyTest.java @@ -45,8 +45,8 @@ public class OnlineIndexProxyTest public void shouldRemoveIndexCountsWhenTheIndexItselfIsDropped() throws IOException { // given - OnlineIndexProxy index = new OnlineIndexProxy( indexId, descriptor, providerDescriptor, NO_CAPABILITY, accessor, - storeView, false ); + OnlineIndexProxy index = new OnlineIndexProxy( indexId, new IndexMeta( descriptor, providerDescriptor, NO_CAPABILITY ), + accessor, storeView, false ); // when index.drop(); diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/state/storeview/LabelScanViewNodeStoreScanTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/state/storeview/LabelScanViewNodeStoreScanTest.java index 53aa35dc66c4..cf58b572ab92 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/state/storeview/LabelScanViewNodeStoreScanTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/state/storeview/LabelScanViewNodeStoreScanTest.java @@ -30,12 +30,10 @@ import org.neo4j.collection.primitive.PrimitiveLongIterator; import org.neo4j.collection.primitive.PrimitiveLongResourceIterator; import org.neo4j.helpers.collection.Visitor; -import org.neo4j.internal.kernel.api.IndexCapability; import org.neo4j.kernel.api.index.IndexPopulator; -import org.neo4j.kernel.api.index.SchemaIndexProvider; import org.neo4j.kernel.api.labelscan.LabelScanStore; import org.neo4j.kernel.api.labelscan.NodeLabelUpdate; -import org.neo4j.kernel.api.schema.index.IndexDescriptor; +import org.neo4j.kernel.impl.api.index.IndexMeta; import org.neo4j.kernel.impl.api.index.FailedIndexProxyFactory; import org.neo4j.kernel.impl.api.index.FlippableIndexProxy; import org.neo4j.kernel.impl.api.index.IndexStoreView; @@ -50,7 +48,6 @@ import static org.junit.Assert.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import static org.neo4j.internal.kernel.api.IndexCapability.NO_CAPABILITY; public class LabelScanViewNodeStoreScanTest { @@ -88,7 +85,7 @@ public void iterateOverLabeledNodeIds() throws Exception private MultipleIndexPopulator.IndexPopulation getPopulation( LabelScanTestMultipleIndexPopulator indexPopulator ) { - return indexPopulator.createPopulation( mock( IndexPopulator.class ), 1, null, null, NO_CAPABILITY, null, null, null ); + return indexPopulator.createPopulation( mock( IndexPopulator.class ), 1, null, null, null, null ); } private LabelScanViewNodeStoreScan getLabelScanViewStoreScan( int[] labelIds ) @@ -106,11 +103,11 @@ private class LabelScanTestMultipleIndexPopulator extends MultipleIndexPopulator @Override public IndexPopulation createPopulation( IndexPopulator populator, long indexId, - IndexDescriptor descriptor, SchemaIndexProvider.Descriptor providerDescriptor, - IndexCapability indexCapability, FlippableIndexProxy flipper, FailedIndexProxyFactory failedIndexProxyFactory, + IndexMeta indexMeta, FlippableIndexProxy flipper, + FailedIndexProxyFactory failedIndexProxyFactory, String indexUserDescription ) { - return super.createPopulation( populator, indexId, descriptor, providerDescriptor, indexCapability, flipper, + return super.createPopulation( populator, indexId, indexMeta, flipper, failedIndexProxyFactory, indexUserDescription ); } }