Skip to content

Commit 3c3a50b

Browse files
authored
Merge pull request #11255 from lassewesth/rcicleanup
cleaning up around request correlation id
2 parents c1de671 + 5596997 commit 3c3a50b

File tree

4 files changed

+13
-25
lines changed

4 files changed

+13
-25
lines changed

neo4j-integration-tools/src/main/java/org/neo4j/gds/integration/Neo4jPoweredRequestCorrelationId.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ private Neo4jPoweredRequestCorrelationId(String id) {
3333
this.id = id;
3434
}
3535

36-
public static Neo4jPoweredRequestCorrelationId create(long transactionId) {
37-
return new Neo4jPoweredRequestCorrelationId(String.valueOf(transactionId));
36+
public static Neo4jPoweredRequestCorrelationId create(long id) {
37+
return new Neo4jPoweredRequestCorrelationId("gid-n4j-" + id);
3838
}
3939

4040
@Override

procedures/facade/src/main/java/org/neo4j/gds/procedures/KernelTransactionAccessor.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,8 @@
3030
public class KernelTransactionAccessor {
3131
public KernelTransaction getKernelTransaction(Context context) {
3232
try {
33-
// this is not opening something new that we should close
34-
// it only fetches the current transaction
35-
// compare to what Neo4j does in: https://github.com/neo-technology/neo4j/blame/5.7.0/public/community/neo4j/src/main/java/org/neo4j/graphdb/facade/DatabaseManagementServiceFactory.java#L368-L369
36-
// newer Neo4j versions offer a more direct method: https://github.com/neo-technology/neo4j/blob/e6a228f60efac4fd2584f5ec00de0207aad944ff/public/community/neo4j/src/main/java/org/neo4j/graphdb/facade/DatabaseManagementServiceFactory.java#L356
37-
// we should make sure we do this in a compatible way
38-
return context.internalTransaction().kernelTransaction();
33+
return context.kernelTransaction();
3934
} catch (ProcedureException e) {
40-
// Neo4j itself throws a different exception here; see https://github.com/neo-technology/neo4j/blob/340b40bb956d077b3127c8ba8eb33f2d288bc844/public/community/procedure/src/main/java/org/neo4j/procedure/impl/FieldSetter.java#L44-L49
4135
throw new RuntimeException(e);
4236
}
4337
}

procedures/facade/src/main/java/org/neo4j/gds/procedures/RequestCorrelationIdAccessor.java

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,24 +21,17 @@
2121

2222
import org.neo4j.gds.core.RequestCorrelationId;
2323
import org.neo4j.gds.integration.Neo4jPoweredRequestCorrelationId;
24-
import org.neo4j.internal.kernel.api.exceptions.ProcedureException;
25-
import org.neo4j.kernel.api.procedure.Context;
24+
import org.neo4j.kernel.api.KernelTransaction;
2625

2726
public class RequestCorrelationIdAccessor {
2827
/**
2928
* We use the transaction sequence number not because we particularly want to, but because Neo4j has limitations.
30-
* The transaction id seems to not be available; and they do not offer a first class request id concept.
29+
* The transaction id is not available, if you try to use it, you get this error:
30+
* "Transaction id is not assigned yet. It will be assigned during transaction commit";
31+
* and they do not offer a first class request id concept.
3132
* Here is to them improving that in future.
3233
*/
33-
public RequestCorrelationId getRequestCorrelationId(Context context) {
34-
try {
35-
@SuppressWarnings("resource")
36-
var transactionSequenceNumber = context.kernelTransaction().getTransactionSequenceNumber();
37-
38-
return Neo4jPoweredRequestCorrelationId.create(transactionSequenceNumber);
39-
} catch (ProcedureException e) {
40-
// this must be a programmer error
41-
throw new IllegalStateException("Unable to construct GDS", e);
42-
}
34+
public RequestCorrelationId getRequestCorrelationId(KernelTransaction kernelTransaction) {
35+
return Neo4jPoweredRequestCorrelationId.create(kernelTransaction.getTransactionSequenceNumber());
4336
}
4437
}

procedures/integration/src/main/java/org/neo4j/gds/procedures/integration/GraphDataScienceProceduresProvider.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
import org.neo4j.gds.core.utils.progress.TaskStoreService;
3838
import org.neo4j.gds.core.write.ExporterContext;
3939
import org.neo4j.gds.executor.MemoryEstimationContext;
40-
import org.neo4j.gds.integration.Neo4jPoweredRequestCorrelationId;
4140
import org.neo4j.gds.mem.MemoryTracker;
4241
import org.neo4j.gds.metrics.Metrics;
4342
import org.neo4j.gds.procedures.DatabaseIdAccessor;
@@ -48,6 +47,7 @@
4847
import org.neo4j.gds.procedures.LocalGraphDataScienceProcedures;
4948
import org.neo4j.gds.procedures.ProcedureCallContextReturnColumns;
5049
import org.neo4j.gds.procedures.ProcedureTransactionAccessor;
50+
import org.neo4j.gds.procedures.RequestCorrelationIdAccessor;
5151
import org.neo4j.gds.procedures.TaskRegistryFactoryService;
5252
import org.neo4j.gds.procedures.UserAccessor;
5353
import org.neo4j.gds.procedures.UserLogServices;
@@ -69,6 +69,7 @@ public class GraphDataScienceProceduresProvider implements ThrowingFunction<Cont
6969
private final DatabaseIdAccessor databaseIdAccessor = new DatabaseIdAccessor();
7070
private final KernelTransactionAccessor kernelTransactionAccessor = new KernelTransactionAccessor();
7171
private final ProcedureTransactionAccessor procedureTransactionAccessor = new ProcedureTransactionAccessor();
72+
private final RequestCorrelationIdAccessor requestCorrelationIdAccessor = new RequestCorrelationIdAccessor();
7273
private final UserAccessor userAccessor;
7374

7475
private final GdsLoggers loggers;
@@ -156,9 +157,9 @@ public GraphDataScienceProcedures apply(Context context) throws ProcedureExcepti
156157
var procedureCallContext = context.procedureCallContext();
157158
var procedureTransaction = procedureTransactionAccessor.getProcedureTransaction(context);
158159

159-
var correlationId = Neo4jPoweredRequestCorrelationId.create(kernelTransaction.getTransactionSequenceNumber());
160160
var databaseId = databaseIdAccessor.getDatabaseId(graphDatabaseService);
161161
var procedureReturnColumns = new ProcedureCallContextReturnColumns(procedureCallContext);
162+
var requestCorrelationId = requestCorrelationIdAccessor.getRequestCorrelationId(kernelTransaction);
162163
var terminationMonitor = new TransactionTerminationMonitor(kernelTransaction);
163164
var terminationFlag = TerminationFlag.wrap(terminationMonitor);
164165
var user = userAccessor.getUser(context.securityContext());
@@ -181,7 +182,7 @@ public GraphDataScienceProcedures apply(Context context) throws ProcedureExcepti
181182
);
182183

183184
var requestScopedDependencies = RequestScopedDependencies.builder()
184-
.correlationId(correlationId)
185+
.correlationId(requestCorrelationId)
185186
.databaseId(databaseId)
186187
.graphLoaderContext(graphLoaderContext)
187188
.taskRegistryFactory(taskRegistryFactory)

0 commit comments

Comments
 (0)