The following code works fine with spring-boot 3.1.1. With any version > 3.1.1 (I tried 3.1.2, 3.1.3, 3.1.4 and 3.1.5) it will throw a ConcurrentModificationException, if I try to insert more than ~300 Nodes in the DataInitializer Class.
Any idea what causes this or how to fix it?
TestApplication.java
@SpringBootApplication
@EnableReactiveNeo4jRepositories
public class TestApplication
{
public static void main(String[] args)
{
SpringApplication.run(TestApplication.class, args);
}
@Bean(ReactiveNeo4jRepositoryConfigurationExtension.DEFAULT_TRANSACTION_MANAGER_BEAN_NAME)
public ReactiveTransactionManager reactiveTransactionManager(Driver driver, ReactiveDatabaseSelectionProvider databaseNameProvider)
{
return new ReactiveNeo4jTransactionManager(driver, databaseNameProvider);
}
@Bean
Configuration cypherDslConfiguration()
{
return Configuration.newConfig().withDialect(Dialect.NEO4J_5).build();
}
}
Book.java
@Node
@Data
@ToString
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Book
{
@Id
@GeneratedValue(generatorClass = UUIDGenerator.class)
private UUID id;
private String title;
private String genre;
@CreatedDate
private LocalDateTime createdDate;
@CreatedBy
private String createdBy;
}
DataInitializer.java (creating 1 to n nodes) if n > ~300 it will crash
@Component
@Slf4j
@RequiredArgsConstructor
class DataInitializer implements CommandLineRunner
{
private final ReactiveNeo4jClient client;
private final BookService bookService;
@Override
public void run(String[] args)
{
log.info("start data initialization ...");
Faker faker = new Faker();
this.bookService.deleteAll()
.thenMany(Flux.range(1, 3000)
.flatMap(count -> {
Book book = Book.builder()
.title(faker.book().title())
.genre(faker.book().genre())
.build();
return this.bookService.saveBook(book);
})
)
.log()
.then()
.doOnNext(v -> this.client
.query("MATCH (p:Book) RETURN p")
.fetchAs(Book.class)
.mappedBy((t, r) -> (Book) (r.get("p").asObject()))
.all()
.subscribe(c -> log.info(c.toString()))
)
.subscribe(null,
null,
() -> log.info("done data initialization..."));
}
}
BookService.java
@Service
@Slf4j
@RequiredArgsConstructor
public class BookService
{
private final BookRepository bookRepository;
@Transactional(propagation = Propagation.REQUIRES_NEW)
public Mono<Book> saveBook(Book book)
{
return this.bookRepository.save(book);
}
}
BookRepository.java
public interface BookRepository extends ReactiveNeo4jRepository<Book, UUID>
{
}
Exception ->
java.util.ConcurrentModificationException: null
at java.base/java.util.HashMap$HashIterator.nextNode(HashMap.java:1597) ~[na:na]
at java.base/java.util.HashMap$KeyIterator.next(HashMap.java:1620) ~[na:na]
at java.base/java.util.AbstractCollection.addAll(AbstractCollection.java:335) ~[na:na]
at java.base/java.util.HashSet.<init>(HashSet.java:121) ~[na:na]
at org.springframework.data.neo4j.core.transaction.ReactiveDefaultBookmarkManager.updateBookmarks(ReactiveDefaultBookmarkManager.java:65) ~[spring-data-neo4j-7.1.5.jar:7.1.5]
at org.springframework.data.neo4j.core.transaction.ReactiveNeo4jTransactionManager.lambda$doCommit$14(ReactiveNeo4jTransactionManager.java:328) ~[spring-data-neo4j-7.1.5.jar:7.1.5]
at reactor.core.publisher.FluxPeek$PeekSubscriber.onNext(FluxPeek.java:185) ~[reactor-core-3.5.11.jar:3.5.11]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.complete(MonoIgnoreThen.java:292) ~[reactor-core-3.5.11.jar:3.5.11]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onNext(MonoIgnoreThen.java:187) ~[reactor-core-3.5.11.jar:3.5.11]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:236) ~[reactor-core-3.5.11.jar:3.5.11]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete(MonoIgnoreThen.java:203) ~[reactor-core-3.5.11.jar:3.5.11]
at reactor.core.publisher.MonoCreate$DefaultMonoSink.success(MonoCreate.java:140) ~[reactor-core-3.5.11.jar:3.5.11]
at org.neo4j.driver.internal.reactive.RxUtils.lambda$createEmptyPublisher$0(RxUtils.java:44) ~[neo4j-java-driver-5.13.0.jar:5.13.0-c7381da0d9e7e2ff961f475b4ecb2c864c3b2751]
at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863) ~[na:na]
at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:841) ~[na:na]
at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) ~[na:na]
at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2147) ~[na:na]
at org.neo4j.driver.internal.util.Futures.lambda$futureCompletingConsumer$3(Futures.java:222) ~[neo4j-java-driver-5.13.0.jar:5.13.0-c7381da0d9e7e2ff961f475b4ecb2c864c3b2751]
at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863) ~[na:na]
at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:841) ~[na:na]
at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) ~[na:na]
at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2147) ~[na:na]
at org.neo4j.driver.internal.handlers.CommitTxResponseHandler.onSuccess(CommitTxResponseHandler.java:40) ~[neo4j-java-driver-5.13.0.jar:5.13.0-c7381da0d9e7e2ff961f475b4ecb2c864c3b2751]
at org.neo4j.driver.internal.async.inbound.InboundMessageDispatcher.handleSuccessMessage(InboundMessageDispatcher.java:93) ~[neo4j-java-driver-5.13.0.jar:5.13.0-c7381da0d9e7e2ff961f475b4ecb2c864c3b2751]
at org.neo4j.driver.internal.messaging.common.CommonMessageReader.unpackSuccessMessage(CommonMessageReader.java:57) ~[neo4j-java-driver-5.13.0.jar:5.13.0-c7381da0d9e7e2ff961f475b4ecb2c864c3b2751]
at org.neo4j.driver.internal.messaging.common.CommonMessageReader.read(CommonMessageReader.java:47) ~[neo4j-java-driver-5.13.0.jar:5.13.0-c7381da0d9e7e2ff961f475b4ecb2c864c3b2751]
at org.neo4j.driver.internal.async.inbound.InboundMessageHandler.channelRead0(InboundMessageHandler.java:80) ~[neo4j-java-driver-5.13.0.jar:5.13.0-c7381da0d9e7e2ff961f475b4ecb2c864c3b2751]
at org.neo4j.driver.internal.async.inbound.InboundMessageHandler.channelRead0(InboundMessageHandler.java:36) ~[neo4j-java-driver-5.13.0.jar:5.13.0-c7381da0d9e7e2ff961f475b4ecb2c864c3b2751]
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346) ~[netty-codec-4.1.100.Final.jar:4.1.100.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:318) ~[netty-codec-4.1.100.Final.jar:4.1.100.Final]
at org.neo4j.driver.internal.async.inbound.MessageDecoder.channelRead(MessageDecoder.java:42) ~[neo4j-java-driver-5.13.0.jar:5.13.0-c7381da0d9e7e2ff961f475b4ecb2c864c3b2751]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346) ~[netty-codec-4.1.100.Final.jar:4.1.100.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:318) ~[netty-codec-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:286) ~[netty-handler-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[netty-common-4.1.100.Final.jar:4.1.100.Final]
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.100.Final.jar:4.1.100.Final]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.100.Final.jar:4.1.100.Final]
at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
java.lang.IllegalStateException: Transaction synchronization is not active
at org.springframework.transaction.reactive.TransactionSynchronizationManager.getSynchronizations(TransactionSynchronizationManager.java:233) ~[spring-tx-6.0.13.jar:6.0.13]
at org.springframework.transaction.reactive.AbstractReactiveTransactionManager.triggerAfterCompletion(AbstractReactiveTransactionManager.java:622) ~[spring-tx-6.0.13.jar:6.0.13]
at org.springframework.transaction.reactive.AbstractReactiveTransactionManager.lambda$doRollbackOnCommitException$32(AbstractReactiveTransactionManager.java:563) ~[spring-tx-6.0.13.jar:6.0.13]
at reactor.core.publisher.Mono.lambda$onErrorResume$29(Mono.java:3859) ~[reactor-core-3.5.11.jar:3.5.11]
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:94) ~[reactor-core-3.5.11.jar:3.5.11]
at reactor.core.publisher.MonoIgnoreElements$IgnoreElementsSubscriber.onError(MonoIgnoreElements.java:84) ~[reactor-core-3.5.11.jar:3.5.11]
at reactor.core.publisher.MonoCreate$DefaultMonoSink.error(MonoCreate.java:201) ~[reactor-core-3.5.11.jar:3.5.11]
at org.neo4j.driver.internal.reactive.RxUtils.lambda$createEmptyPublisher$0(RxUtils.java:42) ~[neo4j-java-driver-5.13.0.jar:5.13.0-c7381da0d9e7e2ff961f475b4ecb2c864c3b2751]
at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863) ~[na:na]
at java.base/java.util.concurrent.CompletableFuture.uniWhenCompleteStage(CompletableFuture.java:887) ~[na:na]
at java.base/java.util.concurrent.CompletableFuture.whenComplete(CompletableFuture.java:2325) ~[na:na]
at java.base/java.util.concurrent.CompletableFuture.whenComplete(CompletableFuture.java:144) ~[na:na]
at org.neo4j.driver.internal.reactive.RxUtils.lambda$createEmptyPublisher$1(RxUtils.java:39) ~[neo4j-java-driver-5.13.0.jar:5.13.0-c7381da0d9e7e2ff961f475b4ecb2c864c3b2751]
at reactor.core.publisher.MonoCreate.subscribe(MonoCreate.java:58) ~[reactor-core-3.5.11.jar:3.5.11]
at reactor.core.publisher.Mono.subscribe(Mono.java:4495) ~[reactor-core-3.5.11.jar:3.5.11]
at reactor.core.publisher.MonoIgnorePublisher.subscribe(MonoIgnorePublisher.java:57) ~[reactor-core-3.5.11.jar:3.5.11]
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.5.11.jar:3.5.11]
at reactor.core.publisher.Mono.subscribe(Mono.java:4495) ~[reactor-core-3.5.11.jar:3.5.11]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:263) ~[reactor-core-3.5.11.jar:3.5.11]
at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51) ~[reactor-core-3.5.11.jar:3.5.11]
at reactor.core.publisher.Mono.subscribe(Mono.java:4495) ~[reactor-core-3.5.11.jar:3.5.11]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:263) ~[reactor-core-3.5.11.jar:3.5.11]
at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51) ~[reactor-core-3.5.11.jar:3.5.11]
at reactor.core.publisher.Mono.subscribe(Mono.java:4495) ~[reactor-core-3.5.11.jar:3.5.11]
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:103) ~[reactor-core-3.5.11.jar:3.5.11]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onError(MonoIgnoreThen.java:278) ~[reactor-core-3.5.11.jar:3.5.11]
at reactor.core.publisher.MonoIgnoreElements$IgnoreElementsSubscriber.onError(MonoIgnoreElements.java:84) ~[reactor-core-3.5.11.jar:3.5.11]
at reactor.core.publisher.FluxPeek$PeekSubscriber.onError(FluxPeek.java:222) ~[reactor-core-3.5.11.jar:3.5.11]
at reactor.core.publisher.FluxPeek$PeekSubscriber.onNext(FluxPeek.java:194) ~[reactor-core-3.5.11.jar:3.5.11]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.complete(MonoIgnoreThen.java:292) ~[reactor-core-3.5.11.jar:3.5.11]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onNext(MonoIgnoreThen.java:187) ~[reactor-core-3.5.11.jar:3.5.11]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:236) ~[reactor-core-3.5.11.jar:3.5.11]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete(MonoIgnoreThen.java:203) ~[reactor-core-3.5.11.jar:3.5.11]
at reactor.core.publisher.MonoCreate$DefaultMonoSink.success(MonoCreate.java:140) ~[reactor-core-3.5.11.jar:3.5.11]
at org.neo4j.driver.internal.reactive.RxUtils.lambda$createEmptyPublisher$0(RxUtils.java:44) ~[neo4j-java-driver-5.13.0.jar:5.13.0-c7381da0d9e7e2ff961f475b4ecb2c864c3b2751]
at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863) ~[na:na]
at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:841) ~[na:na]
at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) ~[na:na]
at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2147) ~[na:na]
at org.neo4j.driver.internal.util.Futures.lambda$futureCompletingConsumer$3(Futures.java:222) ~[neo4j-java-driver-5.13.0.jar:5.13.0-c7381da0d9e7e2ff961f475b4ecb2c864c3b2751]
at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863) ~[na:na]
at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:841) ~[na:na]
at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) ~[na:na]
at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2147) ~[na:na]
at org.neo4j.driver.internal.handlers.CommitTxResponseHandler.onSuccess(CommitTxResponseHandler.java:40) ~[neo4j-java-driver-5.13.0.jar:5.13.0-c7381da0d9e7e2ff961f475b4ecb2c864c3b2751]
at org.neo4j.driver.internal.async.inbound.InboundMessageDispatcher.handleSuccessMessage(InboundMessageDispatcher.java:93) ~[neo4j-java-driver-5.13.0.jar:5.13.0-c7381da0d9e7e2ff961f475b4ecb2c864c3b2751]
at org.neo4j.driver.internal.messaging.common.CommonMessageReader.unpackSuccessMessage(CommonMessageReader.java:57) ~[neo4j-java-driver-5.13.0.jar:5.13.0-c7381da0d9e7e2ff961f475b4ecb2c864c3b2751]
at org.neo4j.driver.internal.messaging.common.CommonMessageReader.read(CommonMessageReader.java:47) ~[neo4j-java-driver-5.13.0.jar:5.13.0-c7381da0d9e7e2ff961f475b4ecb2c864c3b2751]
at org.neo4j.driver.internal.async.inbound.InboundMessageHandler.channelRead0(InboundMessageHandler.java:80) ~[neo4j-java-driver-5.13.0.jar:5.13.0-c7381da0d9e7e2ff961f475b4ecb2c864c3b2751]
at org.neo4j.driver.internal.async.inbound.InboundMessageHandler.channelRead0(InboundMessageHandler.java:36) ~[neo4j-java-driver-5.13.0.jar:5.13.0-c7381da0d9e7e2ff961f475b4ecb2c864c3b2751]
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346) ~[netty-codec-4.1.100.Final.jar:4.1.100.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:318) ~[netty-codec-4.1.100.Final.jar:4.1.100.Final]
at org.neo4j.driver.internal.async.inbound.MessageDecoder.channelRead(MessageDecoder.java:42) ~[neo4j-java-driver-5.13.0.jar:5.13.0-c7381da0d9e7e2ff961f475b4ecb2c864c3b2751]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346) ~[netty-codec-4.1.100.Final.jar:4.1.100.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:318) ~[netty-codec-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:286) ~[netty-handler-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) ~[netty-transport-4.1.100.Final.jar:4.1.100.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[netty-common-4.1.100.Final.jar:4.1.100.Final]
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.100.Final.jar:4.1.100.Final]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.100.Final.jar:4.1.100.Final]
at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
Suppressed: org.neo4j.driver.exceptions.ClientException: Can't rollback, transaction has been committed
at org.neo4j.driver.internal.async.UnmanagedTransaction.lambda$closeAsync$13(UnmanagedTransaction.java:337) ~[neo4j-java-driver-5.13.0.jar:5.13.0-c7381da0d9e7e2ff961f475b4ecb2c864c3b2751]
at org.neo4j.driver.internal.util.LockUtil.executeWithLock(LockUtil.java:39) ~[neo4j-java-driver-5.13.0.jar:5.13.0-c7381da0d9e7e2ff961f475b4ecb2c864c3b2751]
at org.neo4j.driver.internal.async.UnmanagedTransaction.closeAsync(UnmanagedTransaction.java:331) ~[neo4j-java-driver-5.13.0.jar:5.13.0-c7381da0d9e7e2ff961f475b4ecb2c864c3b2751]
at org.neo4j.driver.internal.async.UnmanagedTransaction.rollbackAsync(UnmanagedTransaction.java:186) ~[neo4j-java-driver-5.13.0.jar:5.13.0-c7381da0d9e7e2ff961f475b4ecb2c864c3b2751]
... 70 common frames omitted
2023-10-28T13:42:56.709+02:00 ERROR 9208 --- [oundedElastic-1] reactor.core.publisher.Operators : Operator called default onErrorDropped
Update 1: If I change the ReactiveTransactionManager configuration to (using Neo4jBookmarkManager.noop()) it works fine, but this seems quite hacky ->
@Bean(ReactiveNeo4jRepositoryConfigurationExtension.DEFAULT_TRANSACTION_MANAGER_BEAN_NAME)
public ReactiveTransactionManager reactiveTransactionManager(Driver driver, ReactiveDatabaseSelectionProvider databaseNameProvider)
{
return new ReactiveNeo4jTransactionManager(driver, databaseNameProvider, Neo4jBookmarkManager.noop());
}