Skip to content

Commit

Permalink
Introduce composite guard for editions with multiple databases.
Browse files Browse the repository at this point in the history
Move global guard to edition module.
  • Loading branch information
MishaDemianenko committed Aug 24, 2018
1 parent f48a4f3 commit cef4ad4
Show file tree
Hide file tree
Showing 38 changed files with 187 additions and 114 deletions.
Expand Up @@ -37,6 +37,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.txtracking.TransactionIdTracker; import org.neo4j.kernel.api.txtracking.TransactionIdTracker;
import org.neo4j.kernel.availability.AvailabilityGuard;
import org.neo4j.kernel.availability.DatabaseAvailabilityGuard; import org.neo4j.kernel.availability.DatabaseAvailabilityGuard;
import org.neo4j.kernel.impl.core.ThreadToStatementContextBridge; import org.neo4j.kernel.impl.core.ThreadToStatementContextBridge;
import org.neo4j.kernel.impl.coreapi.InternalTransaction; import org.neo4j.kernel.impl.coreapi.InternalTransaction;
Expand Down Expand Up @@ -158,7 +159,7 @@ private InternalTransaction beginTransaction( KernelTransaction.Type type, Login
private static TransactionIdTracker newTransactionIdTracker( GraphDatabaseAPI db ) private static TransactionIdTracker newTransactionIdTracker( GraphDatabaseAPI db )
{ {
Supplier<TransactionIdStore> transactionIdStoreSupplier = db.getDependencyResolver().provideDependency( TransactionIdStore.class ); Supplier<TransactionIdStore> transactionIdStoreSupplier = db.getDependencyResolver().provideDependency( TransactionIdStore.class );
DatabaseAvailabilityGuard guard = resolveDependency( db, DatabaseAvailabilityGuard.class ); AvailabilityGuard guard = resolveDependency( db, DatabaseAvailabilityGuard.class );
return new TransactionIdTracker( transactionIdStoreSupplier, guard ); return new TransactionIdTracker( transactionIdStoreSupplier, guard );
} }


Expand Down
Expand Up @@ -31,6 +31,7 @@
import org.neo4j.graphdb.DependencyResolver; import org.neo4j.graphdb.DependencyResolver;
import org.neo4j.internal.kernel.api.exceptions.TransactionFailureException; import org.neo4j.internal.kernel.api.exceptions.TransactionFailureException;
import org.neo4j.kernel.GraphDatabaseQueryService; import org.neo4j.kernel.GraphDatabaseQueryService;
import org.neo4j.kernel.availability.AvailabilityGuard;
import org.neo4j.kernel.availability.DatabaseAvailabilityGuard; import org.neo4j.kernel.availability.DatabaseAvailabilityGuard;
import org.neo4j.kernel.impl.core.ThreadToStatementContextBridge; import org.neo4j.kernel.impl.core.ThreadToStatementContextBridge;
import org.neo4j.kernel.impl.query.QueryExecutionEngine; import org.neo4j.kernel.impl.query.QueryExecutionEngine;
Expand Down Expand Up @@ -62,7 +63,7 @@ public void throwsWhenTxAwaitDurationExpires()
Duration txAwaitDuration = Duration.ofSeconds( 42 ); Duration txAwaitDuration = Duration.ofSeconds( 42 );
FakeClock clock = new FakeClock(); FakeClock clock = new FakeClock();


DatabaseAvailabilityGuard databaseAvailabilityGuard = spy( new DatabaseAvailabilityGuard( DEFAULT_DATABASE_NAME, clock, NullLog.getInstance() ) ); AvailabilityGuard databaseAvailabilityGuard = spy( new DatabaseAvailabilityGuard( DEFAULT_DATABASE_NAME, clock, NullLog.getInstance() ) );
when( databaseAvailabilityGuard.isAvailable() ).then( invocation -> when( databaseAvailabilityGuard.isAvailable() ).then( invocation ->
{ {
// move clock forward on the first availability check // move clock forward on the first availability check
Expand Down Expand Up @@ -118,12 +119,12 @@ private static TransactionIdStore fixedTxIdStore( long lastClosedTransactionId )
private static TransactionStateMachineV1SPI createTxSpi( Supplier<TransactionIdStore> txIdStore, Duration txAwaitDuration, private static TransactionStateMachineV1SPI createTxSpi( Supplier<TransactionIdStore> txIdStore, Duration txAwaitDuration,
Clock clock ) Clock clock )
{ {
DatabaseAvailabilityGuard databaseAvailabilityGuard = new DatabaseAvailabilityGuard( DEFAULT_DATABASE_NAME, clock, NullLog.getInstance() ); AvailabilityGuard databaseAvailabilityGuard = new DatabaseAvailabilityGuard( DEFAULT_DATABASE_NAME, clock, NullLog.getInstance() );
return createTxSpi( txIdStore, txAwaitDuration, databaseAvailabilityGuard, clock ); return createTxSpi( txIdStore, txAwaitDuration, databaseAvailabilityGuard, clock );
} }


private static TransactionStateMachineV1SPI createTxSpi( Supplier<TransactionIdStore> txIdStore, Duration txAwaitDuration, private static TransactionStateMachineV1SPI createTxSpi( Supplier<TransactionIdStore> txIdStore, Duration txAwaitDuration,
DatabaseAvailabilityGuard databaseAvailabilityGuard, Clock clock ) AvailabilityGuard databaseAvailabilityGuard, Clock clock )
{ {
QueryExecutionEngine queryExecutionEngine = mock( QueryExecutionEngine.class ); QueryExecutionEngine queryExecutionEngine = mock( QueryExecutionEngine.class );


Expand Down
Expand Up @@ -65,7 +65,7 @@
import org.neo4j.kernel.api.exceptions.Status; import org.neo4j.kernel.api.exceptions.Status;
import org.neo4j.kernel.api.query.ExecutingQuery; import org.neo4j.kernel.api.query.ExecutingQuery;
import org.neo4j.kernel.api.txstate.TxStateHolder; import org.neo4j.kernel.api.txstate.TxStateHolder;
import org.neo4j.kernel.availability.DatabaseAvailabilityGuard; import org.neo4j.kernel.availability.AvailabilityGuard;
import org.neo4j.kernel.impl.api.ClockContext; import org.neo4j.kernel.impl.api.ClockContext;
import org.neo4j.kernel.impl.core.ThreadToStatementContextBridge; import org.neo4j.kernel.impl.core.ThreadToStatementContextBridge;
import org.neo4j.kernel.impl.coreapi.InternalTransaction; import org.neo4j.kernel.impl.coreapi.InternalTransaction;
Expand Down Expand Up @@ -797,7 +797,7 @@ public void setMetaData( Map<String,Object> metaData )
} }


@Override @Override
public DatabaseAvailabilityGuard getAvailabilityGuard() public AvailabilityGuard getAvailabilityGuard()
{ {
return internal.getAvailabilityGuard(); return internal.getAvailabilityGuard();
} }
Expand Down
Expand Up @@ -45,6 +45,7 @@
import org.neo4j.kernel.api.explicitindex.AutoIndexing; import org.neo4j.kernel.api.explicitindex.AutoIndexing;
import org.neo4j.kernel.api.index.NodePropertyAccessor; import org.neo4j.kernel.api.index.NodePropertyAccessor;
import org.neo4j.kernel.api.labelscan.LabelScanStore; import org.neo4j.kernel.api.labelscan.LabelScanStore;
import org.neo4j.kernel.availability.AvailabilityGuard;
import org.neo4j.kernel.availability.DatabaseAvailability; import org.neo4j.kernel.availability.DatabaseAvailability;
import org.neo4j.kernel.availability.DatabaseAvailabilityGuard; import org.neo4j.kernel.availability.DatabaseAvailabilityGuard;
import org.neo4j.kernel.configuration.Config; import org.neo4j.kernel.configuration.Config;
Expand Down Expand Up @@ -569,7 +570,7 @@ private void buildRecovery(
private NeoStoreKernelModule buildKernel( LogFiles logFiles, TransactionAppender appender, private NeoStoreKernelModule buildKernel( LogFiles logFiles, TransactionAppender appender,
IndexingService indexingService, DatabaseSchemaState databaseSchemaState, LabelScanStore labelScanStore, IndexingService indexingService, DatabaseSchemaState databaseSchemaState, LabelScanStore labelScanStore,
StorageEngine storageEngine, IndexConfigStore indexConfigStore, TransactionIdStore transactionIdStore, StorageEngine storageEngine, IndexConfigStore indexConfigStore, TransactionIdStore transactionIdStore,
DatabaseAvailabilityGuard databaseAvailabilityGuard, SystemNanoClock clock, NodePropertyAccessor nodePropertyAccessor ) AvailabilityGuard databaseAvailabilityGuard, SystemNanoClock clock, NodePropertyAccessor nodePropertyAccessor )
{ {
AtomicReference<CpuClock> cpuClockRef = setupCpuClockAtomicReference(); AtomicReference<CpuClock> cpuClockRef = setupCpuClockAtomicReference();
AtomicReference<HeapAllocation> heapAllocationRef = setupHeapAllocationAtomicReference(); AtomicReference<HeapAllocation> heapAllocationRef = setupHeapAllocationAtomicReference();
Expand Down
Expand Up @@ -32,7 +32,7 @@
import org.neo4j.internal.kernel.api.security.AuthSubject; import org.neo4j.internal.kernel.api.security.AuthSubject;
import org.neo4j.internal.kernel.api.security.LoginContext; import org.neo4j.internal.kernel.api.security.LoginContext;
import org.neo4j.internal.kernel.api.security.SecurityContext; import org.neo4j.internal.kernel.api.security.SecurityContext;
import org.neo4j.kernel.availability.DatabaseAvailabilityGuard; import org.neo4j.kernel.availability.AvailabilityGuard;
import org.neo4j.kernel.impl.api.ClockContext; import org.neo4j.kernel.impl.api.ClockContext;
import org.neo4j.storageengine.api.schema.IndexDescriptor; import org.neo4j.storageengine.api.schema.IndexDescriptor;


Expand Down Expand Up @@ -181,7 +181,7 @@ interface CloseListener
/** /**
* @return database availability guard of database this transaction was started against. * @return database availability guard of database this transaction was started against.
*/ */
DatabaseAvailabilityGuard getAvailabilityGuard(); AvailabilityGuard getAvailabilityGuard();


@FunctionalInterface @FunctionalInterface
interface Revertable extends AutoCloseable interface Revertable extends AutoCloseable
Expand Down
Expand Up @@ -25,7 +25,7 @@


import org.neo4j.internal.kernel.api.exceptions.TransactionFailureException; import org.neo4j.internal.kernel.api.exceptions.TransactionFailureException;
import org.neo4j.kernel.api.exceptions.Status; import org.neo4j.kernel.api.exceptions.Status;
import org.neo4j.kernel.availability.DatabaseAvailabilityGuard; import org.neo4j.kernel.availability.AvailabilityGuard;
import org.neo4j.kernel.impl.transaction.log.TransactionIdStore; import org.neo4j.kernel.impl.transaction.log.TransactionIdStore;


import static org.neo4j.kernel.impl.transaction.log.TransactionIdStore.BASE_TX_ID; import static org.neo4j.kernel.impl.transaction.log.TransactionIdStore.BASE_TX_ID;
Expand All @@ -37,9 +37,9 @@
public class TransactionIdTracker public class TransactionIdTracker
{ {
private final Supplier<TransactionIdStore> transactionIdStoreSupplier; private final Supplier<TransactionIdStore> transactionIdStoreSupplier;
private final DatabaseAvailabilityGuard databaseAvailabilityGuard; private final AvailabilityGuard databaseAvailabilityGuard;


public TransactionIdTracker( Supplier<TransactionIdStore> transactionIdStoreSupplier, DatabaseAvailabilityGuard databaseAvailabilityGuard ) public TransactionIdTracker( Supplier<TransactionIdStore> transactionIdStoreSupplier, AvailabilityGuard databaseAvailabilityGuard )
{ {
this.databaseAvailabilityGuard = databaseAvailabilityGuard; this.databaseAvailabilityGuard = databaseAvailabilityGuard;
this.transactionIdStoreSupplier = transactionIdStoreSupplier; this.transactionIdStoreSupplier = transactionIdStoreSupplier;
Expand Down
@@ -0,0 +1,41 @@
/*
* Copyright (c) 2002-2018 "Neo4j,"
* Neo4j Sweden AB [http://neo4j.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 <http://www.gnu.org/licenses/>.
*/
package org.neo4j.kernel.availability;

public interface AvailabilityGuard
{
void require( AvailabilityRequirement requirement );

void fulfill( AvailabilityRequirement requirement );

boolean isAvailable();

boolean isShutdown();

boolean isAvailable( long millis );

void checkAvailable() throws UnavailableException;

void await( long millis ) throws UnavailableException;

void addListener( AvailabilityListener listener );

void removeListener( AvailabilityListener listener );
}
Expand Up @@ -35,13 +35,13 @@
public class DatabaseAvailability extends LifecycleAdapter public class DatabaseAvailability extends LifecycleAdapter
{ {
private static final AvailabilityRequirement AVAILABILITY_REQUIREMENT = new DescriptiveAvailabilityRequirement( "Database available" ); private static final AvailabilityRequirement AVAILABILITY_REQUIREMENT = new DescriptiveAvailabilityRequirement( "Database available" );
private final DatabaseAvailabilityGuard databaseAvailabilityGuard; private final AvailabilityGuard databaseAvailabilityGuard;
private final TransactionCounters transactionCounters; private final TransactionCounters transactionCounters;
private final Clock clock; private final Clock clock;
private final long awaitActiveTransactionDeadlineMillis; private final long awaitActiveTransactionDeadlineMillis;
private volatile boolean started; private volatile boolean started;


public DatabaseAvailability( DatabaseAvailabilityGuard databaseAvailabilityGuard, TransactionCounters transactionCounters, Clock clock, public DatabaseAvailability( AvailabilityGuard databaseAvailabilityGuard, TransactionCounters transactionCounters, Clock clock,
long awaitActiveTransactionDeadlineMillis ) long awaitActiveTransactionDeadlineMillis )
{ {
this.databaseAvailabilityGuard = databaseAvailabilityGuard; this.databaseAvailabilityGuard = databaseAvailabilityGuard;
Expand Down
Expand Up @@ -37,7 +37,7 @@
* Consumers determine if it is ok to call the database using {@link #isAvailable()}, * Consumers determine if it is ok to call the database using {@link #isAvailable()},
* or await availability using {@link #isAvailable(long)}. * or await availability using {@link #isAvailable(long)}.
*/ */
public class DatabaseAvailabilityGuard public class DatabaseAvailabilityGuard implements AvailabilityGuard
{ {
private static final String DATABASE_AVAILABLE_MSG = "Fulfilling of requirement makes database %s available: %s."; private static final String DATABASE_AVAILABLE_MSG = "Fulfilling of requirement makes database %s available: %s.";
private static final String DATABASE_UNAVAILABLE_MSG = "Requirement makes database %s unavailable: %s."; private static final String DATABASE_UNAVAILABLE_MSG = "Requirement makes database %s unavailable: %s.";
Expand All @@ -63,6 +63,7 @@ public DatabaseAvailabilityGuard( String databaseName, Clock clock, Log log )
* *
* @param requirement the requirement object * @param requirement the requirement object
*/ */
@Override
public void require( AvailabilityRequirement requirement ) public void require( AvailabilityRequirement requirement )
{ {
if ( !blockingRequirements.add( requirement ) ) if ( !blockingRequirements.add( requirement ) )
Expand All @@ -85,6 +86,7 @@ public void require( AvailabilityRequirement requirement )
* *
* @param requirement the requirement object * @param requirement the requirement object
*/ */
@Override
public void fulfill( AvailabilityRequirement requirement ) public void fulfill( AvailabilityRequirement requirement )
{ {
if ( !blockingRequirements.remove( requirement ) ) if ( !blockingRequirements.remove( requirement ) )
Expand Down Expand Up @@ -126,6 +128,7 @@ public void shutdown()
* *
* @return true if there are no requirements waiting to be fulfilled and the guard has not been shutdown * @return true if there are no requirements waiting to be fulfilled and the guard has not been shutdown
*/ */
@Override
public boolean isAvailable() public boolean isAvailable()
{ {
return availability() == Availability.AVAILABLE; return availability() == Availability.AVAILABLE;
Expand All @@ -134,6 +137,7 @@ public boolean isAvailable()
/** /**
* Check if the database has been shut down. * Check if the database has been shut down.
*/ */
@Override
public boolean isShutdown() public boolean isShutdown()
{ {
return availability() == Availability.SHUTDOWN; return availability() == Availability.SHUTDOWN;
Expand All @@ -145,6 +149,7 @@ public boolean isShutdown()
* @param millis to wait for availability * @param millis to wait for availability
* @return true if there are no requirements waiting to be fulfilled and the guard has not been shutdown * @return true if there are no requirements waiting to be fulfilled and the guard has not been shutdown
*/ */
@Override
public boolean isAvailable( long millis ) public boolean isAvailable( long millis )
{ {
return availability( millis ) == Availability.AVAILABLE; return availability( millis ) == Availability.AVAILABLE;
Expand All @@ -156,6 +161,7 @@ public boolean isAvailable( long millis )
* *
* @throws UnavailableException if not available. * @throws UnavailableException if not available.
*/ */
@Override
public void checkAvailable() throws UnavailableException public void checkAvailable() throws UnavailableException
{ {
await( 0 ); await( 0 );
Expand All @@ -167,6 +173,7 @@ public void checkAvailable() throws UnavailableException
* @param millis to wait for availability * @param millis to wait for availability
* @throws UnavailableException thrown when the timeout has been exceeded or the guard has been shutdown * @throws UnavailableException thrown when the timeout has been exceeded or the guard has been shutdown
*/ */
@Override
public void await( long millis ) throws UnavailableException public void await( long millis ) throws UnavailableException
{ {
Availability availability = availability( millis ); Availability availability = availability( millis );
Expand Down Expand Up @@ -231,6 +238,7 @@ private Availability availability( long millis )
* *
* @param listener the listener to receive callbacks when availability changes * @param listener the listener to receive callbacks when availability changes
*/ */
@Override
public void addListener( AvailabilityListener listener ) public void addListener( AvailabilityListener listener )
{ {
listeners.add( listener ); listeners.add( listener );
Expand All @@ -241,6 +249,7 @@ public void addListener( AvailabilityListener listener )
* *
* @param listener the listener to remove * @param listener the listener to remove
*/ */
@Override
public void removeListener( AvailabilityListener listener ) public void removeListener( AvailabilityListener listener )
{ {
listeners.remove( listener ); listeners.remove( listener );
Expand Down
Expand Up @@ -29,12 +29,12 @@
*/ */
public class StartupWaiter extends LifecycleAdapter public class StartupWaiter extends LifecycleAdapter
{ {
private final DatabaseAvailabilityGuard databaseAvailabilityGuard; private final AvailabilityGuard databaseAvailabilityGuard;
private final long timeout; private final long timeout;


public StartupWaiter( DatabaseAvailabilityGuard databaseAvailabilityGuard, long timeout ) public StartupWaiter( AvailabilityGuard availabilityGuard, long timeout )
{ {
this.databaseAvailabilityGuard = databaseAvailabilityGuard; this.databaseAvailabilityGuard = availabilityGuard;
this.timeout = timeout; this.timeout = timeout;
} }


Expand Down
Expand Up @@ -23,7 +23,7 @@


public class UnavailableException extends Exception implements Status.HasStatus public class UnavailableException extends Exception implements Status.HasStatus
{ {
UnavailableException( String message ) public UnavailableException( String message )
{ {
super( message ); super( message );
} }
Expand Down
Expand Up @@ -68,7 +68,7 @@
import org.neo4j.kernel.api.txstate.ExplicitIndexTransactionState; import org.neo4j.kernel.api.txstate.ExplicitIndexTransactionState;
import org.neo4j.kernel.api.txstate.TransactionState; import org.neo4j.kernel.api.txstate.TransactionState;
import org.neo4j.kernel.api.txstate.TxStateHolder; import org.neo4j.kernel.api.txstate.TxStateHolder;
import org.neo4j.kernel.availability.DatabaseAvailabilityGuard; import org.neo4j.kernel.availability.AvailabilityGuard;
import org.neo4j.kernel.impl.api.index.IndexingProvidersService; import org.neo4j.kernel.impl.api.index.IndexingProvidersService;
import org.neo4j.kernel.impl.api.state.ConstraintIndexCreator; import org.neo4j.kernel.impl.api.state.ConstraintIndexCreator;
import org.neo4j.kernel.impl.api.state.TxState; import org.neo4j.kernel.impl.api.state.TxState;
Expand Down Expand Up @@ -143,7 +143,7 @@ public class KernelTransactionImplementation implements KernelTransaction, TxSta
private final TransactionMonitor transactionMonitor; private final TransactionMonitor transactionMonitor;
private final PageCursorTracerSupplier cursorTracerSupplier; private final PageCursorTracerSupplier cursorTracerSupplier;
private final VersionContextSupplier versionContextSupplier; private final VersionContextSupplier versionContextSupplier;
private final DatabaseAvailabilityGuard databaseAvailabilityGuard; private final AvailabilityGuard databaseAvailabilityGuard;
private final StorageReader storageReader; private final StorageReader storageReader;
private final ClockContext clocks; private final ClockContext clocks;
private final AccessCapability accessCapability; private final AccessCapability accessCapability;
Expand Down Expand Up @@ -196,7 +196,7 @@ public KernelTransactionImplementation( StatementOperationParts statementOperati
AccessCapability accessCapability, AutoIndexing autoIndexing, ExplicitIndexStore explicitIndexStore, VersionContextSupplier versionContextSupplier, AccessCapability accessCapability, AutoIndexing autoIndexing, ExplicitIndexStore explicitIndexStore, VersionContextSupplier versionContextSupplier,
CollectionsFactorySupplier collectionsFactorySupplier, ConstraintSemantics constraintSemantics, SchemaState schemaState, CollectionsFactorySupplier collectionsFactorySupplier, ConstraintSemantics constraintSemantics, SchemaState schemaState,
IndexingProvidersService indexProviders, TokenHolders tokenHolders, Dependencies dataSourceDependencies, IndexingProvidersService indexProviders, TokenHolders tokenHolders, Dependencies dataSourceDependencies,
DatabaseAvailabilityGuard databaseAvailabilityGuard ) AvailabilityGuard databaseAvailabilityGuard )
{ {
this.schemaWriteGuard = schemaWriteGuard; this.schemaWriteGuard = schemaWriteGuard;
this.hooks = hooks; this.hooks = hooks;
Expand Down Expand Up @@ -395,7 +395,7 @@ public void setMetaData( Map<String, Object> data )
} }


@Override @Override
public DatabaseAvailabilityGuard getAvailabilityGuard() public AvailabilityGuard getAvailabilityGuard()
{ {
return databaseAvailabilityGuard; return databaseAvailabilityGuard;
} }
Expand Down
Expand Up @@ -39,7 +39,7 @@
import org.neo4j.kernel.api.exceptions.Status; import org.neo4j.kernel.api.exceptions.Status;
import org.neo4j.kernel.api.explicitindex.AutoIndexing; import org.neo4j.kernel.api.explicitindex.AutoIndexing;
import org.neo4j.kernel.api.txstate.ExplicitIndexTransactionState; import org.neo4j.kernel.api.txstate.ExplicitIndexTransactionState;
import org.neo4j.kernel.availability.DatabaseAvailabilityGuard; import org.neo4j.kernel.availability.AvailabilityGuard;
import org.neo4j.kernel.impl.api.index.IndexingProvidersService; import org.neo4j.kernel.impl.api.index.IndexingProvidersService;
import org.neo4j.kernel.impl.api.state.ConstraintIndexCreator; import org.neo4j.kernel.impl.api.state.ConstraintIndexCreator;
import org.neo4j.kernel.impl.api.state.ExplicitIndexTransactionStateImpl; import org.neo4j.kernel.impl.api.state.ExplicitIndexTransactionStateImpl;
Expand Down Expand Up @@ -86,7 +86,7 @@ public class KernelTransactions extends LifecycleAdapter implements Supplier<Ker
private final TransactionCommitProcess transactionCommitProcess; private final TransactionCommitProcess transactionCommitProcess;
private final TransactionHooks hooks; private final TransactionHooks hooks;
private final TransactionMonitor transactionMonitor; private final TransactionMonitor transactionMonitor;
private final DatabaseAvailabilityGuard databaseAvailabilityGuard; private final AvailabilityGuard databaseAvailabilityGuard;
private final Tracers tracers; private final Tracers tracers;
private final StorageEngine storageEngine; private final StorageEngine storageEngine;
private final Procedures procedures; private final Procedures procedures;
Expand Down Expand Up @@ -140,7 +140,7 @@ public class KernelTransactions extends LifecycleAdapter implements Supplier<Ker
public KernelTransactions( StatementLocksFactory statementLocksFactory, ConstraintIndexCreator constraintIndexCreator, public KernelTransactions( StatementLocksFactory statementLocksFactory, ConstraintIndexCreator constraintIndexCreator,
StatementOperationParts statementOperations, SchemaWriteGuard schemaWriteGuard, TransactionHeaderInformationFactory txHeaderFactory, StatementOperationParts statementOperations, SchemaWriteGuard schemaWriteGuard, TransactionHeaderInformationFactory txHeaderFactory,
TransactionCommitProcess transactionCommitProcess, IndexConfigStore indexConfigStore, ExplicitIndexProvider explicitIndexProviderLookup, TransactionCommitProcess transactionCommitProcess, IndexConfigStore indexConfigStore, ExplicitIndexProvider explicitIndexProviderLookup,
TransactionHooks hooks, TransactionMonitor transactionMonitor, DatabaseAvailabilityGuard databaseAvailabilityGuard, Tracers tracers, TransactionHooks hooks, TransactionMonitor transactionMonitor, AvailabilityGuard databaseAvailabilityGuard, Tracers tracers,
StorageEngine storageEngine, Procedures procedures, TransactionIdStore transactionIdStore, SystemNanoClock clock, StorageEngine storageEngine, Procedures procedures, TransactionIdStore transactionIdStore, SystemNanoClock clock,
AtomicReference<CpuClock> cpuClockRef, AtomicReference<HeapAllocation> heapAllocationRef, AccessCapability accessCapability, AtomicReference<CpuClock> cpuClockRef, AtomicReference<HeapAllocation> heapAllocationRef, AccessCapability accessCapability,
AutoIndexing autoIndexing, ExplicitIndexStore explicitIndexStore, VersionContextSupplier versionContextSupplier, AutoIndexing autoIndexing, ExplicitIndexStore explicitIndexStore, VersionContextSupplier versionContextSupplier,
Expand Down
Expand Up @@ -25,6 +25,7 @@
import java.time.Clock; import java.time.Clock;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;


import org.neo4j.kernel.availability.AvailabilityGuard;
import org.neo4j.kernel.availability.AvailabilityListener; import org.neo4j.kernel.availability.AvailabilityListener;
import org.neo4j.kernel.availability.AvailabilityRequirement; import org.neo4j.kernel.availability.AvailabilityRequirement;
import org.neo4j.kernel.availability.DatabaseAvailabilityGuard; import org.neo4j.kernel.availability.DatabaseAvailabilityGuard;
Expand Down Expand Up @@ -63,7 +64,7 @@ public void logOnAvailabilityChange()
{ {
// Given // Given
Log log = mock( Log.class ); Log log = mock( Log.class );
DatabaseAvailabilityGuard databaseAvailabilityGuard = getDatabaseAvailabilityGuard( clock, log ); AvailabilityGuard databaseAvailabilityGuard = getDatabaseAvailabilityGuard( clock, log );


// When starting out // When starting out
verifyZeroInteractions( log ); verifyZeroInteractions( log );
Expand Down
Expand Up @@ -27,6 +27,7 @@


import org.neo4j.internal.kernel.api.exceptions.TransactionFailureException; import org.neo4j.internal.kernel.api.exceptions.TransactionFailureException;
import org.neo4j.kernel.api.exceptions.Status; import org.neo4j.kernel.api.exceptions.Status;
import org.neo4j.kernel.availability.AvailabilityGuard;
import org.neo4j.kernel.availability.DatabaseAvailabilityGuard; import org.neo4j.kernel.availability.DatabaseAvailabilityGuard;
import org.neo4j.kernel.impl.transaction.log.TransactionIdStore; import org.neo4j.kernel.impl.transaction.log.TransactionIdStore;


Expand All @@ -47,7 +48,7 @@ public class TransactionIdTrackerTest
private static final Duration DEFAULT_DURATION = ofSeconds( 10 ); private static final Duration DEFAULT_DURATION = ofSeconds( 10 );


private final TransactionIdStore transactionIdStore = mock( TransactionIdStore.class ); private final TransactionIdStore transactionIdStore = mock( TransactionIdStore.class );
private final DatabaseAvailabilityGuard databaseAvailabilityGuard = mock( DatabaseAvailabilityGuard.class ); private final AvailabilityGuard databaseAvailabilityGuard = mock( DatabaseAvailabilityGuard.class );


private TransactionIdTracker transactionIdTracker; private TransactionIdTracker transactionIdTracker;


Expand Down

0 comments on commit cef4ad4

Please sign in to comment.