Bug 1200283

Summary: NIO2: Creating concurrent requests with keep-alive header to HTTPS results to timeout of second requests from the same client
Product: [JBoss] JBoss Enterprise Application Platform 6 Reporter: Radim Hatlapatka <rhatlapa>
Component: WebAssignee: Rémy Maucherat <rmaucher>
Status: CLOSED WONTFIX QA Contact: Radim Hatlapatka <rhatlapa>
Severity: high Docs Contact:
Priority: unspecified    
Version: 6.4.0CC: cdewolf, jstefl
Target Milestone: ---   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2015-03-30 13:28:16 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Attachments:
Description Flags
Web app with static content
none
server key
none
Server certificate
none
Server config file none

Description Radim Hatlapatka 2015-03-10 08:22:08 UTC
Created attachment 999764 [details]
Web app with static content

Description of problem:
When using keep-alive connection to https endpoint using NIO2 connector, according to access log there is received only one request per client, the other requests are not processed resulting in ApacheBench client failing with "apr_pollset_poll: The
timeout specified has expired (70007)"

Version-Release number of selected component (if applicable): EAP 6.4.0.ER3


How reproducible: always


Steps to Reproduce:
1. Unzip EAP distro
2. Deploy attached test.war
3. Load certificate and keystore to $JBOSS_HOME/standalone
4. Configure https and set protocol to NIO2 ([1] or see attached config)
5. Enable access logging
6. Do concurrent requests with enabled keep-alive via ApacheBench (ab -k -n 3 -c 2 -Z
    DHE-RSA-AES256-SHA -v 3  https://127.0.0.1:8443/test/f256) - two concurrent clients sending in total 3 requests

Actual results:
 ApacheBench client fails with "apr_pollset_poll: The timeout specified has expired (70007)" and in access log there are shown only two processed requests as there are two concurrent clients, the third request is not there.


Expected results:
All requests are correctly processed and logged in access-log


Additional info:
No message is shown in logs explaining what happened. With JIO connector it works as expected.

[1]
<connector name="https" protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https" socket-binding="https" enabled="true">
                 <ssl name="http-perf" key-alias="jboss" password="jbossas" certificate-key-file="${jboss.server.base.dir}/server.keystore" cipher-suite="ALL" protocol="TLSv1" verify-client="none" certificate-file="${jboss.server.base.dir}/server.crt"/>
</connector>

Comment 1 Radim Hatlapatka 2015-03-10 08:25:27 UTC
Created attachment 999769 [details]
server key

Comment 2 Radim Hatlapatka 2015-03-10 08:25:44 UTC
Created attachment 999770 [details]
Server certificate

Comment 3 Radim Hatlapatka 2015-03-10 08:26:30 UTC
Created attachment 999771 [details]
Server config file