Skip to content

Commit

Permalink
Use schema state directly to clear it instead of using callback.
Browse files Browse the repository at this point in the history
Propagate schema state to perform operations directly instead of passing
Runnable callback.
  • Loading branch information
MishaDemianenko committed Jun 13, 2017
1 parent b7b5362 commit 736b0f4
Show file tree
Hide file tree
Showing 11 changed files with 64 additions and 53 deletions.
Expand Up @@ -59,6 +59,7 @@
import org.neo4j.kernel.impl.api.KernelTransactionsSnapshot; import org.neo4j.kernel.impl.api.KernelTransactionsSnapshot;
import org.neo4j.kernel.impl.api.LegacyIndexProviderLookup; import org.neo4j.kernel.impl.api.LegacyIndexProviderLookup;
import org.neo4j.kernel.impl.api.LockingStatementOperations; import org.neo4j.kernel.impl.api.LockingStatementOperations;
import org.neo4j.kernel.impl.api.SchemaState;
import org.neo4j.kernel.impl.api.SchemaStateConcern; import org.neo4j.kernel.impl.api.SchemaStateConcern;
import org.neo4j.kernel.impl.api.SchemaWriteGuard; import org.neo4j.kernel.impl.api.SchemaWriteGuard;
import org.neo4j.kernel.impl.api.StackingQueryRegistrationOperations; import org.neo4j.kernel.impl.api.StackingQueryRegistrationOperations;
Expand Down Expand Up @@ -136,7 +137,6 @@
import org.neo4j.kernel.impl.transaction.log.rotation.LogRotationImpl; import org.neo4j.kernel.impl.transaction.log.rotation.LogRotationImpl;
import org.neo4j.kernel.impl.transaction.state.NeoStoreFileListing; import org.neo4j.kernel.impl.transaction.state.NeoStoreFileListing;
import org.neo4j.kernel.impl.util.Dependencies; import org.neo4j.kernel.impl.util.Dependencies;
import org.neo4j.scheduler.JobScheduler;
import org.neo4j.kernel.impl.util.SynchronizedArrayIdOrderingQueue; import org.neo4j.kernel.impl.util.SynchronizedArrayIdOrderingQueue;
import org.neo4j.kernel.info.DiagnosticsExtractor; import org.neo4j.kernel.info.DiagnosticsExtractor;
import org.neo4j.kernel.info.DiagnosticsManager; import org.neo4j.kernel.info.DiagnosticsManager;
Expand All @@ -158,6 +158,7 @@
import org.neo4j.logging.Log; import org.neo4j.logging.Log;
import org.neo4j.logging.LogProvider; import org.neo4j.logging.LogProvider;
import org.neo4j.logging.Logger; import org.neo4j.logging.Logger;
import org.neo4j.scheduler.JobScheduler;
import org.neo4j.storageengine.api.StorageEngine; import org.neo4j.storageengine.api.StorageEngine;
import org.neo4j.storageengine.api.StoreFileMetadata; import org.neo4j.storageengine.api.StoreFileMetadata;
import org.neo4j.storageengine.api.StoreReadLayer; import org.neo4j.storageengine.api.StoreReadLayer;
Expand Down Expand Up @@ -439,7 +440,7 @@ public void start() throws IOException


storageEngine = buildStorageEngine( storageEngine = buildStorageEngine(
propertyKeyTokenHolder, labelTokens, relationshipTypeTokens, legacyIndexProviderLookup, propertyKeyTokenHolder, labelTokens, relationshipTypeTokens, legacyIndexProviderLookup,
indexConfigStore, updateableSchemaState::clear, legacyIndexTransactionOrdering ); indexConfigStore, updateableSchemaState, legacyIndexTransactionOrdering );


