Schedule jobs sequentially to avoid DeadlockDetectedException

Hi,

I'm using apoc.periodic.submit to schedule multiple background jobs which create and update many entities, and multiple jobs might access the same node.

I thought jobs scheduled via apoc.periodic.submit will be executed sequentially in order, so that there shouldn't be any lock problems, however I run into a deadlock exception because a node is blocked by another transaction:

2024-09-21 14:42:14.234+0000 ERROR [o.n.k.a.p.GlobalProcedures] Error while executing task 9bdb9599-10f1-41c1-a22b-362fcd3743cf-load-4 because of the following exception (the task will be killed):
java.lang.RuntimeException: org.neo4j.graphdb.QueryExecutionException: ForsetiClient[transactionId=84847, clientId=234] can't acquire ExclusiveLock{owner=ForsetiClient[transactionId=84849, clientId=225]} on NODE(0) because holders of that lock are waiting for ForsetiClient[transactionId=84847, clientId=234].
 Wait list:ExclusiveLock[
Client[84849] waits for [ForsetiClient[transactionId=84847, clientId=234]]]
	at apoc.periodic.PeriodicUtils.lambda$submitProc$7(PeriodicUtils.java:312) ~[apoc.jar:5.17.0]
	at apoc.periodic.PeriodicUtils.lambda$wrapTask$8(PeriodicUtils.java:338) ~[apoc.jar:5.17.0]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) [?:?]
	at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) [?:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
	at java.lang.Thread.run(Thread.java:840) [?:?]
Caused by: org.neo4j.graphdb.QueryExecutionException: ForsetiClient[transactionId=84847, clientId=234] can't acquire ExclusiveLock{owner=ForsetiClient[transactionId=84849, clientId=225]} on NODE(0) because holders of that lock are waiting for ForsetiClient[transactionId=84847, clientId=234].
 Wait list:ExclusiveLock[
Client[84849] waits for [ForsetiClient[transactionId=84847, clientId=234]]]
	at org.neo4j.kernel.impl.query.QueryExecutionKernelException.asUserException(QueryExecutionKernelException.java:32) ~[neo4j-kernel-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.javacompat.ResultSubscriber.converted(ResultSubscriber.java:370) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.javacompat.ResultSubscriber.assertNoErrors(ResultSubscriber.java:357) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.javacompat.ResultSubscriber.init(ResultSubscriber.java:81) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.javacompat.ExecutionEngine.executeQuery(ExecutionEngine.java:112) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.kernel.impl.coreapi.TransactionImpl.execute(TransactionImpl.java:236) ~[neo4j-kernel-5.17.0.jar:5.17.0]
	at org.neo4j.kernel.impl.coreapi.TransactionImpl.execute(TransactionImpl.java:226) ~[neo4j-kernel-5.17.0.jar:5.17.0]
	at org.neo4j.kernel.impl.factory.GraphDatabaseTransactions.executeTransactionally(GraphDatabaseTransactions.java:83) ~[neo4j-kernel-5.17.0.jar:5.17.0]
	at org.neo4j.kernel.impl.factory.GraphDatabaseTransactions.executeTransactionally(GraphDatabaseTransactions.java:69) ~[neo4j-kernel-5.17.0.jar:5.17.0]
	at apoc.periodic.PeriodicUtils.lambda$submitProc$7(PeriodicUtils.java:309) ~[apoc.jar:5.17.0]
	... 7 more
Caused by: org.neo4j.kernel.impl.query.QueryExecutionKernelException: ForsetiClient[transactionId=84847, clientId=234] can't acquire ExclusiveLock{owner=ForsetiClient[transactionId=84849, clientId=225]} on NODE(0) because holders of that lock are waiting for ForsetiClient[transactionId=84847, clientId=234].
 Wait list:ExclusiveLock[
Client[84849] waits for [ForsetiClient[transactionId=84847, clientId=234]]]
	at org.neo4j.cypher.internal.javacompat.ResultSubscriber.converted(ResultSubscriber.java:370) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.javacompat.ResultSubscriber.assertNoErrors(ResultSubscriber.java:357) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.javacompat.ResultSubscriber.init(ResultSubscriber.java:81) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.javacompat.ExecutionEngine.executeQuery(ExecutionEngine.java:112) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.kernel.impl.coreapi.TransactionImpl.execute(TransactionImpl.java:236) ~[neo4j-kernel-5.17.0.jar:5.17.0]
	at org.neo4j.kernel.impl.coreapi.TransactionImpl.execute(TransactionImpl.java:226) ~[neo4j-kernel-5.17.0.jar:5.17.0]
	at org.neo4j.kernel.impl.factory.GraphDatabaseTransactions.executeTransactionally(GraphDatabaseTransactions.java:83) ~[neo4j-kernel-5.17.0.jar:5.17.0]
	at org.neo4j.kernel.impl.factory.GraphDatabaseTransactions.executeTransactionally(GraphDatabaseTransactions.java:69) ~[neo4j-kernel-5.17.0.jar:5.17.0]
	at apoc.periodic.PeriodicUtils.lambda$submitProc$7(PeriodicUtils.java:309) ~[apoc.jar:5.17.0]
	... 7 more
Caused by: org.neo4j.exceptions.CypherExecutionException: ForsetiClient[transactionId=84847, clientId=234] can't acquire ExclusiveLock{owner=ForsetiClient[transactionId=84849, clientId=225]} on NODE(0) because holders of that lock are waiting for ForsetiClient[transactionId=84847, clientId=234].
 Wait list:ExclusiveLock[
Client[84849] waits for [ForsetiClient[transactionId=84847, clientId=234]]]
	at org.neo4j.cypher.internal.planning.ExceptionTranslatingReadQueryContext.callReadWriteProcedure(ExceptionTranslatingQueryContext.scala:305) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.EagerReadWriteCallMode$.callProcedure(ProcedureCallMode.scala:82) ~[neo4j-cypher-runtime-util-5.17.0.jar:5.17.0]
	at org.neo4j.codegen.OperatorTaskPipeline15_82124.compiledOperate(Unknown Source) ~[?:?]
	at org.neo4j.cypher.internal.runtime.pipelined.operators.CompiledTask.operateWithProfile(OperatorCodeGenBaseTemplates.scala:677) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.pipelined.RegularPipelineTask.executeOperators(PipelineTask.scala:130) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.pipelined.RegularPipelineTask.executeWorkUnit(PipelineTask.scala:114) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.pipelined.RegularPipelineTask.executeWorkUnit(PipelineTask.scala:75) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.pipelined.WorkerRunner.executeTask(WorkerRunner.scala:627) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.pipelined.WorkerRunner.workOnQuery(WorkerRunner.scala:451) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.pipelined.WorkerRunner.workOnQuery(WorkerRunner.scala:330) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.pipelined.execution.CallingThreadExecutingQuery.request(CallingThreadExecutingQuery.scala:47) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.PipelinedRuntimeResult.request(PipelinedRuntimeResult.scala:91) ~[neo4j-enterprise-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.result.StandardInternalExecutionResult.request(StandardInternalExecutionResult.scala:103) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.javacompat.ResultSubscriber.doFetchResults(ResultSubscriber.java:329) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.javacompat.ResultSubscriber.materialize(ResultSubscriber.java:92) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.result.StandardInternalExecutionResult.initiate(StandardInternalExecutionResult.scala:65) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.result.ClosingExecutionResult.$anonfun$initiate$1(ClosingExecutionResult.scala:61) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18) ~[scala-library-2.13.11.jar:?]
	at org.neo4j.cypher.internal.result.ClosingExecutionResult.safely(ClosingExecutionResult.scala:106) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.result.ClosingExecutionResult.initiate(ClosingExecutionResult.scala:61) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.result.ClosingExecutionResult$.wrapAndInitiate(ClosingExecutionResult.scala:204) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.CypherCurrentCompiler$CypherExecutableQuery.innerExecute(CypherCurrentCompiler.scala:506) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.CypherCurrentCompiler$CypherExecutableQuery.execute(CypherCurrentCompiler.scala:418) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.ExecutionEngine.doExecute(ExecutionEngine.scala:248) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.ExecutionEngine.$anonfun$executeSubquery$1(ExecutionEngine.scala:185) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.ExecutionEngine.closing(ExecutionEngine.scala:191) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.ExecutionEngine.executeSubquery(ExecutionEngine.scala:171) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.ExecutionEngine.execute(ExecutionEngine.scala:104) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.javacompat.ExecutionEngine.executeQuery(ExecutionEngine.java:126) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.javacompat.ExecutionEngine.executeQuery(ExecutionEngine.java:111) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.kernel.impl.coreapi.TransactionImpl.execute(TransactionImpl.java:236) ~[neo4j-kernel-5.17.0.jar:5.17.0]
	at org.neo4j.kernel.impl.coreapi.TransactionImpl.execute(TransactionImpl.java:226) ~[neo4j-kernel-5.17.0.jar:5.17.0]
	at org.neo4j.kernel.impl.factory.GraphDatabaseTransactions.executeTransactionally(GraphDatabaseTransactions.java:83) ~[neo4j-kernel-5.17.0.jar:5.17.0]
	at org.neo4j.kernel.impl.factory.GraphDatabaseTransactions.executeTransactionally(GraphDatabaseTransactions.java:69) ~[neo4j-kernel-5.17.0.jar:5.17.0]
	at apoc.periodic.PeriodicUtils.lambda$submitProc$7(PeriodicUtils.java:309) ~[apoc.jar:5.17.0]
	... 7 more
Caused by: org.neo4j.internal.kernel.api.exceptions.ProcedureException: ForsetiClient[transactionId=84847, clientId=234] can't acquire ExclusiveLock{owner=ForsetiClient[transactionId=84849, clientId=225]} on NODE(0) because holders of that lock are waiting for ForsetiClient[transactionId=84847, clientId=234].
 Wait list:ExclusiveLock[
Client[84849] waits for [ForsetiClient[transactionId=84847, clientId=234]]]
	at org.neo4j.procedure.impl.ProcedureCompilation.rethrowProcedureException(ProcedureCompilation.java:530) ~[neo4j-procedure-5.17.0.jar:5.17.0]
	at org.neo4j.kernel.impl.proc.GeneratedProcedure_mergeNode744062561221377.apply(Unknown Source) ~[?:?]
	at org.neo4j.procedure.impl.ProcedureRegistry.callProcedure(ProcedureRegistry.java:214) ~[neo4j-procedure-5.17.0.jar:5.17.0]
	at org.neo4j.procedure.impl.ProcedureViewImpl.callProcedure(ProcedureViewImpl.java:150) ~[neo4j-procedure-5.17.0.jar:5.17.0]
	at org.neo4j.kernel.impl.newapi.ProcedureCaller$ForTransactionScope.doCallProcedure(ProcedureCaller.java:281) ~[neo4j-kernel-5.17.0.jar:5.17.0]
	at org.neo4j.kernel.impl.newapi.ProcedureCaller.callProcedure(ProcedureCaller.java:183) ~[neo4j-kernel-5.17.0.jar:5.17.0]
	at org.neo4j.kernel.impl.newapi.AllStoreHolder.procedureCallWrite(AllStoreHolder.java:789) ~[neo4j-kernel-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.interpreted.CallSupport$.$anonfun$callReadWriteProcedure$1(CallSupport.scala:63) ~[neo4j-cypher-interpreted-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.interpreted.CallSupport$.callProcedure(CallSupport.scala:94) ~[neo4j-cypher-interpreted-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.interpreted.CallSupport$.callReadWriteProcedure(CallSupport.scala:63) ~[neo4j-cypher-interpreted-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.interpreted.TransactionBoundReadQueryContext.callReadWriteProcedure(TransactionBoundQueryContext.scala:1657) ~[neo4j-cypher-interpreted-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.planning.ExceptionTranslatingReadQueryContext.callReadWriteProcedure(ExceptionTranslatingQueryContext.scala:305) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.EagerReadWriteCallMode$.callProcedure(ProcedureCallMode.scala:82) ~[neo4j-cypher-runtime-util-5.17.0.jar:5.17.0]
	at org.neo4j.codegen.OperatorTaskPipeline15_82124.compiledOperate(Unknown Source) ~[?:?]
	at org.neo4j.cypher.internal.runtime.pipelined.operators.CompiledTask.operateWithProfile(OperatorCodeGenBaseTemplates.scala:677) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.pipelined.RegularPipelineTask.executeOperators(PipelineTask.scala:130) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.pipelined.RegularPipelineTask.executeWorkUnit(PipelineTask.scala:114) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.pipelined.RegularPipelineTask.executeWorkUnit(PipelineTask.scala:75) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.pipelined.WorkerRunner.executeTask(WorkerRunner.scala:627) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.pipelined.WorkerRunner.workOnQuery(WorkerRunner.scala:451) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.pipelined.WorkerRunner.workOnQuery(WorkerRunner.scala:330) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.pipelined.execution.CallingThreadExecutingQuery.request(CallingThreadExecutingQuery.scala:47) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.PipelinedRuntimeResult.request(PipelinedRuntimeResult.scala:91) ~[neo4j-enterprise-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.result.StandardInternalExecutionResult.request(StandardInternalExecutionResult.scala:103) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.javacompat.ResultSubscriber.doFetchResults(ResultSubscriber.java:329) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.javacompat.ResultSubscriber.materialize(ResultSubscriber.java:92) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.result.StandardInternalExecutionResult.initiate(StandardInternalExecutionResult.scala:65) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.result.ClosingExecutionResult.$anonfun$initiate$1(ClosingExecutionResult.scala:61) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18) ~[scala-library-2.13.11.jar:?]
	at org.neo4j.cypher.internal.result.ClosingExecutionResult.safely(ClosingExecutionResult.scala:106) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.result.ClosingExecutionResult.initiate(ClosingExecutionResult.scala:61) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.result.ClosingExecutionResult$.wrapAndInitiate(ClosingExecutionResult.scala:204) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.CypherCurrentCompiler$CypherExecutableQuery.innerExecute(CypherCurrentCompiler.scala:506) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.CypherCurrentCompiler$CypherExecutableQuery.execute(CypherCurrentCompiler.scala:418) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.ExecutionEngine.doExecute(ExecutionEngine.scala:248) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.ExecutionEngine.$anonfun$executeSubquery$1(ExecutionEngine.scala:185) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.ExecutionEngine.closing(ExecutionEngine.scala:191) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.ExecutionEngine.executeSubquery(ExecutionEngine.scala:171) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.ExecutionEngine.execute(ExecutionEngine.scala:104) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.javacompat.ExecutionEngine.executeQuery(ExecutionEngine.java:126) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.javacompat.ExecutionEngine.executeQuery(ExecutionEngine.java:111) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.kernel.impl.coreapi.TransactionImpl.execute(TransactionImpl.java:236) ~[neo4j-kernel-5.17.0.jar:5.17.0]
	at org.neo4j.kernel.impl.coreapi.TransactionImpl.execute(TransactionImpl.java:226) ~[neo4j-kernel-5.17.0.jar:5.17.0]
	at org.neo4j.kernel.impl.factory.GraphDatabaseTransactions.executeTransactionally(GraphDatabaseTransactions.java:83) ~[neo4j-kernel-5.17.0.jar:5.17.0]
	at org.neo4j.kernel.impl.factory.GraphDatabaseTransactions.executeTransactionally(GraphDatabaseTransactions.java:69) ~[neo4j-kernel-5.17.0.jar:5.17.0]
	at apoc.periodic.PeriodicUtils.lambda$submitProc$7(PeriodicUtils.java:309) ~[apoc.jar:5.17.0]
	... 7 more
Caused by: org.neo4j.kernel.DeadlockDetectedException: ForsetiClient[transactionId=84847, clientId=234] can't acquire ExclusiveLock{owner=ForsetiClient[transactionId=84849, clientId=225]} on NODE(0) because holders of that lock are waiting for ForsetiClient[transactionId=84847, clientId=234].
 Wait list:ExclusiveLock[
Client[84849] waits for [ForsetiClient[transactionId=84847, clientId=234]]]
	at org.neo4j.kernel.impl.locking.forseti.ForsetiClient.waitFor(ForsetiClient.java:831) ~[neo4j-lock-5.17.0.jar:5.17.0]
	at org.neo4j.kernel.impl.locking.forseti.ForsetiClient.acquireExclusive(ForsetiClient.java:341) ~[neo4j-lock-5.17.0.jar:5.17.0]
	at org.neo4j.internal.recordstorage.RecordStorageLocks.acquireExclusiveNodeLock(RecordStorageLocks.java:82) ~[neo4j-record-storage-engine-5.17.0.jar:5.17.0]
	at org.neo4j.kernel.impl.newapi.Read.acquireExclusiveNodeLock(Read.java:602) ~[neo4j-kernel-5.17.0.jar:5.17.0]
	at org.neo4j.kernel.impl.newapi.AllStoreHolder.acquireExclusiveNodeLock(AllStoreHolder.java:110) ~[neo4j-kernel-5.17.0.jar:5.17.0]
	at org.neo4j.kernel.impl.newapi.AllStoreHolder$ForTransactionScope.acquireExclusiveNodeLock(AllStoreHolder.java:867) ~[neo4j-kernel-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.interpreted.TransactionBoundReadQueryContext$NodeReadOperations.acquireExclusiveLock(TransactionBoundQueryContext.scala:1343) ~[neo4j-cypher-interpreted-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.planning.ExceptionTranslatingReadQueryContext$ExceptionTranslatingReadOperations.acquireExclusiveLock(ExceptionTranslatingQueryContext.scala:557) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.slotted.pipes.SlottedSetNodeOrRelPropertyFromMapOperation.set(SlottedSetOperation.scala:124) ~[neo4j-cypher-slotted-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.pipelined.operators.SetOperator.operate(SetOperator.scala:53) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.pipelined.operators.OperatorTask.operateWithProfile(Operator.scala:462) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.pipelined.operators.OperatorTask.operateWithProfile$(Operator.scala:455) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.pipelined.operators.SetOperator.operateWithProfile(SetOperator.scala:43) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.pipelined.RegularPipelineTask.executeOperators(PipelineTask.scala:139) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.pipelined.RegularPipelineTask.executeWorkUnit(PipelineTask.scala:114) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.pipelined.RegularPipelineTask.executeWorkUnit(PipelineTask.scala:75) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.pipelined.WorkerRunner.executeTask(WorkerRunner.scala:627) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.pipelined.WorkerRunner.workOnQuery(WorkerRunner.scala:451) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.pipelined.WorkerRunner.workOnQuery(WorkerRunner.scala:330) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.pipelined.execution.CallingThreadExecutingQuery.request(CallingThreadExecutingQuery.scala:47) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.PipelinedRuntimeResult.request(PipelinedRuntimeResult.scala:91) ~[neo4j-enterprise-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.result.StandardInternalExecutionResult.request(StandardInternalExecutionResult.scala:103) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.javacompat.ResultSubscriber.doFetchResults(ResultSubscriber.java:329) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.javacompat.ResultSubscriber.materialize(ResultSubscriber.java:92) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.result.StandardInternalExecutionResult.initiate(StandardInternalExecutionResult.scala:65) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.result.ClosingExecutionResult.$anonfun$initiate$1(ClosingExecutionResult.scala:61) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18) ~[scala-library-2.13.11.jar:?]
	at org.neo4j.cypher.internal.result.ClosingExecutionResult.safely(ClosingExecutionResult.scala:106) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.result.ClosingExecutionResult.initiate(ClosingExecutionResult.scala:61) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.result.ClosingExecutionResult$.wrapAndInitiate(ClosingExecutionResult.scala:204) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.CypherCurrentCompiler$CypherExecutableQuery.innerExecute(CypherCurrentCompiler.scala:506) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.CypherCurrentCompiler$CypherExecutableQuery.execute(CypherCurrentCompiler.scala:418) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.ExecutionEngine.doExecute(ExecutionEngine.scala:248) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.ExecutionEngine.$anonfun$executeSubquery$1(ExecutionEngine.scala:185) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.ExecutionEngine.closing(ExecutionEngine.scala:191) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.ExecutionEngine.executeSubquery(ExecutionEngine.scala:171) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.ExecutionEngine.execute(ExecutionEngine.scala:104) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.javacompat.ExecutionEngine.executeQuery(ExecutionEngine.java:126) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.javacompat.ExecutionEngine.executeQuery(ExecutionEngine.java:111) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.kernel.impl.coreapi.TransactionImpl.execute(TransactionImpl.java:236) ~[neo4j-kernel-5.17.0.jar:5.17.0]
	at org.neo4j.kernel.impl.coreapi.TransactionImpl.execute(TransactionImpl.java:226) ~[neo4j-kernel-5.17.0.jar:5.17.0]
	at org.neo4j.kernel.impl.newapi.ProcedureTransactionImpl.execute(ProcedureTransactionImpl.java:106) ~[neo4j-kernel-5.17.0.jar:5.17.0]
	at flyweight.procedures.Merge.updateNode(Merge.java:222) ~[neo4j-flyweight-extension-1.0.58.jar:?]
	at flyweight.procedures.Merge.mergeNode(Merge.java:77) ~[neo4j-flyweight-extension-1.0.58.jar:?]
	at org.neo4j.kernel.impl.proc.GeneratedProcedure_mergeNode744062561221377.apply(Unknown Source) ~[?:?]
	at org.neo4j.procedure.impl.ProcedureRegistry.callProcedure(ProcedureRegistry.java:214) ~[neo4j-procedure-5.17.0.jar:5.17.0]
	at org.neo4j.procedure.impl.ProcedureViewImpl.callProcedure(ProcedureViewImpl.java:150) ~[neo4j-procedure-5.17.0.jar:5.17.0]
	at org.neo4j.kernel.impl.newapi.ProcedureCaller$ForTransactionScope.doCallProcedure(ProcedureCaller.java:281) ~[neo4j-kernel-5.17.0.jar:5.17.0]
	at org.neo4j.kernel.impl.newapi.ProcedureCaller.callProcedure(ProcedureCaller.java:183) ~[neo4j-kernel-5.17.0.jar:5.17.0]
	at org.neo4j.kernel.impl.newapi.AllStoreHolder.procedureCallWrite(AllStoreHolder.java:789) ~[neo4j-kernel-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.interpreted.CallSupport$.$anonfun$callReadWriteProcedure$1(CallSupport.scala:63) ~[neo4j-cypher-interpreted-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.interpreted.CallSupport$.callProcedure(CallSupport.scala:94) ~[neo4j-cypher-interpreted-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.interpreted.CallSupport$.callReadWriteProcedure(CallSupport.scala:63) ~[neo4j-cypher-interpreted-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.interpreted.TransactionBoundReadQueryContext.callReadWriteProcedure(TransactionBoundQueryContext.scala:1657) ~[neo4j-cypher-interpreted-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.planning.ExceptionTranslatingReadQueryContext.callReadWriteProcedure(ExceptionTranslatingQueryContext.scala:305) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.EagerReadWriteCallMode$.callProcedure(ProcedureCallMode.scala:82) ~[neo4j-cypher-runtime-util-5.17.0.jar:5.17.0]
	at org.neo4j.codegen.OperatorTaskPipeline15_82124.compiledOperate(Unknown Source) ~[?:?]
	at org.neo4j.cypher.internal.runtime.pipelined.operators.CompiledTask.operateWithProfile(OperatorCodeGenBaseTemplates.scala:677) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.pipelined.RegularPipelineTask.executeOperators(PipelineTask.scala:130) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.pipelined.RegularPipelineTask.executeWorkUnit(PipelineTask.scala:114) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.pipelined.RegularPipelineTask.executeWorkUnit(PipelineTask.scala:75) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.pipelined.WorkerRunner.executeTask(WorkerRunner.scala:627) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.pipelined.WorkerRunner.workOnQuery(WorkerRunner.scala:451) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.pipelined.WorkerRunner.workOnQuery(WorkerRunner.scala:330) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.runtime.pipelined.execution.CallingThreadExecutingQuery.request(CallingThreadExecutingQuery.scala:47) ~[neo4j-cypher-pipelined-runtime-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.PipelinedRuntimeResult.request(PipelinedRuntimeResult.scala:91) ~[neo4j-enterprise-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.result.StandardInternalExecutionResult.request(StandardInternalExecutionResult.scala:103) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.javacompat.ResultSubscriber.doFetchResults(ResultSubscriber.java:329) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.javacompat.ResultSubscriber.materialize(ResultSubscriber.java:92) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.result.StandardInternalExecutionResult.initiate(StandardInternalExecutionResult.scala:65) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.result.ClosingExecutionResult.$anonfun$initiate$1(ClosingExecutionResult.scala:61) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18) ~[scala-library-2.13.11.jar:?]
	at org.neo4j.cypher.internal.result.ClosingExecutionResult.safely(ClosingExecutionResult.scala:106) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.result.ClosingExecutionResult.initiate(ClosingExecutionResult.scala:61) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.result.ClosingExecutionResult$.wrapAndInitiate(ClosingExecutionResult.scala:204) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.CypherCurrentCompiler$CypherExecutableQuery.innerExecute(CypherCurrentCompiler.scala:506) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.CypherCurrentCompiler$CypherExecutableQuery.execute(CypherCurrentCompiler.scala:418) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.ExecutionEngine.doExecute(ExecutionEngine.scala:248) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.ExecutionEngine.$anonfun$executeSubquery$1(ExecutionEngine.scala:185) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.ExecutionEngine.closing(ExecutionEngine.scala:191) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.ExecutionEngine.executeSubquery(ExecutionEngine.scala:171) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.ExecutionEngine.execute(ExecutionEngine.scala:104) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.javacompat.ExecutionEngine.executeQuery(ExecutionEngine.java:126) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.cypher.internal.javacompat.ExecutionEngine.executeQuery(ExecutionEngine.java:111) ~[neo4j-cypher-5.17.0.jar:5.17.0]
	at org.neo4j.kernel.impl.coreapi.TransactionImpl.execute(TransactionImpl.java:236) ~[neo4j-kernel-5.17.0.jar:5.17.0]
	at org.neo4j.kernel.impl.coreapi.TransactionImpl.execute(TransactionImpl.java:226) ~[neo4j-kernel-5.17.0.jar:5.17.0]
	at org.neo4j.kernel.impl.factory.GraphDatabaseTransactions.executeTransactionally(GraphDatabaseTransactions.java:83) ~[neo4j-kernel-5.17.0.jar:5.17.0]
	at org.neo4j.kernel.impl.factory.GraphDatabaseTransactions.executeTransactionally(GraphDatabaseTransactions.java:69) ~[neo4j-kernel-5.17.0.jar:5.17.0]
	at apoc.periodic.PeriodicUtils.lambda$submitProc$7(PeriodicUtils.java:309) ~[apoc.jar:5.17.0]
	... 7 more

Is there an option or config setting to run jobs sequentially instead of in parallel?