From a8041b54fcddd415e7a9be5b1a38f4f449ec443b Mon Sep 17 00:00:00 2001 From: fickludd Date: Thu, 15 Feb 2018 22:32:58 +0100 Subject: [PATCH] Migrate some instances of TokenNameLookup --- .../spi/v2_3/TransactionBoundQueryContext.scala | 2 +- .../spi/v3_1/TransactionBoundQueryContext.scala | 2 +- .../spi/v3_1/TransactionalContextWrapper.scala | 4 +++- .../TransactionBoundQueryContext.scala | 2 +- .../org/neo4j/internal/kernel/api/TokenRead.java | 16 ++++++++-------- .../kernel/builtinprocs/BuiltInProcedures.java | 6 +++--- .../kernel/builtinprocs/SchemaProcedure.java | 9 +++++---- .../builtinprocs/BuiltInProceduresTest.java | 9 ++++++--- .../integrationtest/KernelIntegrationTest.java | 5 +++++ .../MultiIndexPopulationConcurrentUpdatesIT.java | 8 +++++--- .../UniquenessConstraintCreationIT.java | 13 ++++++++----- 11 files changed, 46 insertions(+), 30 deletions(-) diff --git a/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/spi/v2_3/TransactionBoundQueryContext.scala b/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/spi/v2_3/TransactionBoundQueryContext.scala index cfcad2b880110..0cca68087908f 100644 --- a/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/spi/v2_3/TransactionBoundQueryContext.scala +++ b/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/spi/v2_3/TransactionBoundQueryContext.scala @@ -521,7 +521,7 @@ final class TransactionBoundQueryContext(tc: TransactionalContextWrapper) def relationshipEndNode(rel: Relationship) = rel.getEndNode - private val tokenNameLookup = new StatementTokenNameLookup(tc.statement.readOperations()) + private val tokenNameLookup = new SilentTokenNameLookup(tc.kernelTransaction.tokenRead()) override def commitAndRestartTx() { tc.commitAndRestartTx() } diff --git a/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/spi/v3_1/TransactionBoundQueryContext.scala b/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/spi/v3_1/TransactionBoundQueryContext.scala index 8784c0538a2b0..49223803ba796 100644 --- a/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/spi/v3_1/TransactionBoundQueryContext.scala +++ b/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/spi/v3_1/TransactionBoundQueryContext.scala @@ -531,7 +531,7 @@ final class TransactionBoundQueryContext(txContext: TransactionalContextWrapper) override def relationshipEndNode(rel: Relationship) = rel.getEndNode - private lazy val tokenNameLookup = new StatementTokenNameLookup(txContext.statement.readOperations()) + private lazy val tokenNameLookup = new SilentTokenNameLookup(txContext.kernelTransaction.tokenRead()) // Legacy dependency between kernel and compiler override def variableLengthPathExpand(node: PatternNode, diff --git a/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/spi/v3_1/TransactionalContextWrapper.scala b/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/spi/v3_1/TransactionalContextWrapper.scala index 3491feccb13d6..bc26b3b7215a9 100644 --- a/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/spi/v3_1/TransactionalContextWrapper.scala +++ b/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/spi/v3_1/TransactionalContextWrapper.scala @@ -25,7 +25,7 @@ import org.neo4j.kernel.GraphDatabaseQueryService import org.neo4j.kernel.api.KernelTransaction.Revertable import org.neo4j.kernel.api.dbms.DbmsOperations import org.neo4j.kernel.api.txstate.TxStateHolder -import org.neo4j.kernel.api.{ReadOperations, ResourceTracker, Statement} +import org.neo4j.kernel.api.{KernelTransaction, ReadOperations, ResourceTracker, Statement} import org.neo4j.kernel.impl.query.TransactionalContext case class TransactionalContextWrapper(tc: TransactionalContext) extends QueryTransactionalContext { @@ -42,6 +42,8 @@ case class TransactionalContextWrapper(tc: TransactionalContext) extends QueryTr def statement: Statement = tc.statement() + def kernelTransaction: KernelTransaction = tc.kernelTransaction() + def stateView: TxStateHolder = tc.stateView() override def readOperations: ReadOperations = tc.readOperations() 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 2adf6d0b8dedd..b33f911637478 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 @@ -789,7 +789,7 @@ final class TransactionBoundQueryContext(val transactionalContext: Transactional override def edgeGetEndNode(edge: RelationshipValue) = edge.endNode() - private lazy val tokenNameLookup = new StatementTokenNameLookup(transactionalContext.statement.readOperations()) + private lazy val tokenNameLookup = new SilentTokenNameLookup(transactionalContext.kernelTransaction.tokenRead()) // Legacy dependency between kernel and compiler override def variableLengthPathExpand(realNode: Long, diff --git a/community/kernel-api/src/main/java/org/neo4j/internal/kernel/api/TokenRead.java b/community/kernel-api/src/main/java/org/neo4j/internal/kernel/api/TokenRead.java index bf99f0c003954..a92502cebb1a8 100644 --- a/community/kernel-api/src/main/java/org/neo4j/internal/kernel/api/TokenRead.java +++ b/community/kernel-api/src/main/java/org/neo4j/internal/kernel/api/TokenRead.java @@ -30,6 +30,14 @@ public interface TokenRead */ int NO_TOKEN = -1; + /** + * Return the id of the provided label, or NO_TOKEN if the label isn't known to the graph. + * + * @param name The label name. + * @return the label id, or NO_TOKEN + */ + int nodeLabel( String name ); + /** * Returns the name of a label given its label id * @@ -39,14 +47,6 @@ public interface TokenRead */ String nodeLabelName( int labelId ) throws LabelNotFoundKernelException; - /** - * Return the id of the provided label, or NO_TOKEN if the label isn't known to the graph. - * - * @param name The label name. - * @return the label id, or NO_TOKEN - */ - int nodeLabel( String name ); - /** * Return the id of the provided relationship type, or NO_TOKEN if the type isn't known to the graph. * diff --git a/community/kernel/src/main/java/org/neo4j/kernel/builtinprocs/BuiltInProcedures.java b/community/kernel/src/main/java/org/neo4j/kernel/builtinprocs/BuiltInProcedures.java index 1192d52568239..65998a0a1b118 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/builtinprocs/BuiltInProcedures.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/builtinprocs/BuiltInProcedures.java @@ -46,8 +46,8 @@ import org.neo4j.kernel.api.ExplicitIndexHits; import org.neo4j.kernel.api.KernelTransaction; import org.neo4j.kernel.api.ReadOperations; +import org.neo4j.kernel.api.SilentTokenNameLookup; import org.neo4j.kernel.api.Statement; -import org.neo4j.kernel.api.StatementTokenNameLookup; import org.neo4j.kernel.api.exceptions.ProcedureException; import org.neo4j.kernel.api.exceptions.Status; import org.neo4j.kernel.api.exceptions.index.IndexNotFoundKernelException; @@ -144,7 +144,7 @@ public Stream listIndexes() throws ProcedureException try ( Statement statement = tx.acquireStatement() ) { ReadOperations operations = statement.readOperations(); - TokenNameLookup tokens = new StatementTokenNameLookup( operations ); + TokenNameLookup tokens = new SilentTokenNameLookup( tx.tokenRead() ); List indexes = asList( operations.indexesGetAll() ); indexes.sort( Comparator.comparing( a -> a.userDescription( tokens ) ) ); @@ -233,7 +233,7 @@ public Stream listConstraints() try ( Statement statement = tx.acquireStatement() ) { ReadOperations operations = statement.readOperations(); - TokenNameLookup tokens = new StatementTokenNameLookup( operations ); + TokenNameLookup tokens = new SilentTokenNameLookup( tx.tokenRead() ); return asList( operations.constraintsGetAll() ) .stream() diff --git a/community/kernel/src/main/java/org/neo4j/kernel/builtinprocs/SchemaProcedure.java b/community/kernel/src/main/java/org/neo4j/kernel/builtinprocs/SchemaProcedure.java index cc849e4900957..aca77c99e6f85 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/builtinprocs/SchemaProcedure.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/builtinprocs/SchemaProcedure.java @@ -38,11 +38,12 @@ import org.neo4j.graphdb.RelationshipType; import org.neo4j.graphdb.ResourceIterator; import org.neo4j.graphdb.Transaction; +import org.neo4j.internal.kernel.api.TokenNameLookup; import org.neo4j.internal.kernel.api.schema.constraints.ConstraintDescriptor; import org.neo4j.kernel.api.KernelTransaction; import org.neo4j.kernel.api.ReadOperations; +import org.neo4j.kernel.api.SilentTokenNameLookup; import org.neo4j.kernel.api.Statement; -import org.neo4j.kernel.api.StatementTokenNameLookup; import org.neo4j.kernel.api.schema.index.IndexDescriptor; import org.neo4j.kernel.impl.coreapi.schema.PropertyNameUtils; import org.neo4j.kernel.internal.GraphDatabaseAPI; @@ -69,7 +70,7 @@ public GraphResult buildSchemaGraph() try ( Statement statement = kernelTransaction.acquireStatement() ) { ReadOperations readOperations = statement.readOperations(); - StatementTokenNameLookup statementTokenNameLookup = new StatementTokenNameLookup( readOperations ); + TokenNameLookup tokenNameLookup = new SilentTokenNameLookup( kernelTransaction.tokenRead() ); try ( Transaction transaction = graphDatabaseAPI.beginTx() ) { @@ -90,7 +91,7 @@ public GraphResult buildSchemaGraph() if ( index.type() == GENERAL ) { String[] propertyNames = PropertyNameUtils.getPropertyKeys( - statementTokenNameLookup, index.schema().getPropertyIds() ); + tokenNameLookup, index.schema().getPropertyIds() ); indexes.add( String.join( ",", propertyNames ) ); } } @@ -102,7 +103,7 @@ public GraphResult buildSchemaGraph() while ( nodePropertyConstraintIterator.hasNext() ) { ConstraintDescriptor constraint = nodePropertyConstraintIterator.next(); - constraints.add( constraint.prettyPrint( statementTokenNameLookup ) ); + constraints.add( constraint.prettyPrint( tokenNameLookup ) ); } properties.put( "constraints", constraints ); diff --git a/community/kernel/src/test/java/org/neo4j/kernel/builtinprocs/BuiltInProceduresTest.java b/community/kernel/src/test/java/org/neo4j/kernel/builtinprocs/BuiltInProceduresTest.java index da9f7923cc2a5..ae18d106931a0 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/builtinprocs/BuiltInProceduresTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/builtinprocs/BuiltInProceduresTest.java @@ -38,6 +38,7 @@ import org.neo4j.helpers.collection.Iterators; import org.neo4j.helpers.collection.MapUtil; import org.neo4j.internal.kernel.api.InternalIndexState; +import org.neo4j.internal.kernel.api.TokenRead; import org.neo4j.internal.kernel.api.security.SecurityContext; import org.neo4j.kernel.api.KernelTransaction; import org.neo4j.kernel.api.ReadOperations; @@ -88,6 +89,7 @@ public class BuiltInProceduresTest private final Map relTypes = new HashMap<>(); private final ReadOperations read = mock( ReadOperations.class ); + private final TokenRead tokens = mock( TokenRead.class ); private final Statement statement = mock( Statement.class ); private final KernelTransaction tx = mock( KernelTransaction.class ); private final DependencyResolver resolver = mock( DependencyResolver.class ); @@ -482,6 +484,7 @@ public void setup() throws Exception procs.registerProcedure( BuiltInDbmsProcedures.class ); when( tx.acquireStatement() ).thenReturn( statement ); + when( tx.tokenRead() ).thenReturn( tokens ); when( statement.readOperations() ).thenReturn( read ); when( read.propertyKeyGetAllTokens() ).thenAnswer( asTokens( propKeys ) ); @@ -492,10 +495,10 @@ public void setup() throws Exception when( read.constraintsGetAll() ).thenAnswer( i -> constraints.iterator() ); when( read.proceduresGetAll() ).thenReturn( procs.getAllProcedures() ); - when( read.propertyKeyGetName( anyInt() ) ) + when( tokens.propertyKeyName( anyInt() ) ) .thenAnswer( invocation -> propKeys.get( invocation.getArgument( 0 ) ) ); - when( read.labelGetName( anyInt() ) ).thenAnswer( invocation -> labels.get( invocation.getArgument( 0 ) ) ); - when( read.relationshipTypeGetName( anyInt() ) ) + when( tokens.nodeLabelName( anyInt() ) ).thenAnswer( invocation -> labels.get( invocation.getArgument( 0 ) ) ); + when( tokens.relationshipTypeName( anyInt() ) ) .thenAnswer( invocation -> relTypes.get( invocation.getArgument( 0 ) ) ); // Make it appear that labels are in use diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/KernelIntegrationTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/KernelIntegrationTest.java index 1777c064e07bd..b85979241c23d 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/KernelIntegrationTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/KernelIntegrationTest.java @@ -107,6 +107,11 @@ protected ReadOperations readOperationsInNewTransaction() throws TransactionFail return statement.readOperations(); } + protected KernelTransaction newTransaction() throws TransactionFailureException + { + return kernel.newTransaction( KernelTransaction.Type.implicit, AnonymousContext.read() ); + } + protected DbmsOperations dbmsOperations() { return dbmsOperations; diff --git a/community/neo4j/src/test/java/schema/MultiIndexPopulationConcurrentUpdatesIT.java b/community/neo4j/src/test/java/schema/MultiIndexPopulationConcurrentUpdatesIT.java index d2ee6e4f81a6d..f228529d8d8dd 100644 --- a/community/neo4j/src/test/java/schema/MultiIndexPopulationConcurrentUpdatesIT.java +++ b/community/neo4j/src/test/java/schema/MultiIndexPopulationConcurrentUpdatesIT.java @@ -43,10 +43,12 @@ import org.neo4j.helpers.collection.Iterators; import org.neo4j.helpers.collection.Visitor; import org.neo4j.internal.kernel.api.InternalIndexState; +import org.neo4j.internal.kernel.api.TokenNameLookup; import org.neo4j.internal.kernel.api.schema.LabelSchemaDescriptor; +import org.neo4j.kernel.api.KernelTransaction; import org.neo4j.kernel.api.ReadOperations; +import org.neo4j.kernel.api.SilentTokenNameLookup; import org.neo4j.kernel.api.Statement; -import org.neo4j.kernel.api.StatementTokenNameLookup; import org.neo4j.kernel.api.exceptions.index.IndexActivationFailedKernelException; import org.neo4j.kernel.api.exceptions.index.IndexEntryConflictException; import org.neo4j.kernel.api.exceptions.index.IndexNotFoundKernelException; @@ -267,13 +269,13 @@ private void launchCustomIndexPopulation( Map labelNameIdMap, in ThreadToStatementContextBridge transactionStatementContextBridge = getTransactionStatementContextBridge(); try ( Transaction transaction = embeddedDatabase.beginTx(); - Statement statement = transactionStatementContextBridge.get() ) + KernelTransaction ktx = transactionStatementContextBridge.getKernelTransactionBoundToThisThread( true ) ) { DynamicIndexStoreView storeView = dynamicIndexStoreViewWrapper( updates, neoStores, labelScanStore ); SchemaIndexProviderMap providerMap = getSchemaIndexProvider(); JobScheduler scheduler = getJobScheduler(); - StatementTokenNameLookup tokenNameLookup = new StatementTokenNameLookup( statement.readOperations() ); + TokenNameLookup tokenNameLookup = new SilentTokenNameLookup( ktx.tokenRead() ); indexService = IndexingServiceFactory.createIndexingService( Config.defaults(), scheduler, providerMap, storeView, tokenNameLookup, getIndexRules( neoStores ), diff --git a/enterprise/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/UniquenessConstraintCreationIT.java b/enterprise/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/UniquenessConstraintCreationIT.java index 075152a7b72f2..eb92a4d83cad5 100644 --- a/enterprise/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/UniquenessConstraintCreationIT.java +++ b/enterprise/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/UniquenessConstraintCreationIT.java @@ -27,15 +27,17 @@ import org.neo4j.graphdb.GraphDatabaseService; import org.neo4j.graphdb.Node; import org.neo4j.graphdb.ResourceIterator; +import org.neo4j.internal.kernel.api.TokenNameLookup; import org.neo4j.internal.kernel.api.exceptions.KernelException; import org.neo4j.internal.kernel.api.exceptions.schema.ConstraintValidationException; import org.neo4j.internal.kernel.api.schema.LabelSchemaDescriptor; import org.neo4j.internal.kernel.api.schema.constraints.ConstraintDescriptor; import org.neo4j.internal.kernel.api.security.LoginContext; +import org.neo4j.kernel.api.KernelTransaction; import org.neo4j.kernel.api.ReadOperations; import org.neo4j.kernel.api.SchemaWriteOperations; +import org.neo4j.kernel.api.SilentTokenNameLookup; import org.neo4j.kernel.api.Statement; -import org.neo4j.kernel.api.StatementTokenNameLookup; import org.neo4j.kernel.api.TokenWriteOperations; import org.neo4j.kernel.api.exceptions.TransactionFailureException; import org.neo4j.kernel.api.exceptions.schema.CreateConstraintFailureException; @@ -285,9 +287,10 @@ public void shouldDropConstraintIndexWhenDroppingConstraint() throws Exception private String userMessage( ConstraintValidationException cause ) throws TransactionFailureException { - StatementTokenNameLookup lookup = new StatementTokenNameLookup( readOperationsInNewTransaction() ); - String actualMessage = cause.getUserMessage( lookup ); - commit(); - return actualMessage; + try ( KernelTransaction tx = newTransaction() ) + { + TokenNameLookup lookup = new SilentTokenNameLookup( tx.tokenRead() ); + return cause.getUserMessage( lookup ); + } } }