https://issues.apache.org/bugzilla/show_bug.cgi?id=51180
Bug #: 51180
Summary: AsyncContextImpl With
org.apache.coyote.http11.Http11NioProtocol Closes
Connection Immediately Upon First Request
Product: Tomcat 7
Version: 7.0.12
Platform: All
OS/Version: All
Status: NEW
Severity: blocker
Priority: P2
Component: Catalina
AssignedTo: [email protected]
ReportedBy: [email protected]
Classification: Unclassified
On a connector configured with org.apache.coyote.http11.Http11NioProtocol, the
first request to a 3.0 servlet results in an NPE. Successive requests behave
correctly. Below is a catalina.out log excerpt covering two identical
consecutive requests, created with
"org.apache.catalina.core.AsyncContextImpl.level = FINE" added to the end of
conf/logging.properties:
May 9, 2011 11:33:55 AM org.apache.catalina.core.AsyncContextImpl logDebug
FINE: Req: null CReq: null RP: null Stage: - Thread:
ttp-nio-8080"-exec-1 State: N/A Method: Constructor URI:
N/A
05/09 11:33:55 DEBUG[akka:event-driven:dispatcher:global-2]
a.d.MonitorableThread - Created thread akka:event-driven:dispatcher:global-2
05/09 11:33:56 DEBUG[akka:event-driven:dispatcher:global-2] c.s.RootService -
Received HttpRequest(GET,http://localhost:8080/hello/CliveBarker,List(host:
localhost:8080, user-agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6;
en-US; rv:1.9.2.17) Gecko/20110420 Firefox/3.6.17, Accept:
MediaType(text/html), MediaType(application/xhtml+xml),
MediaType(application/xml), MediaRange(*/*), Accept-Encoding: gzip, deflate,
Accept-Charset: Charset(ISO-8859-1), Charset(UTF-8), CharsetRange(*),
keep-alive: 115, connection: keep-alive, cookie:
__utma=111872281.1546197940.1294377584.1295211055.1295212368.20;
__utmz=111872281.1294377584.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)),None,Some(0:0:0:0:0:0:0:1%0),Some(HTTP/1.1))
with one attached service, dispatching...
05/09 11:33:56 DEBUG[akka:event-driven:dispatcher:global-3]
a.d.MonitorableThread - Created thread akka:event-driven:dispatcher:global-3
05/09 11:33:56 DEBUG[akka:event-driven:dispatcher:global-3]
c.v.v.v.e.HelloServiceBuilder - *** HTTP GET METHOD RECEIVED ON PATH WITH KEY
CliveBarker, CALLING PERSISTENCE SERVICE ***
05/09 11:33:56 DEBUG[akka:event-driven:dispatcher:global-4]
a.d.MonitorableThread - Created thread akka:event-driven:dispatcher:global-4
05/09 11:33:56 DEBUG[akka:event-driven:dispatcher:global-4] c.r.RedisClient -
C: *2\r\n$3\r\nGET\r\n$28\r\npersistentHellos:CliveBarker\r\n
May 9, 2011 11:33:56 AM org.apache.catalina.core.AsyncContextImpl logDebug
FINE: Req: 3ac58af4 CReq: 7f25b750 RP: 5262667 Stage: 3 Thread:
ttp-nio-8080"-exec-2 State: N/A Method: complete URI:
/hello/CliveBarker
May 9, 2011 11:33:56 AM org.apache.catalina.core.AsyncContextImpl logDebug
FINE: Req: 3ac58af4 CReq: 7f25b750 RP: 5262667 Stage: 3 Thread:
ttp-nio-8080"-exec-3 State: N/A Method: recycle URI:
/hello/CliveBarker
05/09 11:33:56 DEBUG[akka:event-driven:dispatcher:global-4]
c.v.v.v.e.HelloServiceBuilder$PersistenceService - *** 'GET DIDN'T FIND KEY
CliveBarker, RETURNING NONE ***
05/09 11:33:56 DEBUG[akka:event-driven:dispatcher:global-3]
c.v.v.v.e.HelloServiceBuilder - *** PERSISTENCE SERVICE DIDN'T RETURN OBJECT
FOR KEY CliveBarker, RETURNING 403 TO CLIENT ***
05/09 11:33:56 ERROR[akka:event-driven:dispatcher:global-3]
a.h.Servlet30ContextMethodFactory$$anon$2 - Failed to write data to connection
on resume - the client probably disconnected
java.lang.NullPointerException: null
at
cc.spray.ServletConverter$$anonfun$fromSprayResponse$1.apply(ServletConverter.scala:88)
~[spray_2.8.1-0.5.0.jar:na]
at
cc.spray.ServletConverter$$anonfun$fromSprayResponse$1.apply(ServletConverter.scala:87)
~[spray_2.8.1-0.5.0.jar:na]
at akka.http.RequestMethod$class.rawComplete(Mist.scala:394)
~[akka-http-1.0.jar:na]
at akka.http.Get.rawComplete(Mist.scala:458) [akka-http-1.0.jar:na]
at
cc.spray.RootService.cc$spray$RootService$$completeRequest(RootService.scala:80)
[spray_2.8.1-0.5.0.jar:na]
at
cc.spray.RootService$$anonfun$cc$spray$RootService$$handleOneService$1.apply(RootService.scala:57)
[spray_2.8.1-0.5.0.jar:na]
at
cc.spray.RootService$$anonfun$cc$spray$RootService$$handleOneService$1.apply(RootService.scala:57)
[spray_2.8.1-0.5.0.jar:na]
at
akka.dispatch.DefaultCompletableFuture.akka$dispatch$DefaultCompletableFuture$$notifyListener(Future.scala:324)
[akka-actor-1.0.jar:na]
at
akka.dispatch.DefaultCompletableFuture$$anonfun$notifyListeners$1.apply(Future.scala:320)
[akka-actor-1.0.jar:na]
at
akka.dispatch.DefaultCompletableFuture$$anonfun$notifyListeners$1.apply(Future.scala:319)
[akka-actor-1.0.jar:na]
at
scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:61)
[scala-library.jar:na]
at scala.collection.immutable.List.foreach(List.scala:45)
[scala-library.jar:na]
at akka.dispatch.DefaultCompletableFuture.notifyListeners(Future.scala:319)
[akka-actor-1.0.jar:na]
at
akka.dispatch.DefaultCompletableFuture.completeWithResult(Future.scala:279)
[akka-actor-1.0.jar:na]
at akka.actor.ScalaActorRef$$anon$1.$bang(ActorRef.scala:1398)
[akka-actor-1.0.jar:na]
at cc.spray.HttpServiceActor$$anon$1.apply(HttpServiceActor.scala:39)
[spray_2.8.1-0.5.0.jar:na]
at cc.spray.HttpServiceActor$$anon$1.apply(HttpServiceActor.scala:37)
[spray_2.8.1-0.5.0.jar:na]
at cc.spray.RequestContext.reject(RequestContext.scala:67)
[spray_2.8.1-0.5.0.jar:na]
at
cc.spray.builders.MiscBuilders$$anon$1$$anonfun$$tilde$1$$anonfun$apply$1$$anonfun$apply$2.apply(MiscBuilders.scala:80)
[spray_2.8.1-0.5.0.jar:na]
at
cc.spray.builders.MiscBuilders$$anon$1$$anonfun$$tilde$1$$anonfun$apply$1$$anonfun$apply$2.apply(MiscBuilders.scala:78)
[spray_2.8.1-0.5.0.jar:na]
at cc.spray.RequestContext.reject(RequestContext.scala:67)
[spray_2.8.1-0.5.0.jar:na]
at
cc.spray.builders.FilterRoute$$anonfun$fromRouting$1.apply(FilterBuilders.scala:59)
[spray_2.8.1-0.5.0.jar:na]
at
cc.spray.builders.FilterRoute$$anonfun$fromRouting$1.apply(FilterBuilders.scala:56)
[spray_2.8.1-0.5.0.jar:na]
at
cc.spray.builders.MiscBuilders$$anon$1$$anonfun$$tilde$1$$anonfun$apply$1.apply(MiscBuilders.scala:76)
[spray_2.8.1-0.5.0.jar:na]
at
cc.spray.builders.MiscBuilders$$anon$1$$anonfun$$tilde$1$$anonfun$apply$1.apply(MiscBuilders.scala:74)
[spray_2.8.1-0.5.0.jar:na]
at cc.spray.RequestContext.reject(RequestContext.scala:67)
[spray_2.8.1-0.5.0.jar:na]
at
cc.spray.builders.MiscBuilders$$anon$1$$anonfun$$tilde$1$$anonfun$apply$1$$anonfun$apply$2.apply(MiscBuilders.scala:80)
[spray_2.8.1-0.5.0.jar:na]
at
cc.spray.builders.MiscBuilders$$anon$1$$anonfun$$tilde$1$$anonfun$apply$1$$anonfun$apply$2.apply(MiscBuilders.scala:78)
[spray_2.8.1-0.5.0.jar:na]
at cc.spray.RequestContext.reject(RequestContext.scala:67)
[spray_2.8.1-0.5.0.jar:na]
at
cc.spray.builders.FilterRoute$$anonfun$fromRouting$1.apply(FilterBuilders.scala:59)
[spray_2.8.1-0.5.0.jar:na]
at
cc.spray.builders.FilterRoute$$anonfun$fromRouting$1.apply(FilterBuilders.scala:56)
[spray_2.8.1-0.5.0.jar:na]
at
cc.spray.builders.MiscBuilders$$anon$1$$anonfun$$tilde$1$$anonfun$apply$1.apply(MiscBuilders.scala:76)
[spray_2.8.1-0.5.0.jar:na]
at
cc.spray.builders.MiscBuilders$$anon$1$$anonfun$$tilde$1$$anonfun$apply$1.apply(MiscBuilders.scala:74)
[spray_2.8.1-0.5.0.jar:na]
at cc.spray.RequestContext.reject(RequestContext.scala:67)
[spray_2.8.1-0.5.0.jar:na]
at cc.spray.RequestContext.reject(RequestContext.scala:62)
[spray_2.8.1-0.5.0.jar:na]
at
com.vmware.vcloud.vmole.example.HelloServiceBuilder$$anonfun$helloService$1$$anonfun$apply$3.apply(HelloServiceBuilder.scala:107)
[HelloServiceBuilder$$anonfun$helloService$1$$anonfun$apply$3.class:na]
at
com.vmware.vcloud.vmole.example.HelloServiceBuilder$$anonfun$helloService$1$$anonfun$apply$3.apply(HelloServiceBuilder.scala:98)
[HelloServiceBuilder$$anonfun$helloService$1$$anonfun$apply$3.class:na]
at
cc.spray.builders.FilterRoute$$anonfun$fromRouting$1.apply(FilterBuilders.scala:58)
[spray_2.8.1-0.5.0.jar:na]
at
cc.spray.builders.FilterRoute$$anonfun$fromRouting$1.apply(FilterBuilders.scala:56)
[spray_2.8.1-0.5.0.jar:na]
at
cc.spray.builders.MiscBuilders$$anon$1$$anonfun$$tilde$1.apply(MiscBuilders.scala:72)
[spray_2.8.1-0.5.0.jar:na]
at
cc.spray.builders.MiscBuilders$$anon$1$$anonfun$$tilde$1.apply(MiscBuilders.scala:71)
[spray_2.8.1-0.5.0.jar:na]
at
cc.spray.builders.FilterRoute$$anonfun$fromRouting$1.apply(FilterBuilders.scala:58)
[spray_2.8.1-0.5.0.jar:na]
at
cc.spray.builders.FilterRoute$$anonfun$fromRouting$1.apply(FilterBuilders.scala:56)
[spray_2.8.1-0.5.0.jar:na]
at
cc.spray.builders.FilterRoute$$anonfun$fromRouting$1.apply(FilterBuilders.scala:58)
[spray_2.8.1-0.5.0.jar:na]
at
cc.spray.builders.FilterRoute$$anonfun$fromRouting$1.apply(FilterBuilders.scala:56)
[spray_2.8.1-0.5.0.jar:na]
at
cc.spray.builders.MiscBuilders$$anon$1$$anonfun$$tilde$1.apply(MiscBuilders.scala:72)
[spray_2.8.1-0.5.0.jar:na]
at
cc.spray.builders.MiscBuilders$$anon$1$$anonfun$$tilde$1.apply(MiscBuilders.scala:71)
[spray_2.8.1-0.5.0.jar:na]
at cc.spray.HttpServiceLogic$class.handle(HttpServiceLogic.scala:33)
[spray_2.8.1-0.5.0.jar:na]
at
com.vmware.vcloud.vmole.example.CustomHttpService.handle(HelloServiceBuilder.scala:50)
[CustomHttpService.class:na]
at
cc.spray.HttpServiceActor$$anonfun$receive$1.apply(HttpServiceActor.scala:34)
[spray_2.8.1-0.5.0.jar:na]
at
cc.spray.HttpServiceActor$$anonfun$receive$1.apply(HttpServiceActor.scala:33)
[spray_2.8.1-0.5.0.jar:na]
at akka.actor.Actor$$anonfun$4.apply(Actor.scala:481)
[akka-actor-1.0.jar:na]
at akka.actor.Actor$$anonfun$4.apply(Actor.scala:464)
[akka-actor-1.0.jar:na]
at akka.actor.Actor$class.apply(Actor.scala:435) [akka-actor-1.0.jar:na]
at
com.vmware.vcloud.vmole.example.CustomHttpService.apply(HelloServiceBuilder.scala:50)
[CustomHttpService.class:na]
at
akka.actor.LocalActorRef.akka$actor$LocalActorRef$$dispatch(ActorRef.scala:1012)
[akka-actor-1.0.jar:na]
at
akka.actor.LocalActorRef$$anonfun$invoke$1.apply$mcV$sp(ActorRef.scala:832)
[akka-actor-1.0.jar:na]
at akka.actor.LocalActorRef$$anonfun$invoke$1.apply(ActorRef.scala:828)
[akka-actor-1.0.jar:na]
at akka.actor.LocalActorRef$$anonfun$invoke$1.apply(ActorRef.scala:828)
[akka-actor-1.0.jar:na]
at akka.util.ReentrantGuard.withGuard(LockUtil.scala:19)
[akka-actor-1.0.jar:na]
at akka.actor.LocalActorRef.invoke(ActorRef.scala:827)
[akka-actor-1.0.jar:na]
at akka.dispatch.MessageInvocation.invoke(MessageHandling.scala:23)
[akka-actor-1.0.jar:na]
at
akka.dispatch.ExecutableMailbox$class.processMailbox(ExecutorBasedEventDrivenDispatcher.scala:190)
[akka-actor-1.0.jar:na]
at
akka.dispatch.ExecutorBasedEventDrivenDispatcher$$anon$1.processMailbox(ExecutorBasedEventDrivenDispatcher.scala:109)
[akka-actor-1.0.jar:na]
at
akka.dispatch.ExecutableMailbox$class.run(ExecutorBasedEventDrivenDispatcher.scala:166)
[akka-actor-1.0.jar:na]
at
akka.dispatch.ExecutorBasedEventDrivenDispatcher$$anon$1.run(ExecutorBasedEventDrivenDispatcher.scala:109)
[akka-actor-1.0.jar:na]
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
[na:1.6.0_24]
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
[na:1.6.0_24]
at java.lang.Thread.run(Thread.java:680) [na:1.6.0_24]
at akka.dispatch.MonitorableThread.run(ThreadPoolBuilder.scala:185)
[akka-actor-1.0.jar:na]
05/09 11:33:56 DEBUG[akka:event-driven:dispatcher:global-3]
c.v.v.v.e.HelloServiceBuilder - *** PERSISTENCE SERVICE TIMED OUT FOR KEY
CliveBarker, RETURNING 403 TO CLIENT ***
May 9, 2011 11:33:59 AM org.apache.catalina.core.AsyncContextImpl logDebug
FINE: Req: null CReq: null RP: null Stage: - Thread:
ttp-nio-8080"-exec-4 State: N/A Method: Constructor URI:
N/A
05/09 11:33:59 DEBUG[akka:event-driven:dispatcher:global-5]
a.d.MonitorableThread - Created thread akka:event-driven:dispatcher:global-5
05/09 11:33:59 DEBUG[akka:event-driven:dispatcher:global-5] c.s.RootService -
Received HttpRequest(GET,http://localhost:8080/hello/CliveBarker,List(host:
localhost:8080, user-agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6;
en-US; rv:1.9.2.17) Gecko/20110420 Firefox/3.6.17, Accept:
MediaType(text/html), MediaType(application/xhtml+xml),
MediaType(application/xml), MediaRange(*/*), Accept-Encoding: gzip, deflate,
Accept-Charset: Charset(ISO-8859-1), Charset(UTF-8), CharsetRange(*),
keep-alive: 115, connection: keep-alive, cookie:
__utma=111872281.1546197940.1294377584.1295211055.1295212368.20;
__utmz=111872281.1294377584.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)),None,Some(0:0:0:0:0:0:0:1%0),Some(HTTP/1.1))
with one attached service, dispatching...
05/09 11:33:59 DEBUG[akka:event-driven:dispatcher:global-6]
a.d.MonitorableThread - Created thread akka:event-driven:dispatcher:global-6
05/09 11:33:59 DEBUG[akka:event-driven:dispatcher:global-6]
c.v.v.v.e.HelloServiceBuilder - *** HTTP GET METHOD RECEIVED ON PATH WITH KEY
CliveBarker, CALLING PERSISTENCE SERVICE ***
05/09 11:33:59 DEBUG[akka:event-driven:dispatcher:global-7]
a.d.MonitorableThread - Created thread akka:event-driven:dispatcher:global-7
05/09 11:33:59 DEBUG[akka:event-driven:dispatcher:global-7] c.r.RedisClient -
C: *2\r\n$3\r\nGET\r\n$28\r\npersistentHellos:CliveBarker\r\n
05/09 11:33:59 DEBUG[akka:event-driven:dispatcher:global-7]
c.v.v.v.e.HelloServiceBuilder$PersistenceService - *** 'GET DIDN'T FIND KEY
CliveBarker, RETURNING NONE ***
05/09 11:33:59 DEBUG[akka:event-driven:dispatcher:global-6]
c.v.v.v.e.HelloServiceBuilder - *** PERSISTENCE SERVICE DIDN'T RETURN OBJECT
FOR KEY CliveBarker, RETURNING 403 TO CLIENT ***
May 9, 2011 11:33:59 AM org.apache.catalina.core.AsyncContextImpl logDebug
FINE: Req: 3ac58af4 CReq: 7f25b750 RP: 5262667 Stage: 7 Thread:
:dispatcher:global-6 State: N/A Method: complete URI:
/hello/CliveBarker
05/09 11:33:59 DEBUG[akka:event-driven:dispatcher:global-6]
c.v.v.v.e.HelloServiceBuilder - *** PERSISTENCE SERVICE TIMED OUT FOR KEY
CliveBarker, RETURNING 403 TO CLIENT ***
May 9, 2011 11:33:59 AM org.apache.catalina.core.AsyncContextImpl logDebug
FINE: Req: 3ac58af4 CReq: 7f25b750 RP: 5262667 Stage: 3 Thread:
ttp-nio-8080"-exec-6 State: N/A Method: recycle URI:
/hello/CliveBarker
As you can see, on the first request, the AsyncContextImpl has complete()ed and
recycle()d the connection immediately upon the main thread returning control.
On the second request, however, the AsyncContextImpl does not complete() and
recycle() the connection until after the forked thread has complete()ed the
context.
--
Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]