diff --git a/community/cypher/interpreted-runtime/src/main/scala/org/neo4j/cypher/internal/runtime/interpreted/TransactionBoundQueryContext.scala b/community/cypher/interpreted-runtime/src/main/scala/org/neo4j/cypher/internal/runtime/interpreted/TransactionBoundQueryContext.scala index 1e15cb4fec98d..d7e6768af96da 100644 --- a/community/cypher/interpreted-runtime/src/main/scala/org/neo4j/cypher/internal/runtime/interpreted/TransactionBoundQueryContext.scala +++ b/community/cypher/interpreted-runtime/src/main/scala/org/neo4j/cypher/internal/runtime/interpreted/TransactionBoundQueryContext.scala @@ -24,16 +24,12 @@ import java.util.function.Predicate import org.eclipse.collections.api.iterator.LongIterator import org.neo4j.collection.{PrimitiveLongResourceIterator, RawIterator} -import org.neo4j.cypher.InternalException import org.neo4j.cypher.internal.javacompat.GraphDatabaseCypherService import org.neo4j.cypher.internal.planner.v3_5.spi.{IdempotentResult, IndexDescriptor} import org.neo4j.cypher.internal.runtime._ import org.neo4j.cypher.internal.runtime.interpreted.TransactionBoundQueryContext.IndexSearchMonitor import org.neo4j.cypher.internal.runtime.interpreted.commands.convert.DirectionConverter.toGraphDb import org.neo4j.cypher.internal.runtime.interpreted.commands.expressions.{OnlyDirectionExpander, TypeAndDirectionExpander} -import org.opencypher.v9_0.util.{EntityNotFoundException, FailedIndexException} -import org.opencypher.v9_0.expressions.SemanticDirection -import org.opencypher.v9_0.expressions.SemanticDirection.{BOTH, INCOMING, OUTGOING} import org.neo4j.cypher.internal.v3_5.logical.plans._ import org.neo4j.graphalgo.impl.path.ShortestPath import org.neo4j.graphalgo.impl.path.ShortestPath.ShortestPathPredicate @@ -51,9 +47,8 @@ import org.neo4j.kernel.api._ import org.neo4j.kernel.api.exceptions.schema.{AlreadyConstrainedException, AlreadyIndexedException} import org.neo4j.kernel.api.schema.SchemaDescriptorFactory import org.neo4j.kernel.api.schema.constaints.ConstraintDescriptorFactory -import org.neo4j.kernel.guard.TerminationGuard import org.neo4j.kernel.impl.api.RelationshipVisitor -import org.neo4j.kernel.impl.api.store.{RelationshipIterator} +import org.neo4j.kernel.impl.api.store.RelationshipIterator import org.neo4j.kernel.impl.core.{EmbeddedProxySPI, ThreadToStatementContextBridge} import org.neo4j.kernel.impl.coreapi.PropertyContainerLocker import org.neo4j.kernel.impl.query.Neo4jTransactionalContext @@ -62,6 +57,9 @@ import org.neo4j.kernel.impl.util.ValueUtils.{fromNodeProxy, fromRelationshipPro import org.neo4j.values.storable.{TextValue, Value, Values, _} import org.neo4j.values.virtual.{ListValue, NodeValue, RelationshipValue, VirtualValues} import org.neo4j.values.{AnyValue, ValueMapper} +import org.opencypher.v9_0.expressions.SemanticDirection +import org.opencypher.v9_0.expressions.SemanticDirection.{BOTH, INCOMING, OUTGOING} +import org.opencypher.v9_0.util.{EntityNotFoundException, FailedIndexException} import scala.collection.Iterator import scala.collection.JavaConverters._ @@ -88,13 +86,12 @@ sealed class TransactionBoundQueryContext(val transactionalContext: Transactiona getDependencyResolver. provideDependency(classOf[ThreadToStatementContextBridge]). get - val guard = new TerminationGuard val locker = new PropertyContainerLocker val query = transactionalContext.tc.executingQuery() val context = transactionalContext.tc.asInstanceOf[Neo4jTransactionalContext] val newTx = transactionalContext.graph.beginTransaction(context.transactionType, context.securityContext) - val neo4jTransactionalContext = context.copyFrom(context.graph, guard, statementProvider, locker, newTx, + val neo4jTransactionalContext = context.copyFrom(context.graph, statementProvider, locker, newTx, statementProvider.get(), query) new TransactionBoundQueryContext(TransactionalContextWrapper(neo4jTransactionalContext)) } diff --git a/community/cypher/interpreted-runtime/src/test/scala/org/neo4j/cypher/internal/runtime/interpreted/TransactionBoundQueryContextTest.scala b/community/cypher/interpreted-runtime/src/test/scala/org/neo4j/cypher/internal/runtime/interpreted/TransactionBoundQueryContextTest.scala index 0f56b4bee8d2b..73b8457597c28 100644 --- a/community/cypher/interpreted-runtime/src/test/scala/org/neo4j/cypher/internal/runtime/interpreted/TransactionBoundQueryContextTest.scala +++ b/community/cypher/interpreted-runtime/src/test/scala/org/neo4j/cypher/internal/runtime/interpreted/TransactionBoundQueryContextTest.scala @@ -27,8 +27,6 @@ import org.mockito.Mockito._ import org.neo4j.cypher.internal.javacompat import org.neo4j.cypher.internal.javacompat.GraphDatabaseCypherService import org.neo4j.cypher.internal.runtime.interpreted.TransactionBoundQueryContext.IndexSearchMonitor -import org.opencypher.v9_0.util.test_helpers.CypherFunSuite -import org.opencypher.v9_0.expressions.SemanticDirection import org.neo4j.graphdb._ import org.neo4j.graphdb.config.Setting import org.neo4j.graphdb.factory.GraphDatabaseSettings @@ -50,6 +48,8 @@ import org.neo4j.kernel.impl.query.{Neo4jTransactionalContext, Neo4jTransactiona import org.neo4j.storageengine.api.StorageReader import org.neo4j.test.TestGraphDatabaseFactory import org.neo4j.values.virtual.VirtualValues.EMPTY_MAP +import org.opencypher.v9_0.expressions.SemanticDirection +import org.opencypher.v9_0.util.test_helpers.CypherFunSuite import scala.collection.JavaConverters._ @@ -91,7 +91,7 @@ class TransactionBoundQueryContextTest extends CypherFunSuite { val transaction = mock[KernelTransaction] when(transaction.cursors()).thenReturn(new DefaultCursors()) when(bridge.getKernelTransactionBoundToThisThread(true)).thenReturn(transaction) - val tc = new Neo4jTransactionalContext(graph, null, bridge, locker, outerTx, statement,null, null) + val tc = new Neo4jTransactionalContext(graph, bridge, locker, outerTx, statement,null, null) val transactionalContext = TransactionalContextWrapper(tc) val context = new TransactionBoundQueryContext(transactionalContext)(indexSearchMonitor) // WHEN @@ -115,7 +115,7 @@ class TransactionBoundQueryContextTest extends CypherFunSuite { when(transaction.acquireStatement()).thenReturn(statement) when(transaction.cursors()).thenReturn(new DefaultCursors()) when(bridge.getKernelTransactionBoundToThisThread(true)).thenReturn(transaction) - val tc = new Neo4jTransactionalContext(graph, null, bridge, locker, outerTx, statement,null, null) + val tc = new Neo4jTransactionalContext(graph, bridge, locker, outerTx, statement,null, null) val transactionalContext = TransactionalContextWrapper(tc) val context = new TransactionBoundQueryContext(transactionalContext)(indexSearchMonitor) // WHEN @@ -218,7 +218,7 @@ class TransactionBoundQueryContextTest extends CypherFunSuite { when(transaction.acquireStatement()).thenReturn(statement) when(transaction.cursors()).thenReturn(new DefaultCursors()) when(bridge.getKernelTransactionBoundToThisThread(true)).thenReturn(transaction) - val tc = new Neo4jTransactionalContext(graph, null, bridge, locker, outerTx, statement, null, null) + val tc = new Neo4jTransactionalContext(graph, bridge, locker, outerTx, statement, null, null) val transactionalContext = TransactionalContextWrapper(tc) val context = new TransactionBoundQueryContext(transactionalContext)(indexSearchMonitor) val resource1 = mock[AutoCloseable] diff --git a/community/kernel/src/main/java/org/neo4j/kernel/guard/Guard.java b/community/kernel/src/main/java/org/neo4j/kernel/guard/Guard.java deleted file mode 100644 index fc18aad7481e2..0000000000000 --- a/community/kernel/src/main/java/org/neo4j/kernel/guard/Guard.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * 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 . - */ -package org.neo4j.kernel.guard; - -import org.neo4j.graphdb.TransactionTerminatedException; -import org.neo4j.kernel.api.KernelTransaction; - -/** - * Guard that check entities for compatibility with some kind of guard criteria. - * As soon as entity do not satisfy that criteria {@link TransactionTerminatedException } will be thrown. - */ -public interface Guard -{ - void check( KernelTransaction transaction ); -} diff --git a/community/kernel/src/main/java/org/neo4j/kernel/guard/TerminationGuard.java b/community/kernel/src/main/java/org/neo4j/kernel/guard/TerminationGuard.java deleted file mode 100644 index 6423dec096cb7..0000000000000 --- a/community/kernel/src/main/java/org/neo4j/kernel/guard/TerminationGuard.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * 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 . - */ -package org.neo4j.kernel.guard; - -import org.neo4j.graphdb.TransactionTerminatedException; -import org.neo4j.kernel.api.KernelTransaction; - -/** - * Guard that checks kernel transaction for termination. - * As soon as transaction timeout time reached {@link TransactionTerminatedException } will be thrown. - */ -public class TerminationGuard implements Guard -{ - @Override - public void check( KernelTransaction transaction ) - { - transaction.assertOpen(); - } -} diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/DataSourceModule.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/DataSourceModule.java index 1eed6f5e7f27e..39ac87529440c 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/DataSourceModule.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/DataSourceModule.java @@ -40,8 +40,6 @@ import org.neo4j.kernel.api.explicitindex.AutoIndexing; import org.neo4j.kernel.builtinprocs.SpecialBuiltInProcedures; import org.neo4j.kernel.configuration.Config; -import org.neo4j.kernel.guard.Guard; -import org.neo4j.kernel.guard.TerminationGuard; import org.neo4j.kernel.impl.api.NonTransactionalTokenNameLookup; import org.neo4j.kernel.impl.api.SchemaWriteGuard; import org.neo4j.kernel.impl.api.dbms.NonTransactionalDbmsOperations; @@ -103,8 +101,6 @@ public class DataSourceModule public final AutoIndexing autoIndexing; - public final Guard guard; - public DataSourceModule( final PlatformModule platformModule, EditionModule editionModule, Supplier queryExecutionEngineSupplier ) { @@ -136,8 +132,6 @@ public DataSourceModule( final PlatformModule platformModule, EditionModule edit SchemaWriteGuard schemaWriteGuard = deps.satisfyDependency( editionModule.schemaWriteGuard ); - guard = createGuard( deps ); - DatabasePanicEventGenerator databasePanicEventGenerator = deps.satisfyDependency( new DatabasePanicEventGenerator( platformModule.eventHandlers ) ); @@ -206,18 +200,6 @@ public DataSourceModule( final PlatformModule platformModule, EditionModule edit procedures.registerComponent( GraphDatabaseService.class, gdsFactory::apply, true ); } - private Guard createGuard( Dependencies deps ) - { - TerminationGuard guard = createGuard(); - deps.satisfyDependency( guard ); - return guard; - } - - protected TerminationGuard createGuard() - { - return new TerminationGuard(); - } - private Procedures setupProcedures( PlatformModule platform, EditionModule editionModule ) { File pluginDir = platform.config.get( GraphDatabaseSettings.plugin_dir ); @@ -242,9 +224,8 @@ private Procedures setupProcedures( PlatformModule platform, EditionModule editi Log proceduresLog = platform.logging.getUserLog( Procedures.class ); procedures.registerComponent( Log.class, ctx -> proceduresLog, true ); - Guard guard = platform.dependencies.resolveDependency( Guard.class ); procedures.registerComponent( ProcedureTransaction.class, new ProcedureTransactionProvider(), true ); - procedures.registerComponent( org.neo4j.procedure.TerminationGuard.class, new TerminationGuardProvider( guard ), true ); + procedures.registerComponent( org.neo4j.procedure.TerminationGuard.class, new TerminationGuardProvider(), true ); // Below components are not public API, but are made available for internal // procedures to call, and to provide temporary workarounds for the following diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/GraphDatabaseFacade.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/GraphDatabaseFacade.java index 4e4905870ce0e..e61e5eddd91ae 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/GraphDatabaseFacade.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/GraphDatabaseFacade.java @@ -82,7 +82,6 @@ import org.neo4j.kernel.api.exceptions.Status; import org.neo4j.kernel.api.explicitindex.AutoIndexing; import org.neo4j.kernel.configuration.Config; -import org.neo4j.kernel.guard.Guard; import org.neo4j.kernel.impl.api.TokenAccess; import org.neo4j.kernel.impl.core.EmbeddedProxySPI; import org.neo4j.kernel.impl.core.GraphPropertiesProxy; @@ -200,7 +199,7 @@ public GraphDatabaseFacade() /** * Create a new Core API facade, backed by the given SPI and using pre-resolved dependencies */ - public void init( EditionModule editionModule, SPI spi, Guard guard, ThreadToStatementContextBridge txBridge, Config config, + public void init( EditionModule editionModule, SPI spi, ThreadToStatementContextBridge txBridge, Config config, RelationshipTypeTokenHolder relationshipTypeTokenHolder ) { this.editionModule = editionModule; @@ -224,7 +223,7 @@ public void init( EditionModule editionModule, SPI spi, Guard guard, ThreadToSta nodeAutoIndexer, relAutoIndexer ); } ); - this.contextFactory = Neo4jTransactionalContextFactory.create( spi, guard, txBridge, locker ); + this.contextFactory = Neo4jTransactionalContextFactory.create( spi, txBridge, locker ); } @Override diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/GraphDatabaseFacadeFactory.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/GraphDatabaseFacadeFactory.java index a7bdf3d988374..a487464203302 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/GraphDatabaseFacadeFactory.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/GraphDatabaseFacadeFactory.java @@ -180,7 +180,6 @@ public GraphDatabaseFacade initFacade( File storeDir, Config config, final Depen graphDatabaseFacade.init( edition, spi, - dataSource.guard, dataSource.threadToTransactionBridge, platform.config, edition.relationshipTypeTokenHolder diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/proc/ProcedureGDSFactory.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/proc/ProcedureGDSFactory.java index e027153892f5f..2257b9113db62 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/proc/ProcedureGDSFactory.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/proc/ProcedureGDSFactory.java @@ -82,7 +82,6 @@ public GraphDatabaseService apply( Context context ) throws ProcedureException urlValidator, securityContext ), - dataSource.guard, dataSource.threadToTransactionBridge, platform.config, relationshipTypeTokenHolder diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/proc/TerminationGuardProvider.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/proc/TerminationGuardProvider.java index fdf77a6888d58..a03c72d987e55 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/proc/TerminationGuardProvider.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/proc/TerminationGuardProvider.java @@ -22,20 +22,12 @@ import org.neo4j.internal.kernel.api.exceptions.ProcedureException; import org.neo4j.kernel.api.KernelTransaction; import org.neo4j.kernel.api.proc.Context; -import org.neo4j.kernel.guard.Guard; import org.neo4j.procedure.TerminationGuard; import static org.neo4j.kernel.api.proc.Context.KERNEL_TRANSACTION; public class TerminationGuardProvider implements ComponentRegistry.Provider { - private final Guard guard; - - public TerminationGuardProvider( Guard guard ) - { - this.guard = guard; - } - @Override public TerminationGuard apply( Context ctx ) throws ProcedureException { @@ -55,7 +47,7 @@ private class TransactionTerminationGuard implements TerminationGuard @Override public void check() { - guard.check( ktx ); + ktx.assertOpen(); } } } diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/query/Neo4jTransactionalContext.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/query/Neo4jTransactionalContext.java index 9b322dfeec1e4..c37c2206816bb 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/query/Neo4jTransactionalContext.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/query/Neo4jTransactionalContext.java @@ -33,7 +33,6 @@ import org.neo4j.kernel.api.dbms.DbmsOperations; import org.neo4j.kernel.api.query.ExecutingQuery; import org.neo4j.kernel.api.txstate.TxStateHolder; -import org.neo4j.kernel.guard.Guard; import org.neo4j.kernel.impl.api.KernelTransactionImplementation; import org.neo4j.kernel.impl.core.ThreadToStatementContextBridge; import org.neo4j.kernel.impl.coreapi.InternalTransaction; @@ -43,7 +42,6 @@ public class Neo4jTransactionalContext implements TransactionalContext { private final GraphDatabaseQueryService graph; - private final Guard guard; private final ThreadToStatementContextBridge txBridge; private final PropertyContainerLocker locker; @@ -66,17 +64,15 @@ public class Neo4jTransactionalContext implements TransactionalContext public Neo4jTransactionalContext( GraphDatabaseQueryService graph, - Guard guard, ThreadToStatementContextBridge txBridge, PropertyContainerLocker locker, InternalTransaction initialTransaction, - Statement intitialStatement, + Statement initialStatement, ExecutingQuery executingQuery, Kernel kernel ) { this.graph = graph; - this.guard = guard; this.txBridge = txBridge; this.locker = locker; this.transactionType = initialTransaction.transactionType(); @@ -85,7 +81,7 @@ public Neo4jTransactionalContext( this.transaction = initialTransaction; this.kernelTransaction = txBridge.getKernelTransactionBoundToThisThread( true ); - this.statement = intitialStatement; + this.statement = initialStatement; this.kernel = kernel; } @@ -243,13 +239,6 @@ public TransactionalContext getOrBeginNewIfClosed() return this; } - public TransactionalContext beginInNewThread() - { - InternalTransaction newTx = graph.beginTransaction( transactionType, securityContext ); - return new Neo4jTransactionalContext( graph, guard, txBridge, locker, newTx, txBridge.get(), - executingQuery, kernel ); - } - private void checkNotTerminated() { InternalTransaction currentTransaction = transaction; @@ -283,7 +272,7 @@ public Statement statement() @Override public void check() { - guard.check( kernelTransaction() ); + kernelTransaction().assertOpen(); } @Override @@ -332,13 +321,12 @@ private void collectTransactionExecutionStatistic() } public Neo4jTransactionalContext copyFrom( GraphDatabaseQueryService graph, - Guard guard, ThreadToStatementContextBridge txBridge, PropertyContainerLocker locker, InternalTransaction initialTransaction, Statement initialStatement, ExecutingQuery executingQuery ) { - return new Neo4jTransactionalContext( graph, guard, txBridge, locker, initialTransaction, + return new Neo4jTransactionalContext( graph, txBridge, locker, initialTransaction, initialStatement, executingQuery, kernel ); } diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/query/Neo4jTransactionalContextFactory.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/query/Neo4jTransactionalContextFactory.java index b0558ab579862..db0dd43719845 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/query/Neo4jTransactionalContextFactory.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/query/Neo4jTransactionalContextFactory.java @@ -26,7 +26,6 @@ import org.neo4j.kernel.GraphDatabaseQueryService; import org.neo4j.kernel.api.Statement; import org.neo4j.kernel.api.query.ExecutingQuery; -import org.neo4j.kernel.guard.Guard; import org.neo4j.kernel.impl.core.ThreadToStatementContextBridge; import org.neo4j.kernel.impl.coreapi.InternalTransaction; import org.neo4j.kernel.impl.coreapi.PropertyContainerLocker; @@ -43,23 +42,13 @@ public class Neo4jTransactionalContextFactory implements TransactionalContextFac public static TransactionalContextFactory create( GraphDatabaseFacade.SPI spi, - Guard guard, ThreadToStatementContextBridge txBridge, PropertyContainerLocker locker ) { Supplier queryService = lazySingleton( spi::queryService ); Supplier kernel = lazySingleton( spi::kernel ); - Neo4jTransactionalContext.Creator contextCreator = - ( tx, initialStatement, executingQuery ) -> new Neo4jTransactionalContext( queryService.get(), - - guard, - txBridge, - locker, - tx, - initialStatement, - executingQuery, - kernel.get() - ); + Neo4jTransactionalContext.Creator contextCreator = ( tx, initialStatement, executingQuery ) -> + new Neo4jTransactionalContext( queryService.get(), txBridge, locker, tx, initialStatement, executingQuery, kernel.get() ); return new Neo4jTransactionalContextFactory( txBridge, contextCreator ); } @@ -72,12 +61,10 @@ public static TransactionalContextFactory create( DependencyResolver resolver = queryService.getDependencyResolver(); ThreadToStatementContextBridge txBridge = resolver.resolveDependency( ThreadToStatementContextBridge.class ); Kernel kernel = resolver.resolveDependency( Kernel.class ); - Guard guard = resolver.resolveDependency( Guard.class ); Neo4jTransactionalContext.Creator contextCreator = ( tx, initialStatement, executingQuery ) -> new Neo4jTransactionalContext( queryService, - guard, txBridge, locker, tx, diff --git a/community/kernel/src/test/java/org/neo4j/kernel/guard/TerminationGuardTest.java b/community/kernel/src/test/java/org/neo4j/kernel/guard/TerminationGuardTest.java deleted file mode 100644 index 03bce377fd93a..0000000000000 --- a/community/kernel/src/test/java/org/neo4j/kernel/guard/TerminationGuardTest.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * 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 . - */ -package org.neo4j.kernel.guard; - -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.mockito.Answers; - -import org.neo4j.graphdb.TransactionTerminatedException; -import org.neo4j.kernel.api.KernelTransaction; -import org.neo4j.kernel.api.exceptions.Status; -import org.neo4j.kernel.impl.api.KernelStatement; -import org.neo4j.kernel.impl.api.KernelTransactionImplementation; -import org.neo4j.kernel.impl.api.KernelTransactionTestBase; -import org.neo4j.kernel.impl.locking.StatementLocks; - -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; -import static org.neo4j.internal.kernel.api.security.SecurityContext.AUTH_DISABLED; - -public class TerminationGuardTest extends KernelTransactionTestBase -{ - - @Rule - public ExpectedException expectedException = ExpectedException.none(); - - @Test - public void allowToProceedWhenTransactionIsNotTerminated() - { - TerminationGuard terminationGuard = buildGuard(); - - KernelTransactionImplementation kernelTransaction = getKernelTransaction(); - terminationGuard.check( kernelTransaction ); - } - - @Test - public void throwExceptionWhenCheckTerminatedTransaction() - { - TerminationGuard terminationGuard = buildGuard(); - - KernelTransactionImplementation kernelTransaction = getKernelTransaction(); - kernelTransaction.markForTermination( Status.Transaction.Terminated ); - - expectedException.expect( TransactionTerminatedException.class ); - - terminationGuard.check( kernelTransaction ); - } - - @Test - public void throwExceptionWhenCheckTerminatedStatement() - { - TerminationGuard terminationGuard = buildGuard(); - - KernelTransactionImplementation kernelTransaction = getKernelTransaction(); - try ( KernelStatement kernelStatement = kernelTransaction.acquireStatement() ) - { - kernelTransaction.markForTermination( Status.Transaction.Terminated ); - expectedException.expect( TransactionTerminatedException.class ); - - terminationGuard.check( kernelTransaction ); - } - } - - private KernelTransactionImplementation getKernelTransaction() - { - KernelTransactionImplementation transaction = newNotInitializedTransaction(); - StatementLocks statementLocks = mock( StatementLocks.class, Answers.RETURNS_DEEP_STUBS ); - when( statementLocks.pessimistic().getLockSessionId() ).thenReturn( 1 ); - transaction.initialize( 1L, 2L, statementLocks, KernelTransaction.Type.implicit, - AUTH_DISABLED, 1L, 1L ); - return transaction; - } - - private TerminationGuard buildGuard() - { - return new TerminationGuard(); - } -} diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/factory/GraphDatabaseFacadeTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/factory/GraphDatabaseFacadeTest.java index 8407af0f47f18..7157ae393f75c 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/factory/GraphDatabaseFacadeTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/factory/GraphDatabaseFacadeTest.java @@ -34,7 +34,6 @@ import org.neo4j.kernel.api.KernelTransaction; import org.neo4j.kernel.api.Statement; import org.neo4j.kernel.configuration.Config; -import org.neo4j.kernel.guard.Guard; import org.neo4j.kernel.impl.core.RelationshipTypeTokenHolder; import org.neo4j.kernel.impl.core.ThreadToStatementContextBridge; import org.neo4j.kernel.impl.coreapi.InternalTransaction; @@ -68,13 +67,11 @@ public void setUp() when( spi.queryService() ).thenReturn( queryService ); when( spi.resolver() ).thenReturn( resolver ); when( resolver.resolveDependency( ThreadToStatementContextBridge.class ) ).thenReturn( contextBridge ); - Guard guard = mock( Guard.class ); - when( resolver.resolveDependency( Guard.class ) ).thenReturn( guard ); when( contextBridge.get() ).thenReturn( statement ); Config config = Config.defaults(); when( resolver.resolveDependency( Config.class ) ).thenReturn( config ); - graphDatabaseFacade.init( editionModule, spi, guard, contextBridge, config, mock( RelationshipTypeTokenHolder.class ) ); + graphDatabaseFacade.init( editionModule, spi, contextBridge, config, mock( RelationshipTypeTokenHolder.class ) ); } @Test diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/query/Neo4jTransactionalContextTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/query/Neo4jTransactionalContextTest.java index 6e4f03ce56dd2..5fce90d4147fa 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/query/Neo4jTransactionalContextTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/query/Neo4jTransactionalContextTest.java @@ -39,7 +39,6 @@ import org.neo4j.kernel.api.Statement; import org.neo4j.kernel.api.exceptions.Status; import org.neo4j.kernel.api.query.ExecutingQuery; -import org.neo4j.kernel.guard.Guard; import org.neo4j.kernel.impl.api.KernelStatement; import org.neo4j.kernel.impl.core.ThreadToStatementContextBridge; import org.neo4j.kernel.impl.coreapi.InternalTransaction; @@ -64,7 +63,6 @@ public class Neo4jTransactionalContextTest { private GraphDatabaseQueryService queryService; - private Guard guard; private KernelStatement initialStatement; private ThreadToStatementContextBridge txBridge; private ConfiguredExecutionStatistics statistics; @@ -85,21 +83,11 @@ public void checkKernelStatementOnCheck() when( txBridge.getKernelTransactionBoundToThisThread( true ) ).thenReturn( kernelTransaction ); Neo4jTransactionalContext transactionalContext = - new Neo4jTransactionalContext( - null, - guard, - txBridge - , - null, - initialTransaction, - initialStatement, - null, - kernel - ); + new Neo4jTransactionalContext( null, txBridge, null, initialTransaction, initialStatement, null, kernel ); transactionalContext.check(); - verify( guard ).check( kernelTransaction ); + verify( kernelTransaction ).assertOpen(); } @SuppressWarnings( "ConstantConditions" ) @@ -136,15 +124,8 @@ public void neverStopsExecutingQueryDuringCommitAndRestartTx() when( secondStatement.queryRegistration() ).thenReturn( secondQueryRegistry ); Kernel kernel = mock( Kernel.class ); - Neo4jTransactionalContext context = new Neo4jTransactionalContext( queryService, - guard, - txBridge, - locker, - initialTransaction, - initialStatement, - executingQuery, - kernel - ); + Neo4jTransactionalContext context = + new Neo4jTransactionalContext( queryService, txBridge, locker, initialTransaction, initialStatement, executingQuery, kernel ); // When context.commitAndRestartTx(); @@ -221,16 +202,8 @@ public void rollsBackNewlyCreatedTransactionIfTerminationDetectedOnCloseDuringPe when( secondStatement.queryRegistration() ).thenReturn( secondQueryRegistry ); Kernel kernel = mock( Kernel.class ); - Neo4jTransactionalContext context = new Neo4jTransactionalContext( - queryService, - guard, - txBridge, - locker, - initialTransaction, - initialStatement, - executingQuery, - kernel - ); + Neo4jTransactionalContext context = + new Neo4jTransactionalContext( queryService, txBridge, locker, initialTransaction, initialStatement, executingQuery, kernel ); // When try @@ -286,7 +259,7 @@ public void accumulateExecutionStatisticOverCommitAndRestart() when( initialTransaction.terminationReason() ).thenReturn( Optional.empty() ); Kernel kernel = mock( Kernel.class ); Neo4jTransactionalContext transactionalContext = new Neo4jTransactionalContext( queryService, - guard, txBridge, null, initialTransaction, initialStatement, null, kernel ); + txBridge, null, initialTransaction, initialStatement, null, kernel ); statistics.setFaults( 2 ); statistics.setHits( 5 ); @@ -461,7 +434,6 @@ private void setUpMocks() queryService = mock( GraphDatabaseQueryService.class ); DependencyResolver resolver = mock( DependencyResolver.class ); txBridge = mock( ThreadToStatementContextBridge.class ); - guard = mock( Guard.class ); initialStatement = mock( KernelStatement.class ); statistics = new ConfiguredExecutionStatistics(); @@ -472,7 +444,6 @@ private void setUpMocks() when( initialStatement.queryRegistration() ).thenReturn( queryRegistryOperations ); when( queryService.getDependencyResolver() ).thenReturn( resolver ); when( resolver.resolveDependency( ThreadToStatementContextBridge.class ) ).thenReturn( txBridge ); - when( resolver.resolveDependency( Guard.class ) ).thenReturn( guard ); when( queryService.beginTransaction( any(), any() ) ).thenReturn( internalTransaction ); KernelTransaction mockTransaction = mockTransaction( initialStatement ); @@ -482,8 +453,7 @@ private void setUpMocks() private Neo4jTransactionalContext newContext( InternalTransaction initialTx ) { - return new Neo4jTransactionalContext( queryService, guard, - txBridge, new PropertyContainerLocker(), initialTx, initialStatement, null, null ); + return new Neo4jTransactionalContext( queryService, txBridge, new PropertyContainerLocker(), initialTx, initialStatement, null, null ); } private KernelTransaction mockTransaction( Statement statement )