Skip to content

Commit

Permalink
Bacporting moving of tx brindge to global scope from more
Browse files Browse the repository at this point in the history
recent PR since multiple bridges creating mess during context creation
in various places when bridge is resolved from dependency resolver.
  • Loading branch information
MishaDemianenko committed Aug 1, 2018
1 parent 08eb899 commit 54d8d30
Show file tree
Hide file tree
Showing 6 changed files with 17 additions and 13 deletions.
Expand Up @@ -63,7 +63,7 @@ public GraphDatabaseFacade createDatabase( String name )
{ {
DataSourceModule dataSource = new DataSourceModule( name, platform, edition, procedures, graphDatabaseFacade ); DataSourceModule dataSource = new DataSourceModule( name, platform, edition, procedures, graphDatabaseFacade );
ClassicCoreSPI spi = new ClassicCoreSPI( platform, dataSource, msgLog, edition.coreAPIAvailabilityGuard ); ClassicCoreSPI spi = new ClassicCoreSPI( platform, dataSource, msgLog, edition.coreAPIAvailabilityGuard );
graphDatabaseFacade.init( spi, dataSource.threadToTransactionBridge, platform.config, dataSource.tokenHolders ); graphDatabaseFacade.init( spi, platform.threadToTransactionBridge, platform.config, dataSource.tokenHolders );
platform.dataSourceManager.register( dataSource.neoStoreDataSource ); platform.dataSourceManager.register( dataSource.neoStoreDataSource );
database = graphDatabaseFacade; database = graphDatabaseFacade;
return database; return database;
Expand Down
Expand Up @@ -182,8 +182,8 @@ public KernelTransaction beginTransaction( KernelTransaction.Type type, LoginCon
availability.assertDatabaseAvailable(); availability.assertDatabaseAvailable();
KernelTransaction kernelTx = dataSource.kernelAPI.get().beginTransaction( type, loginContext, timeout ); KernelTransaction kernelTx = dataSource.kernelAPI.get().beginTransaction( type, loginContext, timeout );
kernelTx.registerCloseListener( kernelTx.registerCloseListener(
txId -> dataSource.threadToTransactionBridge.unbindTransactionFromCurrentThread() ); txId -> platform.threadToTransactionBridge.unbindTransactionFromCurrentThread() );
dataSource.threadToTransactionBridge.bindTransactionToCurrentThread( kernelTx ); platform.threadToTransactionBridge.bindTransactionToCurrentThread( kernelTx );
return kernelTx; return kernelTx;
} }
catch ( TransactionFailureException e ) catch ( TransactionFailureException e )
Expand Down
Expand Up @@ -36,6 +36,7 @@
import org.neo4j.kernel.GraphDatabaseQueryService; import org.neo4j.kernel.GraphDatabaseQueryService;
import org.neo4j.kernel.api.KernelTransaction; import org.neo4j.kernel.api.KernelTransaction;
import org.neo4j.kernel.api.explicitindex.AutoIndexing; import org.neo4j.kernel.api.explicitindex.AutoIndexing;
import org.neo4j.kernel.impl.core.ThreadToStatementContextBridge;
import org.neo4j.kernel.impl.coreapi.CoreAPIAvailabilityGuard; import org.neo4j.kernel.impl.coreapi.CoreAPIAvailabilityGuard;
import org.neo4j.kernel.impl.factory.GraphDatabaseFacade; import org.neo4j.kernel.impl.factory.GraphDatabaseFacade;
import org.neo4j.kernel.impl.query.QueryExecutionKernelException; import org.neo4j.kernel.impl.query.QueryExecutionKernelException;
Expand All @@ -51,16 +52,19 @@ public class ProcedureGDBFacadeSPI implements GraphDatabaseFacade.SPI
private final CoreAPIAvailabilityGuard availability; private final CoreAPIAvailabilityGuard availability;
private final ThrowingFunction<URL,URL,URLAccessValidationError> urlValidator; private final ThrowingFunction<URL,URL,URLAccessValidationError> urlValidator;
private final SecurityContext securityContext; private final SecurityContext securityContext;
private final ThreadToStatementContextBridge threadToTransactionBridge;


public ProcedureGDBFacadeSPI( DataSourceModule sourceModule, DependencyResolver resolver, CoreAPIAvailabilityGuard availability, public ProcedureGDBFacadeSPI( DataSourceModule sourceModule, DependencyResolver resolver, CoreAPIAvailabilityGuard availability,
ThrowingFunction<URL,URL,URLAccessValidationError> urlValidator, SecurityContext securityContext ) ThrowingFunction<URL,URL,URLAccessValidationError> urlValidator, SecurityContext securityContext,
ThreadToStatementContextBridge threadToTransactionBridge )
{ {
this.databaseDirectory = sourceModule.neoStoreDataSource.getDatabaseDirectory(); this.databaseDirectory = sourceModule.neoStoreDataSource.getDatabaseDirectory();
this.sourceModule = sourceModule; this.sourceModule = sourceModule;
this.resolver = resolver; this.resolver = resolver;
this.availability = availability; this.availability = availability;
this.urlValidator = urlValidator; this.urlValidator = urlValidator;
this.securityContext = securityContext; this.securityContext = securityContext;
this.threadToTransactionBridge = threadToTransactionBridge;
} }


@Override @Override
Expand Down Expand Up @@ -169,8 +173,8 @@ public KernelTransaction beginTransaction( KernelTransaction.Type type, LoginCon
availability.assertDatabaseAvailable(); availability.assertDatabaseAvailable();
KernelTransaction kernelTx = sourceModule.kernelAPI.get().beginTransaction( type, this.securityContext, timeout ); KernelTransaction kernelTx = sourceModule.kernelAPI.get().beginTransaction( type, this.securityContext, timeout );
kernelTx.registerCloseListener( kernelTx.registerCloseListener(
txId -> sourceModule.threadToTransactionBridge.unbindTransactionFromCurrentThread() ); txId -> threadToTransactionBridge.unbindTransactionFromCurrentThread() );
sourceModule.threadToTransactionBridge.bindTransactionToCurrentThread( kernelTx ); threadToTransactionBridge.bindTransactionToCurrentThread( kernelTx );
return kernelTx; return kernelTx;
} }
catch ( TransactionFailureException e ) catch ( TransactionFailureException e )
Expand Down
Expand Up @@ -36,7 +36,6 @@
import org.neo4j.kernel.impl.api.explicitindex.InternalAutoIndexing; import org.neo4j.kernel.impl.api.explicitindex.InternalAutoIndexing;
import org.neo4j.kernel.impl.api.index.IndexingService; import org.neo4j.kernel.impl.api.index.IndexingService;
import org.neo4j.kernel.impl.core.DatabasePanicEventGenerator; import org.neo4j.kernel.impl.core.DatabasePanicEventGenerator;
import org.neo4j.kernel.impl.core.ThreadToStatementContextBridge;
import org.neo4j.kernel.impl.core.TokenHolders; import org.neo4j.kernel.impl.core.TokenHolders;
import org.neo4j.kernel.impl.factory.GraphDatabaseFacade; import org.neo4j.kernel.impl.factory.GraphDatabaseFacade;
import org.neo4j.kernel.impl.index.IndexConfigStore; import org.neo4j.kernel.impl.index.IndexConfigStore;
Expand All @@ -61,8 +60,6 @@
*/ */
public class DataSourceModule public class DataSourceModule
{ {
public final ThreadToStatementContextBridge threadToTransactionBridge;

public final NeoStoreDataSource neoStoreDataSource; public final NeoStoreDataSource neoStoreDataSource;


public final Supplier<InwardKernel> kernelAPI; public final Supplier<InwardKernel> kernelAPI;
Expand Down Expand Up @@ -92,8 +89,6 @@ public DataSourceModule( String databaseName, final PlatformModule platformModul
DiagnosticsManager diagnosticsManager = platformModule.diagnosticsManager; DiagnosticsManager diagnosticsManager = platformModule.diagnosticsManager;
Monitors monitors = new Monitors( platformModule.monitors ); Monitors monitors = new Monitors( platformModule.monitors );


threadToTransactionBridge = deps.satisfyDependency( new ThreadToStatementContextBridge( platformModule.availabilityGuard ) );

transactionEventHandlers = new TransactionEventHandlers( graphDatabaseFacade ); transactionEventHandlers = new TransactionEventHandlers( graphDatabaseFacade );


diagnosticsManager.prependProvider( config ); diagnosticsManager.prependProvider( config );
Expand Down
Expand Up @@ -41,6 +41,7 @@
import org.neo4j.kernel.extension.UnsatisfiedDependencyStrategies; import org.neo4j.kernel.extension.UnsatisfiedDependencyStrategies;
import org.neo4j.kernel.impl.api.LogRotationMonitor; import org.neo4j.kernel.impl.api.LogRotationMonitor;
import org.neo4j.kernel.impl.context.TransactionVersionContextSupplier; import org.neo4j.kernel.impl.context.TransactionVersionContextSupplier;
import org.neo4j.kernel.impl.core.ThreadToStatementContextBridge;
import org.neo4j.kernel.impl.factory.DatabaseInfo; import org.neo4j.kernel.impl.factory.DatabaseInfo;
import org.neo4j.kernel.impl.logging.LogService; import org.neo4j.kernel.impl.logging.LogService;
import org.neo4j.kernel.impl.logging.StoreLogService; import org.neo4j.kernel.impl.logging.StoreLogService;
Expand Down Expand Up @@ -126,6 +127,8 @@ public class PlatformModule


public final SystemNanoClock clock; public final SystemNanoClock clock;


public final ThreadToStatementContextBridge threadToTransactionBridge;

public final VersionContextSupplier versionContextSupplier; public final VersionContextSupplier versionContextSupplier;


public final RecoveryCleanupWorkCollector recoveryCleanupWorkCollector; public final RecoveryCleanupWorkCollector recoveryCleanupWorkCollector;
Expand Down Expand Up @@ -207,6 +210,7 @@ public PlatformModule( File providedStoreDir, Config config, DatabaseInfo databa
dependencies.satisfyDependency( dataSourceManager ); dependencies.satisfyDependency( dataSourceManager );


availabilityGuard = dependencies.satisfyDependency( createAvailabilityGuard() ); availabilityGuard = dependencies.satisfyDependency( createAvailabilityGuard() );
threadToTransactionBridge = dependencies.satisfyDependency( new ThreadToStatementContextBridge( availabilityGuard ) );


transactionMonitor = dependencies.satisfyDependency( createTransactionStats() ); transactionMonitor = dependencies.satisfyDependency( createTransactionStats() );


Expand Down
Expand Up @@ -69,9 +69,10 @@ public GraphDatabaseService apply( Context context ) throws ProcedureException
dataSource.neoStoreDataSource.getDependencyResolver(), dataSource.neoStoreDataSource.getDependencyResolver(),
availability, availability,
urlValidator, urlValidator,
securityContext securityContext,
platform.threadToTransactionBridge
), ),
dataSource.threadToTransactionBridge, platform.threadToTransactionBridge,
platform.config, platform.config,
tokenHolders tokenHolders
); );
Expand Down

0 comments on commit 54d8d30

Please sign in to comment.