https://bz.apache.org/bugzilla/show_bug.cgi?id=58646

--- Comment #15 from Alexander Malyshev <anmalys...@mail.ru> ---
Ok, finally I was able to reproduce it with logs.
I associated ID with each request object and I added logging to
AbstractHttp11Processor  class to process() and recycle() methods.

In process() method I added the following log in the very beginning:

    getLog().info("Starting to process request with id " + this.request.id + ".
Calling method is:\n" + java.lang.Thread.currentThread().getStackTrace()[3]);

and the following log later then request path is parsed (copying a few above
lines as well to make it clean):

        if ((!getInputBuffer().parseRequestLine(this.keptAlive)) && 
          (handleIncompleteRequestLineRead()))
        {
          break;
        }

        getLog().info("Processing " + this.request.method() + " request to " +
this.request.requestURI() + ".");

In the recycle() method I added log in the very beginning:

getLog().info("Recycling processor with id " + this.request.id + ". Calling
method is:\n" + java.lang.Thread.currentThread().getStackTrace()[2]);

What I got is that 2 different Tomcat threads started to process the same
request (logs are ordered properly):

Jan 15, 2016 MSK 04:52:13.914 PM http-nio-135.60.87.68-443-exec-23
org.apache.coyote.http11.Http11NioProcessor
INFO: Starting to process request with id 13. Calling method is:
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)

Jan 15, 2016 MSK 04:52:13.914 PM http-nio-135.60.87.68-443-exec-23
org.apache.coyote.http11.Http11NioProcessor
INFO: Processing POST request to /viewer/rest/live_viewer/.

Jan 15, 2016 MSK 04:52:13.914 PM http-nio-135.60.87.68-443-exec-17
org.apache.coyote.http11.Http11NioProcessor
INFO: Starting to process request with id 13. Calling method is:
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)

Jan 15, 2016 MSK 04:52:13.914 PM http-nio-135.60.87.68-443-exec-17
org.apache.coyote.http11.Http11NioProcessor
INFO: Processing POST request to /viewer/rest/live_viewer/.

Jan 15, 2016 MSK 04:52:13.914 PM http-nio-135.60.87.68-443-exec-17
org.apache.coyote.http11.Http11NioProcessor
INFO: Error parsing HTTP request header
 Note: further occurrences of HTTP header parsing errors will be logged at
DEBUG level.

java.lang.IllegalStateException: Unexpected state: headers already parsed.
Buffer not recycled?
    at
org.apache.coyote.http11.AbstractNioInputBuffer.parseHeaders(AbstractNioInputBuffer.java:375)
    at
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1029)
    at
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:674)
    at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
    at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
    at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

Jan 15, 2016 MSK 04:52:13.914 PM http-nio-135.60.87.68-443-exec-23
com.avaya.acc.wcs.logic.api.GetPresentationTocCommand
INFO: Processing LIVE_VIEWER event for client with Participant ID null


Last log is aour app log and means that http-nio-135.60.87.68-443-exec-23
thread processed request successfully.
I think there is a synchronization issue somethere in tomcat code which makes
it possible for 2 threads to process the same request object simultaneously.

Here is another exception - but the reason seem to be the same:

Jan 15, 2016 MSK 04:52:14.028 PM http-nio-135.60.87.68-443-exec-16
org.apache.coyote.http11.Http11NioProcessor
INFO: Starting to process request with id 13. Calling method is:
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)

Jan 15, 2016 MSK 04:52:14.028 PM http-nio-135.60.87.68-443-exec-16
org.apache.coyote.http11.Http11NioProcessor
INFO: Processing GET request to /wcsws/WebSocket.

Jan 15, 2016 MSK 04:52:14.028 PM http-nio-135.60.87.68-443-exec-1
org.apache.coyote.http11.Http11NioProcessor
INFO: Starting to process request with id 13. Calling method is:
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)

Jan 15, 2016 MSK 04:52:14.029 PM http-nio-135.60.87.68-443-exec-1
org.apache.coyote.http11.Http11NioProcessor
INFO: Processing GET request to /wcsws/WebSocket.

Jan 15, 2016 MSK 04:52:14.029 PM http-nio-135.60.87.68-443-exec-1
org.apache.coyote.http11.Http11NioProcessor
INFO: Recycling processor with id 13. Calling method is:
org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.release(Http11NioProtocol.java:218)

Jan 15, 2016 MSK 04:52:14.029 PM http-nio-135.60.87.68-443-exec-16
org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/wcsws].[default]
SEVERE: Servlet.service() for servlet [default] in context with path [/wcsws]
threw exception

java.lang.NullPointerException
    at
org.apache.catalina.connector.Request.notifyAttributeAssigned(Request.java:1505)
    at org.apache.catalina.connector.Request.access$000(Request.java:118)
    at org.apache.catalina.connector.Request$3.set(Request.java:3380)
    at org.apache.catalina.connector.Request.setAttribute(Request.java:1462)
    at
org.apache.catalina.connector.RequestFacade.setAttribute(RequestFacade.java:539)
    at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:272)
    at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at com.avaya.acc.base.web.valves.StingerValve.invoke(StingerValve.java:150)
    at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at
com.avaya.acc.base.tomcat.MCPTomcatAccessLogValve.invoke(MCPTomcatAccessLogValve.java:269)
    at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
    at
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1100)
    at
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:674)
    at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
    at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
    at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

Jan 15, 2016 MSK 04:52:14.040 PM http-nio-135.60.87.68-443-exec-16
org.apache.coyote.http11.Http11NioProcessor
SEVERE: Error processing request

java.lang.NullPointerException
    at
org.apache.catalina.connector.Request.notifyAttributeAssigned(Request.java:1505)
    at org.apache.catalina.connector.Request.setAttribute(Request.java:1495)
    at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:158)
    at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at
com.avaya.acc.base.tomcat.MCPTomcatAccessLogValve.invoke(MCPTomcatAccessLogValve.java:269)
    at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
    at
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1100)
    at
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:674)
    at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
    at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
    at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

Jan 15, 2016 MSK 04:52:14.040 PM http-nio-135.60.87.68-443-exec-16
org.apache.coyote.http11.Http11NioProcessor
SEVERE: Error finishing response

java.lang.NullPointerException
    at
org.apache.coyote.http11.InternalNioOutputBuffer.flushBuffer(InternalNioOutputBuffer.java:236)
    at
org.apache.coyote.http11.InternalNioOutputBuffer.addToBB(InternalNioOutputBuffer.java:191)
    at
org.apache.coyote.http11.InternalNioOutputBuffer.commit(InternalNioOutputBuffer.java:179)
    at
org.apache.coyote.http11.AbstractHttp11Processor.action(AbstractHttp11Processor.java:741)
    at org.apache.coyote.Response.action(Response.java:177)
    at
org.apache.coyote.http11.AbstractOutputBuffer.endRequest(AbstractOutputBuffer.java:369)
    at
org.apache.coyote.http11.AbstractHttp11Processor.endRequest(AbstractHttp11Processor.java:1813)
    at
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1152)
    at
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:674)
    at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
    at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
    at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

-- 
You are receiving this mail because:
You are the assignee for the bug.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to