Edward Gao created HTTPCORE-583:
-----------------------------------

             Summary: The getHandshakestatus always return need_wrap and cost a 
lot of cpu increase in jdk11
                 Key: HTTPCORE-583
                 URL: https://issues.apache.org/jira/browse/HTTPCORE-583
             Project: HttpComponents HttpCore
          Issue Type: Bug
          Components: HttpCore NIO
    Affects Versions: 4.4.11
            Reporter: Edward Gao
         Attachments: image-2019-07-18-09-45-13-130.png, 
image-2019-07-18-09-52-10-100.png

Hi, we recently are upgrading for our prod system to amazon latest jdk 11.

and found a issue.

The case is weird and hard to reproduce.

So here I try to describe it more clearly enough.

In summary, the case is: the method (not know why this is unformated even I 
copied into a text editor):

{code}

org.apache.http.nio.reactor.ssl.SSLIOSession#doHandshake

{code}

in this method, it implements:

{code}

// below code I added some metrics for help to diagnose.

// you can ignore it

private void doHandshake() throws SSLException {

SSLMetrics.handshakeAll.incrementAndGet();

boolean handshaking = true;

SSLEngineResult result = null;

int handshakeNeedWrapTimes = 0;
 SocketAddress addr = null;
 boolean printed = false;
 try {
 while (handshaking) {
 SSLMetrics.handshakeAllInnerLoop.incrementAndGet();
 switch (this.sslEngine.getHandshakeStatus()) {
 case NEED_WRAP:
 handshakeNeedWrapTimes ++;
 // Generate outgoing handshake data
 SSLMetrics.handshakeAllNeedWrap.incrementAndGet();
 // Acquire buffer
 final ByteBuffer outEncryptedBuf = this.outEncrypted.acquire();
 
 // some extra code to help diagnose
 if (!printed && handshakeNeedWrapTimes > PRINT_THRESHOLD) {
 try {
 addr = this.session.getRemoteAddress();
 if (addr != null) {
 System.out.println("[sslmetricsprinter-handshake][" + addr + "][" + 
handshakeNeedWrapTimes + "]");
 }
 } catch (Exception e) {}

printed = true;
 }
 // Just wrap an empty buffer because there is no data to write.
 result = doWrap(ByteBuffer.allocate(0), outEncryptedBuf);
 if (result.getStatus() != Status.OK) {
 handshaking = false;
 }
 break;
 case NEED_UNWRAP:
 // other cases ignored...
 }
 }

{code}

 

our metrics show the need_wrap count is increased 3000 times of jdk8 runtime.

!image-2019-07-18-09-45-13-130.png!

 

and I checked the version 5. found this is changed.

{code}

Bug fix: corrected handling of NEED_WRAP handshake status during graceful SSL 
session termination

!image-2019-07-18-09-52-10-100.png!

{code}

 it's on tag: 0088ef6

So I have below questions:
 # Can you guys fix this on the version 4.4?
 # if not, is it safe for us to merge this two snippets code back to http 
manually?



--
This message was sent by Atlassian JIRA
(v7.6.14#76016)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to