[ 
https://issues.apache.org/jira/browse/HTTPCORE-583?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Oleg Kalnichevski resolved HTTPCORE-583.
----------------------------------------
       Resolution: Fixed
    Fix Version/s: 4.4.12

> 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
>            Priority: Major
>             Fix For: 4.4.12
>
>         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:java}
> org.apache.http.nio.reactor.ssl.SSLIOSession#doHandshake
> {code}
> in this method, it implements:
> {code:java}
> // 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:java}
> 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?  but it has two snippets one in the while loop and one in the 
> updateEventMask method. do we need to back port whether two methods or only 
> while loop code?



--
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