Java client dies in an ugly manner after lots of read/writes

I’m running an import job on EventStore using the Java client, which consists of 10’s of thousands of individual transactictions, each writing to a new stream.

Everything is going well and my streams get created - up to a point. After a number of writes (1000+ transactions), I’m seeing the stracktrace below in the logs, with future writes resulting in an AskTimeoutException.

Is this a known issue? Any workaround? After a quick look at the affected line of code, I cannot see how this error can suddenly appear at runtime.

15:47:35.618 [default-akka.actor.default-dispatcher-11] ERROR akka.actor.OneForOneStrategy - Expected.NoStream (of class eventstore.ExpectedVersion$NoStream$)

scala.MatchError: Expected.NoStream (of class eventstore.ExpectedVersion$NoStream$)

at eventstore.tcp.EventStoreProtoFormats$class.eventstore$tcp$EventStoreProtoFormats$$expectedVersion(EventStoreProtoFormats.scala:450) ~[eventstore-client_2.11-2.2.2.jar:2.2.2]

at eventstore.tcp.EventStoreProtoFormats$WriteEventsWriter$.toProto(EventStoreProtoFormats.scala:147) ~[eventstore-client_2.11-2.2.2.jar:2.2.2]

at eventstore.tcp.EventStoreProtoFormats$WriteEventsWriter$.toProto(EventStoreProtoFormats.scala:143) ~[eventstore-client_2.11-2.2.2.jar:2.2.2]

at eventstore.proto.DefaultProtoFormats$ProtoWriter$class.write(DefaultProtoFormats.scala:42) ~[eventstore-client_2.11-2.2.2.jar:2.2.2]

at eventstore.tcp.EventStoreProtoFormats$WriteEventsWriter$.write(EventStoreProtoFormats.scala:143) ~[eventstore-client_2.11-2.2.2.jar:2.2.2]

at eventstore.tcp.MarkerByte$.eventstore$tcp$MarkerByte$$writeMessage$1(MarkerByte.scala:80) ~[eventstore-client_2.11-2.2.2.jar:2.2.2]

at eventstore.tcp.MarkerByte$$anonfun$writer$2.apply(MarkerByte.scala:82) ~[eventstore-client_2.11-2.2.2.jar:2.2.2]

at eventstore.tcp.MarkerByte$$anonfun$writer$2.apply(MarkerByte.scala:82) ~[eventstore-client_2.11-2.2.2.jar:2.2.2]

at eventstore.tcp.EventStoreFormats$PackOutOutWriter$.write(EventStoreFormats.scala:66) ~[eventstore-client_2.11-2.2.2.jar:2.2.2]

at eventstore.tcp.EventStoreFormats$PackOutOutWriter$.write(EventStoreFormats.scala:58) ~[eventstore-client_2.11-2.2.2.jar:2.2.2]

at eventstore.util.BytesWriter$class.toByteString(BytesFormat.scala:18) ~[eventstore-client_2.11-2.2.2.jar:2.2.2]

at eventstore.tcp.EventStoreFormats$PackOutOutWriter$.toByteString(EventStoreFormats.scala:58) ~[eventstore-client_2.11-2.2.2.jar:2.2.2]

at eventstore.tcp.MessageByteStringAdapter$$anon$1$$anonfun$1.apply(MessageByteStringAdapter.scala:12) ~[eventstore-client_2.11-2.2.2.jar:2.2.2]

at eventstore.tcp.MessageByteStringAdapter$$anon$1$$anonfun$1.apply(MessageByteStringAdapter.scala:12) ~[eventstore-client_2.11-2.2.2.jar:2.2.2]

at eventstore.pipeline.PipelineStage$$anon$7$$anon$8$$anonfun$13.apply(Pipelines.scala:678) ~[eventstore-client_2.11-2.2.2.jar:2.2.2]

at eventstore.pipeline.PipelineStage$$anon$7$$anon$8$$anonfun$13.apply(Pipelines.scala:678) ~[eventstore-client_2.11-2.2.2.jar:2.2.2]

at eventstore.pipeline.PipelineStage$$anon$7$$anon$8$$anonfun$13.apply(Pipelines.scala:678) ~[eventstore-client_2.11-2.2.2.jar:2.2.2]

at eventstore.pipeline.PipelineStage$$anon$7$$anon$8$$anonfun$13.apply(Pipelines.scala:678) ~[eventstore-client_2.11-2.2.2.jar:2.2.2]

at eventstore.pipeline.PipelineStage$$anon$7$$anon$8$$anonfun$13.apply(Pipelines.scala:678) ~[eventstore-client_2.11-2.2.2.jar:2.2.2]

at eventstore.pipeline.PipelineStage$$anon$7$$anon$8$$anonfun$13.apply(Pipelines.scala:678) ~[eventstore-client_2.11-2.2.2.jar:2.2.2]

at eventstore.pipeline.PipelineFactory$$anon$6$$anonfun$11.apply(Pipelines.scala:323) ~[eventstore-client_2.11-2.2.2.jar:2.2.2]

at eventstore.pipeline.PipelineFactory$$anon$6$$anonfun$11.apply(Pipelines.scala:323) ~[eventstore-client_2.11-2.2.2.jar:2.2.2]

at scala.util.Try$.apply(Try.scala:192) ~[scala-library-2.11.8.jar:na]

at eventstore.pipeline.PipelineFactory$$anon$6.injectCommand(Pipelines.scala:323) ~[eventstore-client_2.11-2.2.2.jar:2.2.2]

at eventstore.pipeline.TcpPipelineHandler$$anonfun$receive$1.applyOrElse(TcpPipelineHandler.scala:151) ~[eventstore-client_2.11-2.2.2.jar:2.2.2]

at akka.actor.Actor$class.aroundReceive(Actor.scala:482) ~[akka-actor_2.11-2.4.6.jar:na]

at eventstore.pipeline.TcpPipelineHandler.aroundReceive(TcpPipelineHandler.scala:121) ~[eventstore-client_2.11-2.2.2.jar:2.2.2]

at akka.actor.ActorCell.receiveMessage(ActorCell.scala:526) [akka-actor_2.11-2.4.6.jar:na]

at akka.actor.ActorCell.invoke(ActorCell.scala:495) [akka-actor_2.11-2.4.6.jar:na]

at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:257) [akka-actor_2.11-2.4.6.jar:na]

at akka.dispatch.Mailbox.run(Mailbox.scala:224) [akka-actor_2.11-2.4.6.jar:na]

at akka.dispatch.Mailbox.exec(Mailbox.scala:234) [akka-actor_2.11-2.4.6.jar:na]

at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) [scala-library-2.11.8.jar:na]

at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) [scala-library-2.11.8.jar:na]

at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) [scala-library-2.11.8.jar:na]

at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) [scala-library-2.11.8.jar:na]

For posterity.

This change: https://github.com/Elder-HQ/EventStore.JVM/commit/71fc93c4ff6840e681d15232f90c85c30a45d840 fixes this issue. I can see no reason for why it would, but it does - the same job runs to completion now with this change.

Open this on the jvm client as an issue.

Done at https://github.com/EventStore/EventStore.JVM/issues/56, thanks!