LogEntryReader<ReadableClosablePositionAwareChannel> logEntryReader = LogEntryReader<ReadableClosablePositionAwareChannel> logEntryReader =
new VersionAwareLogEntryReader<>( storageEngine.commandReaderFactory(), STRICT ); new VersionAwareLogEntryReader<>( storageEngine.commandReaderFactory(), STRICT );
Expand Down Expand Up @@ -572,7 +573,7 @@ private StorageEngine buildStorageEngine(
PropertyKeyTokenHolder propertyKeyTokenHolder, LabelTokenHolder labelTokens, PropertyKeyTokenHolder propertyKeyTokenHolder, LabelTokenHolder labelTokens,
RelationshipTypeTokenHolder relationshipTypeTokens, RelationshipTypeTokenHolder relationshipTypeTokens,
LegacyIndexProviderLookup legacyIndexProviderLookup, IndexConfigStore indexConfigStore, LegacyIndexProviderLookup legacyIndexProviderLookup, IndexConfigStore indexConfigStore,
Runnable schemaStateChangeCallback, SynchronizedArrayIdOrderingQueue legacyIndexTransactionOrdering ) SchemaState schemaState, SynchronizedArrayIdOrderingQueue legacyIndexTransactionOrdering )
{ {
// TODO we should break this dependency on the kernelModule (which has not yet been created at this point in // TODO we should break this dependency on the kernelModule (which has not yet been created at this point in
// TODO the code) and instead let information about generations of transactions flow through the StorageEngine // TODO the code) and instead let information about generations of transactions flow through the StorageEngine
Expand All @@ -581,7 +582,7 @@ private StorageEngine buildStorageEngine(
() -> kernelModule.kernelTransactions().get(); () -> kernelModule.kernelTransactions().get();
RecordStorageEngine storageEngine = new RecordStorageEngine( storeDir, config, idGeneratorFactory, RecordStorageEngine storageEngine = new RecordStorageEngine( storeDir, config, idGeneratorFactory,
eligibleForReuse, idTypeConfigurationProvider, pageCache, fs, logProvider, propertyKeyTokenHolder, eligibleForReuse, idTypeConfigurationProvider, pageCache, fs, logProvider, propertyKeyTokenHolder,
labelTokens, relationshipTypeTokens, schemaStateChangeCallback, constraintSemantics, scheduler, labelTokens, relationshipTypeTokens, schemaState, constraintSemantics, scheduler,
tokenNameLookup, lockService, schemaIndexProvider, indexingServiceMonitor, databaseHealth, tokenNameLookup, lockService, schemaIndexProvider, indexingServiceMonitor, databaseHealth,
labelScanStoreProvider, legacyIndexProviderLookup, indexConfigStore, legacyIndexTransactionOrdering, labelScanStoreProvider, legacyIndexProviderLookup, indexConfigStore, legacyIndexTransactionOrdering,
transactionSnapshotSupplier ); transactionSnapshotSupplier );
Expand Down
Expand Up @@ -28,6 +28,7 @@
import org.neo4j.kernel.api.index.IndexPopulator; import org.neo4j.kernel.api.index.IndexPopulator;
import org.neo4j.kernel.api.index.SchemaIndexProvider; import org.neo4j.kernel.api.index.SchemaIndexProvider;
import org.neo4j.kernel.api.schema.index.IndexDescriptor; import org.neo4j.kernel.api.schema.index.IndexDescriptor;
import org.neo4j.kernel.impl.api.SchemaState;
import org.neo4j.storageengine.api.schema.PopulationProgress; import org.neo4j.storageengine.api.schema.PopulationProgress;


import static java.lang.Thread.currentThread; import static java.lang.Thread.currentThread;
Expand All @@ -44,21 +45,16 @@ public class IndexPopulationJob implements Runnable
{ {
private final IndexingService.Monitor monitor; private final IndexingService.Monitor monitor;
private final MultipleIndexPopulator multiPopulator; private final MultipleIndexPopulator multiPopulator;
private final IndexStoreView storeView;
private final CountDownLatch doneSignal = new CountDownLatch( 1 ); private final CountDownLatch doneSignal = new CountDownLatch( 1 );
private final Runnable schemaStateChangeCallback; private final SchemaState schemaState;


private volatile StoreScan<IndexPopulationFailedKernelException> storeScan; private volatile StoreScan<IndexPopulationFailedKernelException> storeScan;
private volatile boolean cancelled; private volatile boolean cancelled;


public IndexPopulationJob( IndexStoreView storeView, public IndexPopulationJob( MultipleIndexPopulator multiPopulator, IndexingService.Monitor monitor, SchemaState schemaState )
MultipleIndexPopulator multiPopulator,
IndexingService.Monitor monitor,
Runnable schemaStateChangeCallback )
{ {
this.multiPopulator = multiPopulator; this.multiPopulator = multiPopulator;
this.storeView = storeView; this.schemaState = schemaState;
this.schemaStateChangeCallback = schemaStateChangeCallback;
this.monitor = monitor; this.monitor = monitor;
} }


Expand Down Expand Up @@ -118,7 +114,7 @@ public void run()


multiPopulator.flipAfterPopulation(); multiPopulator.flipAfterPopulation();


schemaStateChangeCallback.run(); schemaState.clear();
} }
catch ( Throwable t ) catch ( Throwable t )
{ {
Expand Down
Expand Up @@ -51,17 +51,18 @@
import org.neo4j.kernel.api.index.SchemaIndexProvider.Descriptor; import org.neo4j.kernel.api.index.SchemaIndexProvider.Descriptor;
import org.neo4j.kernel.api.schema.LabelSchemaDescriptor; import org.neo4j.kernel.api.schema.LabelSchemaDescriptor;
import org.neo4j.kernel.api.schema.index.IndexDescriptor; import org.neo4j.kernel.api.schema.index.IndexDescriptor;
import org.neo4j.kernel.impl.api.SchemaState;
import org.neo4j.kernel.impl.api.index.sampling.IndexSamplingController; import org.neo4j.kernel.impl.api.index.sampling.IndexSamplingController;
import org.neo4j.kernel.impl.api.index.sampling.IndexSamplingMode; import org.neo4j.kernel.impl.api.index.sampling.IndexSamplingMode;
import org.neo4j.kernel.impl.store.UnderlyingStorageException; import org.neo4j.kernel.impl.store.UnderlyingStorageException;
import org.neo4j.kernel.impl.store.record.IndexRule; import org.neo4j.kernel.impl.store.record.IndexRule;
import org.neo4j.kernel.impl.transaction.state.IndexUpdates; import org.neo4j.kernel.impl.transaction.state.IndexUpdates;
import org.neo4j.scheduler.JobScheduler;
import org.neo4j.kernel.lifecycle.LifecycleAdapter; import org.neo4j.kernel.lifecycle.LifecycleAdapter;
import org.neo4j.logging.Log; import org.neo4j.logging.Log;
import org.neo4j.logging.LogProvider; import org.neo4j.logging.LogProvider;
import org.neo4j.register.Register.DoubleLongRegister; import org.neo4j.register.Register.DoubleLongRegister;
import org.neo4j.register.Registers; import org.neo4j.register.Registers;
import org.neo4j.scheduler.JobScheduler;


import static java.lang.String.format; import static java.lang.String.format;
import static java.util.concurrent.TimeUnit.MINUTES; import static java.util.concurrent.TimeUnit.MINUTES;
Expand Down Expand Up @@ -101,7 +102,7 @@ public class IndexingService extends LifecycleAdapter implements IndexingUpdateS
private final Monitor monitor; private final Monitor monitor;
private final PrimitiveLongSet recoveredNodeIds = Primitive.longSet( 20 ); private final PrimitiveLongSet recoveredNodeIds = Primitive.longSet( 20 );
private final JobScheduler scheduler; private final JobScheduler scheduler;
private final Runnable schemaStateChangeCallback; private final SchemaState schemaState;


enum State enum State
{ {
Expand Down Expand Up @@ -172,7 +173,7 @@ public void awaitingPopulationOfRecoveredIndex( long indexId, IndexDescriptor de
IndexSamplingController samplingController, IndexSamplingController samplingController,
TokenNameLookup tokenNameLookup, TokenNameLookup tokenNameLookup,
JobScheduler scheduler, JobScheduler scheduler,
Runnable schemaStateChangeCallback, SchemaState schemaState,
MultiPopulatorFactory multiPopulatorFactory, MultiPopulatorFactory multiPopulatorFactory,
LogProvider logProvider, LogProvider logProvider,
Monitor monitor ) Monitor monitor )
Expand All @@ -185,7 +186,7 @@ public void awaitingPopulationOfRecoveredIndex( long indexId, IndexDescriptor de
this.samplingController = samplingController; this.samplingController = samplingController;
this.tokenNameLookup = tokenNameLookup; this.tokenNameLookup = tokenNameLookup;
this.scheduler = scheduler; this.scheduler = scheduler;
this.schemaStateChangeCallback = schemaStateChangeCallback; this.schemaState = schemaState;
this.multiPopulatorFactory = multiPopulatorFactory; this.multiPopulatorFactory = multiPopulatorFactory;
this.logProvider = logProvider; this.logProvider = logProvider;
this.monitor = monitor; this.monitor = monitor;
Expand Down Expand Up @@ -739,7 +740,7 @@ public ResourceIterator<File> snapshotStoreFiles() throws IOException
private IndexPopulationJob newIndexPopulationJob() private IndexPopulationJob newIndexPopulationJob()
{ {
MultipleIndexPopulator multiPopulator = multiPopulatorFactory.create( storeView, logProvider ); MultipleIndexPopulator multiPopulator = multiPopulatorFactory.create( storeView, logProvider );
return new IndexPopulationJob( storeView, multiPopulator, monitor, schemaStateChangeCallback ); return new IndexPopulationJob( multiPopulator, monitor, schemaState );
} }


private void startIndexPopulation( IndexPopulationJob job ) private void startIndexPopulation( IndexPopulationJob job )
Expand Down
Expand Up @@ -22,12 +22,13 @@
import org.neo4j.kernel.api.TokenNameLookup; import org.neo4j.kernel.api.TokenNameLookup;
import org.neo4j.kernel.api.index.SchemaIndexProvider; import org.neo4j.kernel.api.index.SchemaIndexProvider;
import org.neo4j.kernel.configuration.Config; import org.neo4j.kernel.configuration.Config;
import org.neo4j.kernel.impl.api.SchemaState;
import org.neo4j.kernel.impl.api.index.sampling.IndexSamplingConfig; import org.neo4j.kernel.impl.api.index.sampling.IndexSamplingConfig;
import org.neo4j.kernel.impl.api.index.sampling.IndexSamplingController; import org.neo4j.kernel.impl.api.index.sampling.IndexSamplingController;
import org.neo4j.kernel.impl.api.index.sampling.IndexSamplingControllerFactory; import org.neo4j.kernel.impl.api.index.sampling.IndexSamplingControllerFactory;
import org.neo4j.kernel.impl.store.record.IndexRule; import org.neo4j.kernel.impl.store.record.IndexRule;
import org.neo4j.scheduler.JobScheduler;
import org.neo4j.logging.LogProvider; import org.neo4j.logging.LogProvider;
import org.neo4j.scheduler.JobScheduler;


/** /**
* Factory to create {@link IndexingService} * Factory to create {@link IndexingService}
Expand All @@ -46,7 +47,7 @@ public static IndexingService createIndexingService( Config config,
Iterable<IndexRule> indexRules, Iterable<IndexRule> indexRules,
LogProvider logProvider, LogProvider logProvider,
IndexingService.Monitor monitor, IndexingService.Monitor monitor,
Runnable schemaStateChangeCallback ) SchemaState schemaState )
{ {
if ( providerMap == null || providerMap.getDefaultProvider() == null ) if ( providerMap == null || providerMap.getDefaultProvider() == null )
{ {
Expand All @@ -65,7 +66,7 @@ public static IndexingService createIndexingService( Config config,
new IndexProxyCreator( samplingConfig, storeView, providerMap, tokenNameLookup, logProvider ); new IndexProxyCreator( samplingConfig, storeView, providerMap, tokenNameLookup, logProvider );


return new IndexingService( proxySetup, providerMap, indexMapRef, storeView, indexRules, return new IndexingService( proxySetup, providerMap, indexMapRef, storeView, indexRules,
indexSamplingController, tokenNameLookup, scheduler, schemaStateChangeCallback, indexSamplingController, tokenNameLookup, scheduler, schemaState,
multiPopulatorFactory, logProvider, monitor ); multiPopulatorFactory, logProvider, monitor );
} }
} }
Expand Up @@ -19,6 +19,7 @@
*/ */
package org.neo4j.kernel.impl.cache; package org.neo4j.kernel.impl.cache;


import org.neo4j.kernel.impl.api.SchemaState;
import org.neo4j.kernel.impl.api.store.SchemaCache; import org.neo4j.kernel.impl.api.store.SchemaCache;
import org.neo4j.kernel.impl.core.CacheAccessBackDoor; import org.neo4j.kernel.impl.core.CacheAccessBackDoor;
import org.neo4j.kernel.impl.core.LabelTokenHolder; import org.neo4j.kernel.impl.core.LabelTokenHolder;
Expand All @@ -31,18 +32,18 @@
public class BridgingCacheAccess implements CacheAccessBackDoor public class BridgingCacheAccess implements CacheAccessBackDoor
{ {
private final SchemaCache schemaCache; private final SchemaCache schemaCache;
private final Runnable schemaStateChangeCallback; private final SchemaState schemaState;
private final PropertyKeyTokenHolder propertyKeyTokenHolder; private final PropertyKeyTokenHolder propertyKeyTokenHolder;
private final RelationshipTypeTokenHolder relationshipTypeTokenHolder; private final RelationshipTypeTokenHolder relationshipTypeTokenHolder;
private final LabelTokenHolder labelTokenHolder; private final LabelTokenHolder labelTokenHolder;


public BridgingCacheAccess( SchemaCache schemaCache, Runnable schemaStateChangeCallback, public BridgingCacheAccess( SchemaCache schemaCache, SchemaState schemaState,
PropertyKeyTokenHolder propertyKeyTokenHolder, PropertyKeyTokenHolder propertyKeyTokenHolder,
RelationshipTypeTokenHolder relationshipTypeTokenHolder, RelationshipTypeTokenHolder relationshipTypeTokenHolder,
LabelTokenHolder labelTokenHolder ) LabelTokenHolder labelTokenHolder )
{ {
this.schemaCache = schemaCache; this.schemaCache = schemaCache;
this.schemaStateChangeCallback = schemaStateChangeCallback; this.schemaState = schemaState;
this.propertyKeyTokenHolder = propertyKeyTokenHolder; this.propertyKeyTokenHolder = propertyKeyTokenHolder;
this.relationshipTypeTokenHolder = relationshipTypeTokenHolder; this.relationshipTypeTokenHolder = relationshipTypeTokenHolder;
this.labelTokenHolder = labelTokenHolder; this.labelTokenHolder = labelTokenHolder;
Expand All @@ -58,7 +59,7 @@ public void addSchemaRule( SchemaRule rule )
public void removeSchemaRuleFromCache( long id ) public void removeSchemaRuleFromCache( long id )
{ {
schemaCache.removeSchemaRule( id ); schemaCache.removeSchemaRule( id );
schemaStateChangeCallback.run(); schemaState.clear();
} }


@Override @Override
Expand Down
Expand Up @@ -51,15 +51,16 @@
import org.neo4j.kernel.impl.api.LegacyBatchIndexApplier; import org.neo4j.kernel.impl.api.LegacyBatchIndexApplier;
import org.neo4j.kernel.impl.api.LegacyIndexApplierLookup; import org.neo4j.kernel.impl.api.LegacyIndexApplierLookup;
import org.neo4j.kernel.impl.api.LegacyIndexProviderLookup; import org.neo4j.kernel.impl.api.LegacyIndexProviderLookup;
import org.neo4j.kernel.impl.api.SchemaState;
import org.neo4j.kernel.impl.api.TransactionApplier; import org.neo4j.kernel.impl.api.TransactionApplier;
import org.neo4j.kernel.impl.api.TransactionApplierFacade; import org.neo4j.kernel.impl.api.TransactionApplierFacade;
import org.neo4j.kernel.impl.api.index.IndexingService; import org.neo4j.kernel.impl.api.index.IndexingService;
import org.neo4j.kernel.impl.api.index.IndexingServiceFactory; import org.neo4j.kernel.impl.api.index.IndexingServiceFactory;
import org.neo4j.kernel.impl.api.index.IndexingUpdateService; import org.neo4j.kernel.impl.api.index.IndexingUpdateService;
import org.neo4j.kernel.impl.api.index.PropertyPhysicalToLogicalConverter; import org.neo4j.kernel.impl.api.index.PropertyPhysicalToLogicalConverter;
import org.neo4j.kernel.impl.api.scan.LabelScanStoreProvider; import org.neo4j.kernel.impl.api.scan.LabelScanStoreProvider;
import org.neo4j.kernel.impl.api.store.StorageLayer;
import org.neo4j.kernel.impl.api.store.SchemaCache; import org.neo4j.kernel.impl.api.store.SchemaCache;
import org.neo4j.kernel.impl.api.store.StorageLayer;
import org.neo4j.kernel.impl.api.store.StoreStatement; import org.neo4j.kernel.impl.api.store.StoreStatement;
import org.neo4j.kernel.impl.cache.BridgingCacheAccess; import org.neo4j.kernel.impl.cache.BridgingCacheAccess;
import org.neo4j.kernel.impl.constraints.ConstraintSemantics; import org.neo4j.kernel.impl.constraints.ConstraintSemantics;
Expand Down Expand Up @@ -104,12 +105,12 @@
import org.neo4j.kernel.impl.transaction.state.storeview.NeoStoreIndexStoreView; import org.neo4j.kernel.impl.transaction.state.storeview.NeoStoreIndexStoreView;
import org.neo4j.kernel.impl.util.DependencySatisfier; import org.neo4j.kernel.impl.util.DependencySatisfier;
import org.neo4j.kernel.impl.util.IdOrderingQueue; import org.neo4j.kernel.impl.util.IdOrderingQueue;
import org.neo4j.scheduler.JobScheduler;
import org.neo4j.kernel.info.DiagnosticsManager; import org.neo4j.kernel.info.DiagnosticsManager;
import org.neo4j.kernel.internal.DatabaseHealth; import org.neo4j.kernel.internal.DatabaseHealth;
import org.neo4j.kernel.lifecycle.Lifecycle; import org.neo4j.kernel.lifecycle.Lifecycle;
import org.neo4j.kernel.spi.legacyindex.IndexImplementation; import org.neo4j.kernel.spi.legacyindex.IndexImplementation;
import org.neo4j.logging.LogProvider; import org.neo4j.logging.LogProvider;
import org.neo4j.scheduler.JobScheduler;
import org.neo4j.storageengine.api.CommandReaderFactory; import org.neo4j.storageengine.api.CommandReaderFactory;
import org.neo4j.storageengine.api.CommandsToApply; import org.neo4j.storageengine.api.CommandsToApply;
import org.neo4j.storageengine.api.StorageCommand; import org.neo4j.storageengine.api.StorageCommand;
Expand Down Expand Up @@ -147,7 +148,7 @@ public class RecordStorageEngine implements StorageEngine, Lifecycle
private final LabelScanStore labelScanStore; private final LabelScanStore labelScanStore;
private final DefaultSchemaIndexProviderMap schemaIndexProviderMap; private final DefaultSchemaIndexProviderMap schemaIndexProviderMap;
private final LegacyIndexApplierLookup legacyIndexApplierLookup; private final LegacyIndexApplierLookup legacyIndexApplierLookup;
private final Runnable schemaStateChangeCallback; private final SchemaState schemaState;
private final SchemaStorage schemaStorage; private final SchemaStorage schemaStorage;
private final ConstraintSemantics constraintSemantics; private final ConstraintSemantics constraintSemantics;
private final IdOrderingQueue legacyIndexTransactionOrdering; private final IdOrderingQueue legacyIndexTransactionOrdering;
Expand Down Expand Up @@ -181,7 +182,7 @@ public RecordStorageEngine(
PropertyKeyTokenHolder propertyKeyTokenHolder, PropertyKeyTokenHolder propertyKeyTokenHolder,
LabelTokenHolder labelTokens, LabelTokenHolder labelTokens,
RelationshipTypeTokenHolder relationshipTypeTokens, RelationshipTypeTokenHolder relationshipTypeTokens,
Runnable schemaStateChangeCallback, SchemaState schemaState,
ConstraintSemantics constraintSemantics, ConstraintSemantics constraintSemantics,
JobScheduler scheduler, JobScheduler scheduler,
TokenNameLookup tokenNameLookup, TokenNameLookup tokenNameLookup,
Expand All @@ -198,7 +199,7 @@ public RecordStorageEngine(
this.propertyKeyTokenHolder = propertyKeyTokenHolder; this.propertyKeyTokenHolder = propertyKeyTokenHolder;
this.relationshipTypeTokenHolder = relationshipTypeTokens; this.relationshipTypeTokenHolder = relationshipTypeTokens;
this.labelTokenHolder = labelTokens; this.labelTokenHolder = labelTokens;
this.schemaStateChangeCallback = schemaStateChangeCallback; this.schemaState = schemaState;
this.scheduler = scheduler; this.scheduler = scheduler;
this.lockService = lockService; this.lockService = lockService;
this.databaseHealth = databaseHealth; this.databaseHealth = databaseHealth;
Expand All @@ -225,10 +226,10 @@ public RecordStorageEngine(
indexingService = IndexingServiceFactory.createIndexingService( config, scheduler, schemaIndexProviderMap, indexingService = IndexingServiceFactory.createIndexingService( config, scheduler, schemaIndexProviderMap,
indexStoreView, tokenNameLookup, indexStoreView, tokenNameLookup,
Iterators.asList( new SchemaStorage( neoStores.getSchemaStore() ).indexesGetAll() ), logProvider, Iterators.asList( new SchemaStorage( neoStores.getSchemaStore() ).indexesGetAll() ), logProvider,
indexingServiceMonitor, schemaStateChangeCallback ); indexingServiceMonitor, schemaState );


integrityValidator = new IntegrityValidator( neoStores, indexingService ); integrityValidator = new IntegrityValidator( neoStores, indexingService );
cacheAccess = new BridgingCacheAccess( schemaCache, schemaStateChangeCallback, cacheAccess = new BridgingCacheAccess( schemaCache, schemaState,
propertyKeyTokenHolder, relationshipTypeTokens, labelTokens ); propertyKeyTokenHolder, relationshipTypeTokens, labelTokens );


storeStatementSupplier = storeStatementSupplier( neoStores ); storeStatementSupplier = storeStatementSupplier( neoStores );
Expand Down Expand Up @@ -311,8 +312,8 @@ public void createCommands(
relationshipCreator, relationshipDeleter, propertyCreator, propertyDeleter ); relationshipCreator, relationshipDeleter, propertyCreator, propertyDeleter );


// Visit transaction state and populate these record state objects // Visit transaction state and populate these record state objects
TxStateVisitor txStateVisitor = new TransactionToRecordStateVisitor( recordState, TxStateVisitor txStateVisitor = new TransactionToRecordStateVisitor( recordState, schemaState,
schemaStateChangeCallback, schemaStorage, constraintSemantics, schemaIndexProviderMap ); schemaStorage, constraintSemantics, schemaIndexProviderMap );
CountsRecordState countsRecordState = new CountsRecordState(); CountsRecordState countsRecordState = new CountsRecordState();
txStateVisitor = constraintSemantics.decorateTxStateVisitor( txStateVisitor = constraintSemantics.decorateTxStateVisitor(
storeLayer, storeLayer,
Expand Down
Expand Up @@ -33,6 +33,7 @@
import org.neo4j.kernel.api.schema.constaints.NodeKeyConstraintDescriptor; import org.neo4j.kernel.api.schema.constaints.NodeKeyConstraintDescriptor;
import org.neo4j.kernel.api.schema.constaints.UniquenessConstraintDescriptor; import org.neo4j.kernel.api.schema.constaints.UniquenessConstraintDescriptor;
import org.neo4j.kernel.api.schema.index.IndexDescriptor; import org.neo4j.kernel.api.schema.index.IndexDescriptor;
import org.neo4j.kernel.impl.api.SchemaState;
import org.neo4j.kernel.impl.api.index.SchemaIndexProviderMap; import org.neo4j.kernel.impl.api.index.SchemaIndexProviderMap;
import org.neo4j.kernel.impl.constraints.ConstraintSemantics; import org.neo4j.kernel.impl.constraints.ConstraintSemantics;
import org.neo4j.kernel.impl.store.SchemaStorage; import org.neo4j.kernel.impl.store.SchemaStorage;
Expand All @@ -45,17 +46,17 @@ public class TransactionToRecordStateVisitor extends TxStateVisitor.Adapter
{ {
private boolean clearSchemaState; private boolean clearSchemaState;
private final TransactionRecordState recordState; private final TransactionRecordState recordState;
private final Runnable schemaStateChangeCallback; private final SchemaState schemaState;
private final SchemaStorage schemaStorage; private final SchemaStorage schemaStorage;
private final ConstraintSemantics constraintSemantics; private final ConstraintSemantics constraintSemantics;
private final SchemaIndexProviderMap schemaIndexProviderMap; private final SchemaIndexProviderMap schemaIndexProviderMap;


public TransactionToRecordStateVisitor( TransactionRecordState recordState, Runnable schemaStateChangeCallback, public TransactionToRecordStateVisitor( TransactionRecordState recordState, SchemaState schemaState,
SchemaStorage schemaStorage, ConstraintSemantics constraintSemantics, SchemaStorage schemaStorage, ConstraintSemantics constraintSemantics,
SchemaIndexProviderMap schemaIndexProviderMap ) SchemaIndexProviderMap schemaIndexProviderMap )
{ {
this.recordState = recordState; this.recordState = recordState;
this.schemaStateChangeCallback = schemaStateChangeCallback; this.schemaState = schemaState;
this.schemaStorage = schemaStorage; this.schemaStorage = schemaStorage;
this.constraintSemantics = constraintSemantics; this.constraintSemantics = constraintSemantics;
this.schemaIndexProviderMap = schemaIndexProviderMap; this.schemaIndexProviderMap = schemaIndexProviderMap;
Expand All @@ -68,7 +69,7 @@ public void close()
{ {
if ( clearSchemaState ) if ( clearSchemaState )
{ {
schemaStateChangeCallback.run(); schemaState.clear();
} }
} }
finally finally
Expand Down
Expand Up @@ -632,7 +632,7 @@ private IndexPopulationJob newIndexPopulationJob( FailedIndexProxyFactory failur
flipper.setFlipTarget( mock( IndexProxyFactory.class ) ); flipper.setFlipTarget( mock( IndexProxyFactory.class ) );


MultipleIndexPopulator multiPopulator = new MultipleIndexPopulator( storeView, logProvider ); MultipleIndexPopulator multiPopulator = new MultipleIndexPopulator( storeView, logProvider );
IndexPopulationJob job = new IndexPopulationJob( storeView, multiPopulator, NO_MONITOR, stateHolder::clear ); IndexPopulationJob job = new IndexPopulationJob( multiPopulator, NO_MONITOR, stateHolder );
job.addPopulator( populator, indexId, descriptor, PROVIDER_DESCRIPTOR, job.addPopulator( populator, indexId, descriptor, PROVIDER_DESCRIPTOR,
format( ":%s(%s)", FIRST.name(), name ), flipper, failureDelegateFactory ); format( ":%s(%s)", FIRST.name(), name ), flipper, failureDelegateFactory );
return job; return job;
Expand Down

0 comments on commit 736b0f4

Please sign in to comment.