I'm using spray-servlet to run spray on top of Tomcat. I have a route that serves (potentially large) files asynchronously. This week I noticed it errored out with the following:
java.lang.IllegalStateException: The request associated with the AsyncContext has already completed processing.
at org.apache.catalina.core.AsyncContextImpl.check(AsyncContextImpl.java:535)
at org.apache.catalina.core.AsyncContextImpl.complete(AsyncContextImpl.java:92)
at spray.servlet.Servlet30ConnectorServlet$Responder.postProcess(Servlet30ConnectorServlet.scala:120)
at spray.servlet.Servlet30ConnectorServlet$Responder.handle(Servlet30ConnectorServlet.scala:155)
at akka.spray.UnregisteredActorRefBase.$bang(UnregisteredActorRefBase.scala:72)
at akka.actor.ActorRef.tell(ActorRef.scala:125)
at spray.routing.RequestContext$$anon$2.handle(RequestContext.scala:72)
at akka.spray.UnregisteredActorRefBase.$bang(UnregisteredActorRefBase.scala:72)
at spray.routing.RequestContext$$anon$1.handle(RequestContext.scala:84)
at akka.spray.UnregisteredActorRefBase.$bang(UnregisteredActorRefBase.scala:72)
at spray.routing.RequestContext$$anon$1.handle(RequestContext.scala:84)
at akka.spray.UnregisteredActorRefBase.$bang(UnregisteredActorRefBase.scala:72)
at spray.routing.RequestContext$$anon$1.handle(RequestContext.scala:84)
at akka.spray.UnregisteredActorRefBase.$bang(UnregisteredActorRefBase.scala:72)
at spray.routing.RequestContext$$anon$1.handle(RequestContext.scala:84)
at akka.spray.UnregisteredActorRefBase.$bang(UnregisteredActorRefBase.scala:72)
at spray.routing.RequestContext$$anon$3.handle(RequestContext.scala:102)
at akka.spray.UnregisteredActorRefBase.$bang(UnregisteredActorRefBase.scala:72)
at spray.routing.RequestContext$$anon$3.handle(RequestContext.scala:102)
at akka.spray.UnregisteredActorRefBase.$bang(UnregisteredActorRefBase.scala:72)
at spray.routing.RequestContext$$anon$3.handle(RequestContext.scala:102)
at akka.spray.UnregisteredActorRefBase.$bang(UnregisteredActorRefBase.scala:72)
at spray.routing.RequestContext$$anon$3.handle(RequestContext.scala:102)
at akka.spray.UnregisteredActorRefBase.$bang(UnregisteredActorRefBase.scala:72)
at spray.httpx.marshalling.MetaMarshallers$ChunkingActor$$anonfun$receive$1$$anon$1.marshalTo(MetaMarshallers.scala:77)
at spray.httpx.marshalling.BasicMarshallers$$anonfun$byteArrayMarshaller$1.apply(BasicMarshallers.scala:32)
at spray.httpx.marshalling.BasicMarshallers$$anonfun$byteArrayMarshaller$1.apply(BasicMarshallers.scala:29)
at spray.httpx.marshalling.Marshaller$$anon$2.apply(Marshaller.scala:47)
at spray.httpx.marshalling.MetaMarshallers$ChunkingActor$$anonfun$receive$1.applyOrElse(MetaMarshallers.scala:86)
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:498)
at akka.actor.ActorCell.invoke(ActorCell.scala:456)
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:237)
at akka.dispatch.Mailbox.run(Mailbox.scala:219)
at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:386)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:262)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:975)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1478)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104)
It erred out at approximately the same time the request should time out(3 minutes), however, a request timeout simply returns to the user, where this erred out directly on the server.
Here is the code that handles the async request. I did not override the chunking threshold. :