Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TLS 1.3: javax.net.ssl.SSLException: No PSK available. Unable to resume. #2939

Closed
cowwoc opened this Issue Sep 30, 2018 · 19 comments

Comments

Projects
None yet
5 participants
@cowwoc
Copy link

cowwoc commented Sep 30, 2018

9.4.12.v20180830
openjdk version "11" 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)

When running against Java 11 I get this exception when making HTTPS requests:

MyApplicationException:
        at [...]
	at org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:202)
	at org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:194)
	at org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:470)
	at org.eclipse.jetty.client.HttpReceiver.responseSuccess(HttpReceiver.java:416)
	at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.messageComplete(HttpReceiverOverHTTP.java:316)
	at org.eclipse.jetty.http.HttpParser.parseFields(HttpParser.java:1165)
	at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:1525)
	at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.parse(HttpReceiverOverHTTP.java:172)
	at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.process(HttpReceiverOverHTTP.java:135)
	at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.receive(HttpReceiverOverHTTP.java:73)
	at org.eclipse.jetty.client.http.HttpChannelOverHTTP.receive(HttpChannelOverHTTP.java:133)
	at org.eclipse.jetty.client.http.HttpConnectionOverHTTP.onFillable(HttpConnectionOverHTTP.java:155)
	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
	at org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:411)
	at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:305)
	at org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:159)
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
	at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:333)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:310)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:126)
	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:366)
	... 3 common frames omitted
Caused by: javax.net.ssl.SSLException: No PSK available. Unable to resume.
	at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:129)
	at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)
	at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:308)
	at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:264)
	at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:255)
	at java.base/sun.security.ssl.ServerHello$T13ServerHelloConsumer.consume(ServerHello.java:1224)
	at java.base/sun.security.ssl.ServerHello$ServerHelloConsumer.onServerHello(ServerHello.java:984)
	at java.base/sun.security.ssl.ServerHello$ServerHelloConsumer.consume(ServerHello.java:872)
	at java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:392)
	at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:444)
	at java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(SSLEngineImpl.java:1065)
	at java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(SSLEngineImpl.java:1052)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask.run(SSLEngineImpl.java:999)
	at org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.fill(SslConnection.java:511)
	at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.process(HttpReceiverOverHTTP.java:128)
	at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.receive(HttpReceiverOverHTTP.java:73)
	at org.eclipse.jetty.client.http.HttpChannelOverHTTP.receive(HttpChannelOverHTTP.java:133)
	at org.eclipse.jetty.client.http.HttpConnectionOverHTTP.onFillable(HttpConnectionOverHTTP.java:155)
	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
	at org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:411)
	at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:305)
	at org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:159)
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
	at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118)
	... 3 common frames omitted

I don't have a minimal testcase but I'm hoping the above stacktrace gives you enough information to figure out what is going on. I never got this exception with Java 10 so I think it is specific to Java 11.

Workaround: Disable TLS 1.3 using the following JVM property -Djdk.tls.client.protocols="TLSv1,TLSv1.1,TLSv1.2"

@cowwoc

This comment has been minimized.

Copy link
Author

cowwoc commented Sep 30, 2018

Digging into the stacktrace, it looks like TLS 1.3 is being used and support was only added in Java 11. So I'm guessing either Jetty is misconfiguring the SSLEngine somehow or this is a bug in the JDK's TLS 1.3 implementation.

@cowwoc cowwoc changed the title javax.net.ssl.SSLException: No PSK available. Unable to resume. Exception thrown when using TLS 1.3: javax.net.ssl.SSLException: No PSK available. Unable to resume. Sep 30, 2018

@cowwoc cowwoc changed the title Exception thrown when using TLS 1.3: javax.net.ssl.SSLException: No PSK available. Unable to resume. TLS 1.3: javax.net.ssl.SSLException: No PSK available. Unable to resume. Sep 30, 2018

@joakime

This comment has been minimized.

Copy link
Member

joakime commented Sep 30, 2018

@cowwoc not willing to jump to either of those conclusions yet.
What is your SslContextFactory configuration? Can you get us a Server.dump()?

@cowwoc

This comment has been minimized.

Copy link
Author

cowwoc commented Oct 1, 2018

@joakime I don't have a server-side component. This is purely client-side code. Is My client code looks like this:

		SslContextFactory sslContextFactory = new SslContextFactory(false);
		sslContextFactory.setEndpointIdentificationAlgorithm("HTTPS");

		HttpClient result = new HttpClient(sslContextFactory);
		QueuedThreadPool threadPool = new QueuedThreadPool();
		threadPool.setDetailedDump(true);
		result.setExecutor(threadPool);
		result.setRequestBufferSize(8192);

		result.setMaxConnectionsPerDestination(512);
		result.start();
		return result;

I manually invoked HttpClient.dump() after the aforementioned exception and here is what I got:

HttpClient@294e5088{STARTED} - STARTED
 += SslContextFactory@77cf7872[provider=null,keyStore=null,trustStore=null] trustAll=false
 |   +- Protocol Selections
 |   |   +- Enabled (size=4)
 |   |   |   +- TLSv1
 |   |   |   +- TLSv1.1
 |   |   |   +- TLSv1.2
 |   |   |   +- TLSv1.3
 |   |   +- Disabled (size=2)
 |   |       +- SSLv2Hello - ConfigExcluded:'SSLv2Hello' JVM:disabled
 |   |       +- SSLv3 - ConfigExcluded:'SSLv3' JVM:disabled
 |   +- Cipher Suite Selections
 |       +- Enabled (size=27)
 |       |   +- TLS_AES_128_GCM_SHA256
 |       |   +- TLS_AES_256_GCM_SHA384
 |       |   +- TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
 |       |   +- TLS_DHE_DSS_WITH_AES_128_GCM_SHA256
 |       |   +- TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
 |       |   +- TLS_DHE_DSS_WITH_AES_256_GCM_SHA384
 |       |   +- TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
 |       |   +- TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
 |       |   +- TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
 |       |   +- TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
 |       |   +- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
 |       |   +- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
 |       |   +- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
 |       |   +- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
 |       |   +- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
 |       |   +- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
 |       |   +- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
 |       |   +- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
 |       |   +- TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256
 |       |   +- TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256
 |       |   +- TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384
 |       |   +- TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384
 |       |   +- TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256
 |       |   +- TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256
 |       |   +- TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384
 |       |   +- TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384
 |       |   +- TLS_EMPTY_RENEGOTIATION_INFO_SCSV
 |       +- Disabled (size=38)
 |           +- SSL_DHE_DSS_WITH_DES_CBC_SHA - ConfigExcluded:'^.*_(MD5|SHA|SHA1)$', ConfigExcluded:'^SSL_.*$' JVM:disabled
 |           +- SSL_DHE_RSA_WITH_DES_CBC_SHA - ConfigExcluded:'^.*_(MD5|SHA|SHA1)$', ConfigExcluded:'^SSL_.*$' JVM:disabled
 |           +- SSL_DH_anon_WITH_DES_CBC_SHA - ConfigExcluded:'^.*_(MD5|SHA|SHA1)$', ConfigExcluded:'^SSL_.*$', ConfigExcluded:'^.*_anon_.*$' JVM:disabled
 |           +- SSL_RSA_WITH_DES_CBC_SHA - ConfigExcluded:'^.*_(MD5|SHA|SHA1)$', ConfigExcluded:'^SSL_.*$' JVM:disabled
 |           +- SSL_RSA_WITH_NULL_MD5 - ConfigExcluded:'^.*_(MD5|SHA|SHA1)$', ConfigExcluded:'^SSL_.*$', ConfigExcluded:'^.*_NULL_.*$' JVM:disabled
 |           +- SSL_RSA_WITH_NULL_SHA - ConfigExcluded:'^.*_(MD5|SHA|SHA1)$', ConfigExcluded:'^SSL_.*$', ConfigExcluded:'^.*_NULL_.*$' JVM:disabled
 |           +- TLS_DHE_DSS_WITH_AES_128_CBC_SHA - ConfigExcluded:'^.*_(MD5|SHA|SHA1)$'
 |           +- TLS_DHE_DSS_WITH_AES_256_CBC_SHA - ConfigExcluded:'^.*_(MD5|SHA|SHA1)$'
 |           +- TLS_DHE_RSA_WITH_AES_128_CBC_SHA - ConfigExcluded:'^.*_(MD5|SHA|SHA1)$'
 |           +- TLS_DHE_RSA_WITH_AES_256_CBC_SHA - ConfigExcluded:'^.*_(MD5|SHA|SHA1)$'
 |           +- TLS_DH_anon_WITH_AES_128_CBC_SHA - ConfigExcluded:'^.*_(MD5|SHA|SHA1)$', ConfigExcluded:'^.*_anon_.*$' JVM:disabled
 |           +- TLS_DH_anon_WITH_AES_128_CBC_SHA256 - ConfigExcluded:'^.*_anon_.*$' JVM:disabled
 |           +- TLS_DH_anon_WITH_AES_128_GCM_SHA256 - ConfigExcluded:'^.*_anon_.*$' JVM:disabled
 |           +- TLS_DH_anon_WITH_AES_256_CBC_SHA - ConfigExcluded:'^.*_(MD5|SHA|SHA1)$', ConfigExcluded:'^.*_anon_.*$' JVM:disabled
 |           +- TLS_DH_anon_WITH_AES_256_CBC_SHA256 - ConfigExcluded:'^.*_anon_.*$' JVM:disabled
 |           +- TLS_DH_anon_WITH_AES_256_GCM_SHA384 - ConfigExcluded:'^.*_anon_.*$' JVM:disabled
 |           +- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA - ConfigExcluded:'^.*_(MD5|SHA|SHA1)$'
 |           +- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA - ConfigExcluded:'^.*_(MD5|SHA|SHA1)$'
 |           +- TLS_ECDHE_ECDSA_WITH_NULL_SHA - ConfigExcluded:'^.*_(MD5|SHA|SHA1)$', ConfigExcluded:'^.*_NULL_.*$' JVM:disabled
 |           +- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - ConfigExcluded:'^.*_(MD5|SHA|SHA1)$'
 |           +- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - ConfigExcluded:'^.*_(MD5|SHA|SHA1)$'
 |           +- TLS_ECDHE_RSA_WITH_NULL_SHA - ConfigExcluded:'^.*_(MD5|SHA|SHA1)$', ConfigExcluded:'^.*_NULL_.*$' JVM:disabled
 |           +- TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA - ConfigExcluded:'^.*_(MD5|SHA|SHA1)$'
 |           +- TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA - ConfigExcluded:'^.*_(MD5|SHA|SHA1)$'
 |           +- TLS_ECDH_ECDSA_WITH_NULL_SHA - ConfigExcluded:'^.*_(MD5|SHA|SHA1)$', ConfigExcluded:'^.*_NULL_.*$' JVM:disabled
 |           +- TLS_ECDH_RSA_WITH_AES_128_CBC_SHA - ConfigExcluded:'^.*_(MD5|SHA|SHA1)$'
 |           +- TLS_ECDH_RSA_WITH_AES_256_CBC_SHA - ConfigExcluded:'^.*_(MD5|SHA|SHA1)$'
 |           +- TLS_ECDH_RSA_WITH_NULL_SHA - ConfigExcluded:'^.*_(MD5|SHA|SHA1)$', ConfigExcluded:'^.*_NULL_.*$' JVM:disabled
 |           +- TLS_ECDH_anon_WITH_AES_128_CBC_SHA - ConfigExcluded:'^.*_(MD5|SHA|SHA1)$', ConfigExcluded:'^.*_anon_.*$' JVM:disabled
 |           +- TLS_ECDH_anon_WITH_AES_256_CBC_SHA - ConfigExcluded:'^.*_(MD5|SHA|SHA1)$', ConfigExcluded:'^.*_anon_.*$' JVM:disabled
 |           +- TLS_ECDH_anon_WITH_NULL_SHA - ConfigExcluded:'^.*_(MD5|SHA|SHA1)$', ConfigExcluded:'^.*_NULL_.*$', ConfigExcluded:'^.*_anon_.*$' JVM:disabled
 |           +- TLS_RSA_WITH_AES_128_CBC_SHA - ConfigExcluded:'^.*_(MD5|SHA|SHA1)$', ConfigExcluded:'^TLS_RSA_.*$'
 |           +- TLS_RSA_WITH_AES_128_CBC_SHA256 - ConfigExcluded:'^TLS_RSA_.*$'
 |           +- TLS_RSA_WITH_AES_128_GCM_SHA256 - ConfigExcluded:'^TLS_RSA_.*$'
 |           +- TLS_RSA_WITH_AES_256_CBC_SHA - ConfigExcluded:'^.*_(MD5|SHA|SHA1)$', ConfigExcluded:'^TLS_RSA_.*$'
 |           +- TLS_RSA_WITH_AES_256_CBC_SHA256 - ConfigExcluded:'^TLS_RSA_.*$'
 |           +- TLS_RSA_WITH_AES_256_GCM_SHA384 - ConfigExcluded:'^TLS_RSA_.*$'
 |           +- TLS_RSA_WITH_NULL_SHA256 - ConfigExcluded:'^TLS_RSA_.*$', ConfigExcluded:'^.*_NULL_.*$' JVM:disabled
 += QueuedThreadPool[qtp1713568869]@6622fc65{STARTED,8<=38<=200,i=0,q=4}[ReservedThreadExecutor@6b20e241{s=1/4,p=0}] - STARTED
 |   += ReservedThreadExecutor@6b20e241{s=1/4,p=0} - STARTED
 |   +> 65 qtp1713568869-65 RESERVED RUNNABLE
 |   +> 60 qtp1713568869-60 BLOCKED
 |   |   +- java.base@11/java.lang.Thread.dumpThreads(Native Method)
 |   |   +- java.base@11/java.lang.Thread.getStackTrace(Thread.java:1597)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool.dump(QueuedThreadPool.java:572)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dumpBeans(ContainerLifeCycle.java:701)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dump(ContainerLifeCycle.java:675)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dump(ContainerLifeCycle.java:638)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dump(ContainerLifeCycle.java:630)
 |   |   +- app//com.myapplication.exchange.client.AbstractClient.lambda$run$7(AbstractClient.java:367)
 |   |   +- app//com.myapplication.exchange.client.AbstractClient$$Lambda$196/0x0000000800400040.accept(Unknown Source)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088)
 |   |   +- app//com.myapplication.exchange.scope.ResponseListener.onComplete(ResponseListener.java:43)
 |   |   +- app//org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:202)
 |   |   +- app//org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:194)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.terminateRequest(HttpSender.java:395)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.abort(HttpSender.java:566)
 |   |   +- app//org.eclipse.jetty.client.HttpChannel.abort(HttpChannel.java:145)
 |   |   +- app//org.eclipse.jetty.client.HttpExchange.abort(HttpExchange.java:257)
 |   |   +- app//org.eclipse.jetty.client.HttpConversation.abort(HttpConversation.java:141)
 |   |   +- app//org.eclipse.jetty.client.HttpRequest.abort(HttpRequest.java:767)
 |   |   +- app//org.eclipse.jetty.client.http.HttpConnectionOverHTTP.abort(HttpConnectionOverHTTP.java:204)
 |   |   +- app//org.eclipse.jetty.client.http.HttpConnectionOverHTTP.close(HttpConnectionOverHTTP.java:190)
 |   |   +- app//org.eclipse.jetty.client.http.HttpReceiverOverHTTP.failAndClose(HttpReceiverOverHTTP.java:370)
 |   |   +- app//org.eclipse.jetty.client.http.HttpReceiverOverHTTP.earlyEOF(HttpReceiverOverHTTP.java:338)
 |   |   +- app//org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:1551)
 |   |   +- app//org.eclipse.jetty.client.http.HttpReceiverOverHTTP.shutdown(HttpReceiverOverHTTP.java:209)
 |   |   +- app//org.eclipse.jetty.client.http.HttpReceiverOverHTTP.process(HttpReceiverOverHTTP.java:147)
 |   |   +- app//org.eclipse.jetty.client.http.HttpReceiverOverHTTP.receive(HttpReceiverOverHTTP.java:73)
 |   |   +- app//org.eclipse.jetty.client.http.HttpChannelOverHTTP.receive(HttpChannelOverHTTP.java:133)
 |   |   +- app//org.eclipse.jetty.client.http.HttpConnectionOverHTTP.onFillable(HttpConnectionOverHTTP.java:155)
 |   |   +- app//org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)
 |   |   +- app//org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$1.run(SslConnection.java:144)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
 |   |   +- java.base@11/java.lang.Thread.run(Thread.java:834)
 |   +> 52 qtp1713568869-52 BLOCKED
 |   |   +- java.base@11/java.lang.Thread.dumpThreads(Native Method)
 |   |   +- java.base@11/java.lang.Thread.getStackTrace(Thread.java:1597)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool.dump(QueuedThreadPool.java:572)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dumpBeans(ContainerLifeCycle.java:701)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dump(ContainerLifeCycle.java:675)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dump(ContainerLifeCycle.java:638)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dump(ContainerLifeCycle.java:630)
 |   |   +- app//com.myapplication.exchange.client.AbstractClient.lambda$run$7(AbstractClient.java:367)
 |   |   +- app//com.myapplication.exchange.client.AbstractClient$$Lambda$196/0x0000000800400040.accept(Unknown Source)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088)
 |   |   +- app//com.myapplication.exchange.scope.ResponseListener.onComplete(ResponseListener.java:43)
 |   |   +- app//org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:202)
 |   |   +- app//org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:194)
 |   |   +- app//org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:470)
 |   |   +- app//org.eclipse.jetty.client.HttpReceiver.abort(HttpReceiver.java:552)
 |   |   +- app//org.eclipse.jetty.client.HttpChannel.abortResponse(HttpChannel.java:156)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.terminateRequest(HttpSender.java:381)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.abort(HttpSender.java:566)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.anyToFailure(HttpSender.java:350)
 |   |   +- app//org.eclipse.jetty.client.HttpSender$CommitCallback.failed(HttpSender.java:717)
 |   |   +- app//org.eclipse.jetty.client.http.HttpSenderOverHTTP$HeadersCallback.failed(HttpSenderOverHTTP.java:310)
 |   |   +- app//org.eclipse.jetty.io.WriteFlusher.fail(WriteFlusher.java:319)
 |   |   +- app//org.eclipse.jetty.io.WriteFlusher.completeWrite(WriteFlusher.java:376)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.lambda$fill$1(SslConnection.java:650)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint$$Lambda$252/0x0000000800426040.run(Unknown Source)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
 |   |   +- java.base@11/java.lang.Thread.run(Thread.java:834)
 |   +> 37 qtp1713568869-37 RUNNABLE
 |   |   +- java.base@11/sun.nio.ch.SelectionKeyImpl.ensureValid(SelectionKeyImpl.java:71)
 |   |   +- java.base@11/sun.nio.ch.SelectionKeyImpl.interestOps(SelectionKeyImpl.java:96)
 |   |   +- app//org.eclipse.jetty.io.ChannelEndPoint.updateKey(ChannelEndPoint.java:381)
 |   |   +- app//org.eclipse.jetty.io.ChannelEndPoint$1.update(ChannelEndPoint.java:103)
 |   |   +- app//org.eclipse.jetty.io.ManagedSelector$SelectorProducer.processUpdates(ManagedSelector.java:384)
 |   |   +- app//org.eclipse.jetty.io.ManagedSelector$SelectorProducer.produce(ManagedSelector.java:355)
 |   |   +- app//org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produceTask(EatWhatYouKill.java:357)
 |   |   +- app//org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:181)
 |   |   +- app//org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168)
 |   |   +- app//org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:126)
 |   |   +- app//org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:366)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
 |   |   +- java.base@11/java.lang.Thread.run(Thread.java:834)
 |   +> 66 qtp1713568869-66 RESERVED RUNNABLE
 |   +> 35 qtp1713568869-35 RUNNABLE
 |   |   +- app//org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.<init>(AbstractWebSocketConnection.java:147)
 |   |   +- app//org.eclipse.jetty.websocket.client.io.WebSocketClientConnection.<init>(WebSocketClientConnection.java:46)
 |   |   +- app//org.eclipse.jetty.websocket.client.WebSocketUpgradeRequest.upgrade(WebSocketUpgradeRequest.java:574)
 |   |   +- app//org.eclipse.jetty.client.http.HttpChannelOverHTTP.exchangeTerminating(HttpChannelOverHTTP.java:118)
 |   |   +- app//org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:462)
 |   |   +- app//org.eclipse.jetty.client.HttpReceiver.responseSuccess(HttpReceiver.java:416)
 |   |   +- app//org.eclipse.jetty.client.http.HttpReceiverOverHTTP.messageComplete(HttpReceiverOverHTTP.java:316)
 |   |   +- app//org.eclipse.jetty.http.HttpParser.handleHeaderContentMessage(HttpParser.java:591)
 |   |   +- app//org.eclipse.jetty.http.HttpParser.parseFields(HttpParser.java:1213)
 |   |   +- app//org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:1502)
 |   |   +- app//org.eclipse.jetty.client.http.HttpReceiverOverHTTP.parse(HttpReceiverOverHTTP.java:172)
 |   |   +- app//org.eclipse.jetty.client.http.HttpReceiverOverHTTP.process(HttpReceiverOverHTTP.java:135)
 |   |   +- app//org.eclipse.jetty.client.http.HttpReceiverOverHTTP.receive(HttpReceiverOverHTTP.java:73)
 |   |   +- app//org.eclipse.jetty.client.http.HttpChannelOverHTTP.receive(HttpChannelOverHTTP.java:133)
 |   |   +- app//org.eclipse.jetty.client.http.HttpConnectionOverHTTP.onFillable(HttpConnectionOverHTTP.java:155)
 |   |   +- app//org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)
 |   |   +- app//org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:411)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:305)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:159)
 |   |   +- app//org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
 |   |   +- app//org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118)
 |   |   +- app//org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:333)
 |   |   +- app//org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:310)
 |   |   +- app//org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168)
 |   |   +- app//org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:126)
 |   |   +- app//org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:366)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
 |   |   +- java.base@11/java.lang.Thread.run(Thread.java:834)
 |   +> 57 qtp1713568869-57 RUNNABLE
 |   |   +- app//com.myapplication.exchange.client.AbstractClient.lambda$run$7(AbstractClient.java:367)
 |   |   +- app//com.myapplication.exchange.client.AbstractClient$$Lambda$196/0x0000000800400040.accept(Unknown Source)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088)
 |   |   +- app//com.myapplication.exchange.scope.ResponseListener.onComplete(ResponseListener.java:43)
 |   |   +- app//org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:202)
 |   |   +- app//org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:194)
 |   |   +- app//org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:470)
 |   |   +- app//org.eclipse.jetty.client.HttpReceiver.abort(HttpReceiver.java:552)
 |   |   +- app//org.eclipse.jetty.client.HttpChannel.abortResponse(HttpChannel.java:156)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.terminateRequest(HttpSender.java:381)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.abort(HttpSender.java:566)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.anyToFailure(HttpSender.java:350)
 |   |   +- app//org.eclipse.jetty.client.HttpSender$CommitCallback.failed(HttpSender.java:717)
 |   |   +- app//org.eclipse.jetty.client.http.HttpSenderOverHTTP$HeadersCallback.failed(HttpSenderOverHTTP.java:310)
 |   |   +- app//org.eclipse.jetty.io.WriteFlusher.fail(WriteFlusher.java:319)
 |   |   +- app//org.eclipse.jetty.io.WriteFlusher.completeWrite(WriteFlusher.java:376)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.lambda$fill$1(SslConnection.java:650)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint$$Lambda$252/0x0000000800426040.run(Unknown Source)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
 |   |   +- java.base@11/java.lang.Thread.run(Thread.java:834)
 |   +> 62 qtp1713568869-62 RUNNABLE
 |   |   +- app//com.myapplication.exchange.client.AbstractClient.lambda$run$7(AbstractClient.java:367)
 |   |   +- app//com.myapplication.exchange.client.AbstractClient$$Lambda$196/0x0000000800400040.accept(Unknown Source)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088)
 |   |   +- app//com.myapplication.exchange.scope.ResponseListener.onComplete(ResponseListener.java:43)
 |   |   +- app//org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:202)
 |   |   +- app//org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:194)
 |   |   +- app//org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:470)
 |   |   +- app//org.eclipse.jetty.client.HttpReceiver.abort(HttpReceiver.java:552)
 |   |   +- app//org.eclipse.jetty.client.HttpChannel.abortResponse(HttpChannel.java:156)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.terminateRequest(HttpSender.java:381)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.abort(HttpSender.java:566)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.anyToFailure(HttpSender.java:350)
 |   |   +- app//org.eclipse.jetty.client.HttpSender$CommitCallback.failed(HttpSender.java:717)
 |   |   +- app//org.eclipse.jetty.client.http.HttpSenderOverHTTP$HeadersCallback.failed(HttpSenderOverHTTP.java:310)
 |   |   +- app//org.eclipse.jetty.io.WriteFlusher.fail(WriteFlusher.java:319)
 |   |   +- app//org.eclipse.jetty.io.WriteFlusher.completeWrite(WriteFlusher.java:376)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.lambda$fill$1(SslConnection.java:650)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint$$Lambda$252/0x0000000800426040.run(Unknown Source)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
 |   |   +- java.base@11/java.lang.Thread.run(Thread.java:834)
 |   +> 18 qtp1713568869-18 RESERVED RUNNABLE
 |   +> 23 qtp1713568869-23 RUNNABLE
 |   |   +- app//com.myapplication.exchange.client.AbstractClient.lambda$run$7(AbstractClient.java:367)
 |   |   +- app//com.myapplication.exchange.client.AbstractClient$$Lambda$196/0x0000000800400040.accept(Unknown Source)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088)
 |   |   +- app//com.myapplication.exchange.scope.ResponseListener.onComplete(ResponseListener.java:43)
 |   |   +- app//org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:202)
 |   |   +- app//org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:194)
 |   |   +- app//org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:470)
 |   |   +- app//org.eclipse.jetty.client.HttpReceiver.abort(HttpReceiver.java:552)
 |   |   +- app//org.eclipse.jetty.client.HttpChannel.abortResponse(HttpChannel.java:156)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.terminateRequest(HttpSender.java:381)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.abort(HttpSender.java:566)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.anyToFailure(HttpSender.java:350)
 |   |   +- app//org.eclipse.jetty.client.HttpSender$CommitCallback.failed(HttpSender.java:717)
 |   |   +- app//org.eclipse.jetty.client.http.HttpSenderOverHTTP$HeadersCallback.failed(HttpSenderOverHTTP.java:310)
 |   |   +- app//org.eclipse.jetty.io.WriteFlusher.fail(WriteFlusher.java:319)
 |   |   +- app//org.eclipse.jetty.io.WriteFlusher.completeWrite(WriteFlusher.java:376)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.lambda$fill$1(SslConnection.java:650)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint$$Lambda$252/0x0000000800426040.run(Unknown Source)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
 |   |   +- java.base@11/java.lang.Thread.run(Thread.java:834)
 |   +> 68 qtp1713568869-68 RUNNABLE
 |   +> 38 qtp1713568869-38 BLOCKED
 |   |   +- java.base@11/java.lang.Thread.dumpThreads(Native Method)
 |   |   +- java.base@11/java.lang.Thread.getStackTrace(Thread.java:1597)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool.dump(QueuedThreadPool.java:572)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dumpBeans(ContainerLifeCycle.java:701)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dump(ContainerLifeCycle.java:675)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dump(ContainerLifeCycle.java:638)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dump(ContainerLifeCycle.java:630)
 |   |   +- app//com.myapplication.exchange.client.AbstractClient.lambda$run$7(AbstractClient.java:367)
 |   |   +- app//com.myapplication.exchange.client.AbstractClient$$Lambda$196/0x0000000800400040.accept(Unknown Source)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088)
 |   |   +- app//com.myapplication.exchange.scope.ResponseListener.onComplete(ResponseListener.java:43)
 |   |   +- app//org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:202)
 |   |   +- app//org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:194)
 |   |   +- app//org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:470)
 |   |   +- app//org.eclipse.jetty.client.HttpReceiver.abort(HttpReceiver.java:552)
 |   |   +- app//org.eclipse.jetty.client.HttpChannel.abortResponse(HttpChannel.java:156)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.terminateRequest(HttpSender.java:381)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.abort(HttpSender.java:566)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.anyToFailure(HttpSender.java:350)
 |   |   +- app//org.eclipse.jetty.client.HttpSender$CommitCallback.failed(HttpSender.java:717)
 |   |   +- app//org.eclipse.jetty.client.http.HttpSenderOverHTTP$HeadersCallback.failed(HttpSenderOverHTTP.java:310)
 |   |   +- app//org.eclipse.jetty.io.WriteFlusher.fail(WriteFlusher.java:319)
 |   |   +- app//org.eclipse.jetty.io.WriteFlusher.completeWrite(WriteFlusher.java:376)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.lambda$fill$1(SslConnection.java:650)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint$$Lambda$252/0x0000000800426040.run(Unknown Source)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
 |   |   +- java.base@11/java.lang.Thread.run(Thread.java:834)
 |   +> 19 qtp1713568869-19 SELECTING RUNNABLE
 |   +> 54 qtp1713568869-54 BLOCKED
 |   |   +- java.base@11/java.lang.Thread.dumpThreads(Native Method)
 |   |   +- java.base@11/java.lang.Thread.getStackTrace(Thread.java:1597)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool.dump(QueuedThreadPool.java:572)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dumpBeans(ContainerLifeCycle.java:701)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dump(ContainerLifeCycle.java:675)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dump(ContainerLifeCycle.java:638)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dump(ContainerLifeCycle.java:630)
 |   |   +- app//com.myapplication.exchange.client.AbstractClient.lambda$run$7(AbstractClient.java:367)
 |   |   +- app//com.myapplication.exchange.client.AbstractClient$$Lambda$196/0x0000000800400040.accept(Unknown Source)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088)
 |   |   +- app//com.myapplication.exchange.scope.ResponseListener.onComplete(ResponseListener.java:43)
 |   |   +- app//org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:202)
 |   |   +- app//org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:194)
 |   |   +- app//org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:470)
 |   |   +- app//org.eclipse.jetty.client.HttpReceiver.abort(HttpReceiver.java:552)
 |   |   +- app//org.eclipse.jetty.client.HttpChannel.abortResponse(HttpChannel.java:156)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.terminateRequest(HttpSender.java:381)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.abort(HttpSender.java:566)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.anyToFailure(HttpSender.java:350)
 |   |   +- app//org.eclipse.jetty.client.HttpSender$CommitCallback.failed(HttpSender.java:717)
 |   |   +- app//org.eclipse.jetty.client.http.HttpSenderOverHTTP$HeadersCallback.failed(HttpSenderOverHTTP.java:310)
 |   |   +- app//org.eclipse.jetty.io.WriteFlusher.fail(WriteFlusher.java:319)
 |   |   +- app//org.eclipse.jetty.io.WriteFlusher.completeWrite(WriteFlusher.java:376)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.lambda$fill$1(SslConnection.java:650)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint$$Lambda$252/0x0000000800426040.run(Unknown Source)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
 |   |   +- java.base@11/java.lang.Thread.run(Thread.java:834)
 |   +> 17 qtp1713568869-17 RUNNABLE
 |   |   +- app//com.myapplication.exchange.client.AbstractClient.lambda$run$7(AbstractClient.java:367)
 |   |   +- app//com.myapplication.exchange.client.AbstractClient$$Lambda$196/0x0000000800400040.accept(Unknown Source)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088)
 |   |   +- app//com.myapplication.exchange.scope.ResponseListener.onComplete(ResponseListener.java:43)
 |   |   +- app//org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:202)
 |   |   +- app//org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:194)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.terminateRequest(HttpSender.java:395)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.abort(HttpSender.java:566)
 |   |   +- app//org.eclipse.jetty.client.HttpChannel.abort(HttpChannel.java:145)
 |   |   +- app//org.eclipse.jetty.client.HttpExchange.abort(HttpExchange.java:257)
 |   |   +- app//org.eclipse.jetty.client.HttpConversation.abort(HttpConversation.java:141)
 |   |   +- app//org.eclipse.jetty.client.HttpRequest.abort(HttpRequest.java:767)
 |   |   +- app//org.eclipse.jetty.client.http.HttpConnectionOverHTTP.abort(HttpConnectionOverHTTP.java:204)
 |   |   +- app//org.eclipse.jetty.client.http.HttpConnectionOverHTTP.close(HttpConnectionOverHTTP.java:190)
 |   |   +- app//org.eclipse.jetty.client.http.HttpReceiverOverHTTP.failAndClose(HttpReceiverOverHTTP.java:370)
 |   |   +- app//org.eclipse.jetty.client.http.HttpReceiverOverHTTP.earlyEOF(HttpReceiverOverHTTP.java:338)
 |   |   +- app//org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:1551)
 |   |   +- app//org.eclipse.jetty.client.http.HttpReceiverOverHTTP.shutdown(HttpReceiverOverHTTP.java:209)
 |   |   +- app//org.eclipse.jetty.client.http.HttpReceiverOverHTTP.process(HttpReceiverOverHTTP.java:147)
 |   |   +- app//org.eclipse.jetty.client.http.HttpReceiverOverHTTP.receive(HttpReceiverOverHTTP.java:73)
 |   |   +- app//org.eclipse.jetty.client.http.HttpChannelOverHTTP.receive(HttpChannelOverHTTP.java:133)
 |   |   +- app//org.eclipse.jetty.client.http.HttpConnectionOverHTTP.onFillable(HttpConnectionOverHTTP.java:155)
 |   |   +- app//org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)
 |   |   +- app//org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$1.run(SslConnection.java:144)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
 |   |   +- java.base@11/java.lang.Thread.run(Thread.java:834)
 |   +> 59 qtp1713568869-59 SELECTING TIMED_WAITING
 |   +> 61 qtp1713568869-61 BLOCKED
 |   |   +- java.base@11/java.lang.Thread.dumpThreads(Native Method)
 |   |   +- java.base@11/java.lang.Thread.getStackTrace(Thread.java:1597)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool.dump(QueuedThreadPool.java:572)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dumpBeans(ContainerLifeCycle.java:701)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dump(ContainerLifeCycle.java:675)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dump(ContainerLifeCycle.java:638)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dump(ContainerLifeCycle.java:630)
 |   |   +- app//com.myapplication.exchange.client.AbstractClient.lambda$run$7(AbstractClient.java:367)
 |   |   +- app//com.myapplication.exchange.client.AbstractClient$$Lambda$196/0x0000000800400040.accept(Unknown Source)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088)
 |   |   +- app//com.myapplication.exchange.scope.ResponseListener.onComplete(ResponseListener.java:43)
 |   |   +- app//org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:202)
 |   |   +- app//org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:194)
 |   |   +- app//org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:470)
 |   |   +- app//org.eclipse.jetty.client.HttpReceiver.abort(HttpReceiver.java:552)
 |   |   +- app//org.eclipse.jetty.client.HttpChannel.abortResponse(HttpChannel.java:156)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.terminateRequest(HttpSender.java:381)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.abort(HttpSender.java:566)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.anyToFailure(HttpSender.java:350)
 |   |   +- app//org.eclipse.jetty.client.HttpSender$CommitCallback.failed(HttpSender.java:717)
 |   |   +- app//org.eclipse.jetty.client.http.HttpSenderOverHTTP$HeadersCallback.failed(HttpSenderOverHTTP.java:310)
 |   |   +- app//org.eclipse.jetty.io.WriteFlusher.fail(WriteFlusher.java:319)
 |   |   +- app//org.eclipse.jetty.io.WriteFlusher.completeWrite(WriteFlusher.java:376)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.lambda$fill$1(SslConnection.java:650)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint$$Lambda$252/0x0000000800426040.run(Unknown Source)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
 |   |   +- java.base@11/java.lang.Thread.run(Thread.java:834)
 |   +> 21 qtp1713568869-21 RUNNABLE
 |   |   +- java.base@11/sun.security.ssl.SSLEngineImpl.getHandshakeStatus(SSLEngineImpl.java:805)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.flush(SslConnection.java:827)
 |   |   +- app//org.eclipse.jetty.io.WriteFlusher.flush(WriteFlusher.java:393)
 |   |   +- app//org.eclipse.jetty.io.WriteFlusher.write(WriteFlusher.java:277)
 |   |   +- app//org.eclipse.jetty.io.AbstractEndPoint.write(AbstractEndPoint.java:380)
 |   |   +- app//org.eclipse.jetty.client.http.HttpSenderOverHTTP$HeadersCallback.process(HttpSenderOverHTTP.java:268)
 |   |   +- app//org.eclipse.jetty.util.IteratingCallback.processing(IteratingCallback.java:241)
 |   |   +- app//org.eclipse.jetty.util.IteratingCallback.iterate(IteratingCallback.java:224)
 |   |   +- app//org.eclipse.jetty.client.http.HttpSenderOverHTTP.sendHeaders(HttpSenderOverHTTP.java:62)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.send(HttpSender.java:212)
 |   |   +- app//org.eclipse.jetty.client.http.HttpChannelOverHTTP.send(HttpChannelOverHTTP.java:85)
 |   |   +- app//org.eclipse.jetty.client.HttpChannel.send(HttpChannel.java:128)
 |   |   +- app//org.eclipse.jetty.client.HttpConnection.send(HttpConnection.java:201)
 |   |   +- app//org.eclipse.jetty.client.http.HttpConnectionOverHTTP$Delegate.send(HttpConnectionOverHTTP.java:253)
 |   |   +- app//org.eclipse.jetty.client.http.HttpConnectionOverHTTP.send(HttpConnectionOverHTTP.java:122)
 |   |   +- app//org.eclipse.jetty.client.http.HttpDestinationOverHTTP.send(HttpDestinationOverHTTP.java:38)
 |   |   +- app//org.eclipse.jetty.client.HttpDestination.process(HttpDestination.java:347)
 |   |   +- app//org.eclipse.jetty.client.HttpDestination.process(HttpDestination.java:305)
 |   |   +- app//org.eclipse.jetty.client.HttpDestination.send(HttpDestination.java:295)
 |   |   +- app//org.eclipse.jetty.client.HttpDestination.send(HttpDestination.java:270)
 |   |   +- app//org.eclipse.jetty.client.HttpDestination.send(HttpDestination.java:247)
 |   |   +- app//org.eclipse.jetty.client.HttpClient.send(HttpClient.java:578)
 |   |   +- app//org.eclipse.jetty.client.HttpRequest.send(HttpRequest.java:727)
 |   |   +- app//org.eclipse.jetty.client.HttpRequest.send(HttpRequest.java:719)
 |   |   +- app//com.myapplication.exchange.client.AbstractClient.lambda$run$8(AbstractClient.java:371)
 |   |   +- app//com.myapplication.exchange.client.AbstractClient$$Lambda$192/0x00000008003f6c40.apply(Unknown Source)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture$ComposeForwarder.apply(DebugCompletableFuture.java:1006)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture$ComposeForwarder.apply(DebugCompletableFuture.java:972)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1106)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2235)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture.thenCompose(DebugCompletableFuture.java:653)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture.thenCompose(DebugCompletableFuture.java:47)
 |   |   +- app//com.myapplication.exchange.client.AbstractClient.lambda$run$9(AbstractClient.java:356)
 |   |   +- app//com.myapplication.exchange.client.AbstractClient$$Lambda$190/0x00000008003f6440.call(Unknown Source)
 |   |   +- app//com.myapplication.exchange.util.Completions.compose(Completions.java:280)
 |   |   +- app//com.myapplication.exchange.client.AbstractClient.run(AbstractClient.java:348)
 |   |   +- app//com.myapplication.exchange.client.AbstractClient.runNextRequest(AbstractClient.java:180)
 |   |   +- app//com.myapplication.exchange.client.AbstractClient.uniqueRequest(AbstractClient.java:146)
 |   |   +- app//com.myapplication.kucoin.KuCoinAuthenticatedExchange$AuthenticatedMetadataUpdater.lambda$getMinimumAmount$8(KuCoinAuthenticatedExchange.java:1189)
 |   |   +- app//com.myapplication.kucoin.KuCoinAuthenticatedExchange$AuthenticatedMetadataUpdater$$Lambda$301/0x0000000800469c40.call(Unknown Source)
 |   |   +- app//com.myapplication.exchange.util.Completions.compose(Completions.java:280)
 |   |   +- app//com.myapplication.kucoin.KuCoinAuthenticatedExchange$AuthenticatedMetadataUpdater.lambda$getMinimumAmount$11(KuCoinAuthenticatedExchange.java:1182)
 |   |   +- app//com.myapplication.kucoin.KuCoinAuthenticatedExchange$AuthenticatedMetadataUpdater$$Lambda$300/0x000000080046a840.call(Unknown Source)
 |   |   +- app//com.myapplication.exchange.util.Completions.compose(Completions.java:280)
 |   |   +- app//com.myapplication.kucoin.KuCoinAuthenticatedExchange$AuthenticatedMetadataUpdater.getMinimumAmount(KuCoinAuthenticatedExchange.java:1178)
 |   |   +- app//com.myapplication.kucoin.KuCoinAuthenticatedExchange$AuthenticatedMetadataUpdater.lambda$computeChanges$3(KuCoinAuthenticatedExchange.java:1102)
 |   |   +- app//com.myapplication.kucoin.KuCoinAuthenticatedExchange$AuthenticatedMetadataUpdater$$Lambda$296/0x000000080046cc40.apply(Unknown Source)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture$ComposeForwarder.apply(DebugCompletableFuture.java:1006)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture$ComposeForwarder.apply(DebugCompletableFuture.java:972)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1106)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2235)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture.thenCompose(DebugCompletableFuture.java:653)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture.thenCompose(DebugCompletableFuture.java:47)
 |   |   +- app//com.myapplication.kucoin.KuCoinAuthenticatedExchange$AuthenticatedMetadataUpdater.lambda$computeChanges$4(KuCoinAuthenticatedExchange.java:1030)
 |   |   +- app//com.myapplication.kucoin.KuCoinAuthenticatedExchange$AuthenticatedMetadataUpdater$$Lambda$295/0x000000080046c840.apply(Unknown Source)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture$ComposeForwarder.apply(DebugCompletableFuture.java:1006)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture$ComposeForwarder.apply(DebugCompletableFuture.java:972)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1106)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2235)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture.thenCompose(DebugCompletableFuture.java:653)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture.thenCompose(DebugCompletableFuture.java:47)
 |   |   +- app//com.myapplication.kucoin.KuCoinAuthenticatedExchange$AuthenticatedMetadataUpdater.lambda$computeChanges$5(KuCoinAuthenticatedExchange.java:1029)
 |   |   +- app//com.myapplication.kucoin.KuCoinAuthenticatedExchange$AuthenticatedMetadataUpdater$$Lambda$243/0x0000000800421040.apply(Unknown Source)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture$ComposeForwarder.apply(DebugCompletableFuture.java:1006)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture$ComposeForwarder.apply(DebugCompletableFuture.java:972)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1072)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2073)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture.forwardCompletion(DebugCompletableFuture.java:129)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture.lambda$new$1(DebugCompletableFuture.java:107)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture$$Lambda$89/0x0000000800188c40.accept(Unknown Source)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2073)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture.forwardCompletion(DebugCompletableFuture.java:129)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture.lambda$new$1(DebugCompletableFuture.java:107)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture$$Lambda$89/0x0000000800188c40.accept(Unknown Source)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2073)
 |   |   +- app//com.myapplication.exchange.util.Completions.lambda$forwardTo$26(Completions.java:682)
 |   |   +- app//com.myapplication.exchange.util.Completions$$Lambda$217/0x0000000800412440.accept(Unknown Source)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2073)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture.forwardCompletion(DebugCompletableFuture.java:129)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture.lambda$new$1(DebugCompletableFuture.java:107)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture$$Lambda$89/0x0000000800188c40.accept(Unknown Source)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2073)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture.forwardCompletion(DebugCompletableFuture.java:129)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture.lambda$new$1(DebugCompletableFuture.java:107)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture$$Lambda$89/0x0000000800188c40.accept(Unknown Source)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2073)
 |   |   +- app//com.myapplication.exchange.client.AbstractClient.requestSucceeded(AbstractClient.java:336)
 |   |   +- app//com.myapplication.exchange.client.SuccessfulResponse.update(SuccessfulResponse.java:31)
 |   |   +- app//com.myapplication.exchange.client.AbstractClient.lambda$run$12(AbstractClient.java:391)
 |   |   +- app//com.myapplication.exchange.client.AbstractClient$$Lambda$209/0x0000000800410440.accept(Unknown Source)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2073)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture.forwardCompletion(DebugCompletableFuture.java:129)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture.lambda$new$1(DebugCompletableFuture.java:107)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture$$Lambda$89/0x0000000800188c40.accept(Unknown Source)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2073)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture.forwardCompletion(DebugCompletableFuture.java:129)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture.lambda$new$1(DebugCompletableFuture.java:107)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture$$Lambda$89/0x0000000800188c40.accept(Unknown Source)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2073)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture.forwardCompletion(DebugCompletableFuture.java:129)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture.lambda$new$1(DebugCompletableFuture.java:107)
 |   |   +- app//com.myapplication.exchange.util.DebugCompletableFuture$$Lambda$89/0x0000000800188c40.accept(Unknown Source)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2073)
 |   |   +- app//com.myapplication.exchange.scope.ResponseListener.onComplete(ResponseListener.java:50)
 |   |   +- app//org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:202)
 |   |   +- app//org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:194)
 |   |   +- app//org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:470)
 |   |   +- app//org.eclipse.jetty.client.HttpReceiver.responseSuccess(HttpReceiver.java:416)
 |   |   +- app//org.eclipse.jetty.client.http.HttpReceiverOverHTTP.messageComplete(HttpReceiverOverHTTP.java:316)
 |   |   +- app//org.eclipse.jetty.http.HttpParser.parseFields(HttpParser.java:1165)
 |   |   +- app//org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:1525)
 |   |   +- app//org.eclipse.jetty.client.http.HttpReceiverOverHTTP.parse(HttpReceiverOverHTTP.java:172)
 |   |   +- app//org.eclipse.jetty.client.http.HttpReceiverOverHTTP.process(HttpReceiverOverHTTP.java:135)
 |   |   +- app//org.eclipse.jetty.client.http.HttpReceiverOverHTTP.receive(HttpReceiverOverHTTP.java:73)
 |   |   +- app//org.eclipse.jetty.client.http.HttpChannelOverHTTP.receive(HttpChannelOverHTTP.java:133)
 |   |   +- app//org.eclipse.jetty.client.http.HttpConnectionOverHTTP.onFillable(HttpConnectionOverHTTP.java:155)
 |   |   +- app//org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)
 |   |   +- app//org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:411)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:305)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:159)
 |   |   +- app//org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
 |   |   +- app//org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118)
 |   |   +- app//org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:333)
 |   |   +- app//org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:310)
 |   |   +- app//org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168)
 |   |   +- app//org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:126)
 |   |   +- app//org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:366)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
 |   |   +- java.base@11/java.lang.Thread.run(Thread.java:834)
 |   +> 67 qtp1713568869-67 RUNNABLE
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.fill(SslConnection.java:485)
 |   |   +- app//org.eclipse.jetty.client.http.HttpReceiverOverHTTP.process(HttpReceiverOverHTTP.java:128)
 |   |   +- app//org.eclipse.jetty.client.http.HttpReceiverOverHTTP.receive(HttpReceiverOverHTTP.java:73)
 |   |   +- app//org.eclipse.jetty.client.http.HttpChannelOverHTTP.receive(HttpChannelOverHTTP.java:133)
 |   |   +- app//org.eclipse.jetty.client.http.HttpConnectionOverHTTP.onFillable(HttpConnectionOverHTTP.java:155)
 |   |   +- app//org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)
 |   |   +- app//org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$1.run(SslConnection.java:144)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
 |   |   +- java.base@11/java.lang.Thread.run(Thread.java:834)
 |   +> 22 qtp1713568869-22 RUNNABLE
 |   |   +- app//com.myapplication.exchange.client.AbstractClient.lambda$run$7(AbstractClient.java:367)
 |   |   +- app//com.myapplication.exchange.client.AbstractClient$$Lambda$196/0x0000000800400040.accept(Unknown Source)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088)
 |   |   +- app//com.myapplication.exchange.scope.ResponseListener.onComplete(ResponseListener.java:43)
 |   |   +- app//org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:202)
 |   |   +- app//org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:194)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.terminateRequest(HttpSender.java:395)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.abort(HttpSender.java:566)
 |   |   +- app//org.eclipse.jetty.client.HttpChannel.abort(HttpChannel.java:145)
 |   |   +- app//org.eclipse.jetty.client.HttpExchange.abort(HttpExchange.java:257)
 |   |   +- app//org.eclipse.jetty.client.HttpConversation.abort(HttpConversation.java:141)
 |   |   +- app//org.eclipse.jetty.client.HttpRequest.abort(HttpRequest.java:767)
 |   |   +- app//org.eclipse.jetty.client.http.HttpConnectionOverHTTP.abort(HttpConnectionOverHTTP.java:204)
 |   |   +- app//org.eclipse.jetty.client.http.HttpConnectionOverHTTP.close(HttpConnectionOverHTTP.java:190)
 |   |   +- app//org.eclipse.jetty.client.http.HttpReceiverOverHTTP.failAndClose(HttpReceiverOverHTTP.java:370)
 |   |   +- app//org.eclipse.jetty.client.http.HttpReceiverOverHTTP.process(HttpReceiverOverHTTP.java:159)
 |   |   +- app//org.eclipse.jetty.client.http.HttpReceiverOverHTTP.receive(HttpReceiverOverHTTP.java:73)
 |   |   +- app//org.eclipse.jetty.client.http.HttpChannelOverHTTP.receive(HttpChannelOverHTTP.java:133)
 |   |   +- app//org.eclipse.jetty.client.http.HttpConnectionOverHTTP.onFillable(HttpConnectionOverHTTP.java:155)
 |   |   +- app//org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)
 |   |   +- app//org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$1.run(SslConnection.java:144)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
 |   |   +- java.base@11/java.lang.Thread.run(Thread.java:834)
 |   +> 69 qtp1713568869-69 BLOCKED
 |   +> 63 qtp1713568869-63 RUNNABLE
 |   |   +- java.base/java.lang.Thread.getStackTrace(Thread.java:1606)
 |   |   +- org.eclipse.jetty.util.thread.QueuedThreadPool.dump(QueuedThreadPool.java:572)
 |   |   +- org.eclipse.jetty.util.component.ContainerLifeCycle.dumpBeans(ContainerLifeCycle.java:701)
 |   |   +- org.eclipse.jetty.util.component.ContainerLifeCycle.dump(ContainerLifeCycle.java:675)
 |   |   +- org.eclipse.jetty.util.component.ContainerLifeCycle.dump(ContainerLifeCycle.java:638)
 |   |   +- org.eclipse.jetty.util.component.ContainerLifeCycle.dump(ContainerLifeCycle.java:630)
 |   |   +- com.myapplication.exchange.client.AbstractClient.lambda$run$7(AbstractClient.java:367)
 |   |   +- java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
 |   |   +- java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
 |   |   +- java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
 |   |   +- java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088)
 |   |   +- com.myapplication.exchange.scope.ResponseListener.onComplete(ResponseListener.java:43)
 |   |   +- org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:202)
 |   |   +- org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:194)
 |   |   +- org.eclipse.jetty.client.HttpSender.terminateRequest(HttpSender.java:395)
 |   |   +- org.eclipse.jetty.client.HttpSender.abort(HttpSender.java:566)
 |   |   +- org.eclipse.jetty.client.HttpChannel.abort(HttpChannel.java:145)
 |   |   +- org.eclipse.jetty.client.HttpExchange.abort(HttpExchange.java:257)
 |   |   +- org.eclipse.jetty.client.HttpConversation.abort(HttpConversation.java:141)
 |   |   +- org.eclipse.jetty.client.HttpRequest.abort(HttpRequest.java:767)
 |   |   +- org.eclipse.jetty.client.http.HttpConnectionOverHTTP.abort(HttpConnectionOverHTTP.java:204)
 |   |   +- org.eclipse.jetty.client.http.HttpConnectionOverHTTP.close(HttpConnectionOverHTTP.java:190)
 |   |   +- org.eclipse.jetty.client.http.HttpReceiverOverHTTP.failAndClose(HttpReceiverOverHTTP.java:370)
 |   |   +- org.eclipse.jetty.client.http.HttpReceiverOverHTTP.earlyEOF(HttpReceiverOverHTTP.java:338)
 |   |   +- org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:1551)
 |   |   +- org.eclipse.jetty.client.http.HttpReceiverOverHTTP.shutdown(HttpReceiverOverHTTP.java:209)
 |   |   +- org.eclipse.jetty.client.http.HttpReceiverOverHTTP.process(HttpReceiverOverHTTP.java:147)
 |   |   +- org.eclipse.jetty.client.http.HttpReceiverOverHTTP.receive(HttpReceiverOverHTTP.java:73)
 |   |   +- org.eclipse.jetty.client.http.HttpChannelOverHTTP.receive(HttpChannelOverHTTP.java:133)
 |   |   +- org.eclipse.jetty.client.http.HttpConnectionOverHTTP.onFillable(HttpConnectionOverHTTP.java:155)
 |   |   +- org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)
 |   |   +- org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
 |   |   +- org.eclipse.jetty.io.ssl.SslConnection$1.run(SslConnection.java:144)
 |   |   +- org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
 |   |   +- org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
 |   |   +- java.base/java.lang.Thread.run(Thread.java:834)
 |   +> 20 qtp1713568869-20 RUNNABLE
 |   |   +- java.base@11/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:592)
 |   |   +- java.base@11/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:580)
 |   |   +- java.base@11/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
 |   |   +- java.base@11/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
 |   |   +- app//org.eclipse.jetty.websocket.common.WebSocketSession.open(WebSocketSession.java:605)
 |   |   +- app//org.eclipse.jetty.websocket.common.WebSocketSession.onOpened(WebSocketSession.java:544)
 |   |   +- app//org.eclipse.jetty.io.AbstractConnection.onOpened(AbstractConnection.java:209)
 |   |   +- app//org.eclipse.jetty.io.AbstractConnection.onOpen(AbstractConnection.java:202)
 |   |   +- app//org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.onOpen(AbstractWebSocketConnection.java:446)
 |   |   +- app//org.eclipse.jetty.io.AbstractEndPoint.upgrade(AbstractEndPoint.java:440)
 |   |   +- app//org.eclipse.jetty.websocket.client.WebSocketUpgradeRequest.upgrade(WebSocketUpgradeRequest.java:624)
 |   |   +- app//org.eclipse.jetty.client.http.HttpChannelOverHTTP.exchangeTerminating(HttpChannelOverHTTP.java:118)
 |   |   +- app//org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:462)
 |   |   +- app//org.eclipse.jetty.client.HttpReceiver.responseSuccess(HttpReceiver.java:416)
 |   |   +- app//org.eclipse.jetty.client.http.HttpReceiverOverHTTP.messageComplete(HttpReceiverOverHTTP.java:316)
 |   |   +- app//org.eclipse.jetty.http.HttpParser.handleHeaderContentMessage(HttpParser.java:591)
 |   |   +- app//org.eclipse.jetty.http.HttpParser.parseFields(HttpParser.java:1213)
 |   |   +- app//org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:1502)
 |   |   +- app//org.eclipse.jetty.client.http.HttpReceiverOverHTTP.parse(HttpReceiverOverHTTP.java:172)
 |   |   +- app//org.eclipse.jetty.client.http.HttpReceiverOverHTTP.process(HttpReceiverOverHTTP.java:135)
 |   |   +- app//org.eclipse.jetty.client.http.HttpReceiverOverHTTP.receive(HttpReceiverOverHTTP.java:73)
 |   |   +- app//org.eclipse.jetty.client.http.HttpChannelOverHTTP.receive(HttpChannelOverHTTP.java:133)
 |   |   +- app//org.eclipse.jetty.client.http.HttpConnectionOverHTTP.onFillable(HttpConnectionOverHTTP.java:155)
 |   |   +- app//org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)
 |   |   +- app//org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:411)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:305)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:159)
 |   |   +- app//org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
 |   |   +- app//org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118)
 |   |   +- app//org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:333)
 |   |   +- app//org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:310)
 |   |   +- app//org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168)
 |   |   +- app//org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:126)
 |   |   +- app//org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:366)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
 |   |   +- java.base@11/java.lang.Thread.run(Thread.java:834)
 |   +> 36 qtp1713568869-36 BLOCKED
 |   |   +- java.base@11/java.lang.Thread.dumpThreads(Native Method)
 |   |   +- java.base@11/java.lang.Thread.getStackTrace(Thread.java:1597)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool.dump(QueuedThreadPool.java:572)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dumpBeans(ContainerLifeCycle.java:701)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dump(ContainerLifeCycle.java:675)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dump(ContainerLifeCycle.java:638)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dump(ContainerLifeCycle.java:630)
 |   |   +- app//com.myapplication.exchange.client.AbstractClient.lambda$run$7(AbstractClient.java:367)
 |   |   +- app//com.myapplication.exchange.client.AbstractClient$$Lambda$196/0x0000000800400040.accept(Unknown Source)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088)
 |   |   +- app//com.myapplication.exchange.scope.ResponseListener.onComplete(ResponseListener.java:43)
 |   |   +- app//org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:202)
 |   |   +- app//org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:194)
 |   |   +- app//org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:470)
 |   |   +- app//org.eclipse.jetty.client.HttpReceiver.abort(HttpReceiver.java:552)
 |   |   +- app//org.eclipse.jetty.client.HttpChannel.abortResponse(HttpChannel.java:156)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.terminateRequest(HttpSender.java:381)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.abort(HttpSender.java:566)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.anyToFailure(HttpSender.java:350)
 |   |   +- app//org.eclipse.jetty.client.HttpSender$CommitCallback.failed(HttpSender.java:717)
 |   |   +- app//org.eclipse.jetty.client.http.HttpSenderOverHTTP$HeadersCallback.failed(HttpSenderOverHTTP.java:310)
 |   |   +- app//org.eclipse.jetty.io.WriteFlusher.fail(WriteFlusher.java:319)
 |   |   +- app//org.eclipse.jetty.io.WriteFlusher.completeWrite(WriteFlusher.java:376)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.lambda$fill$1(SslConnection.java:650)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint$$Lambda$252/0x0000000800426040.run(Unknown Source)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
 |   |   +- java.base@11/java.lang.Thread.run(Thread.java:834)
 |   +> 53 qtp1713568869-53 RUNNABLE
 |   |   +- app//com.myapplication.exchange.client.AbstractClient.lambda$run$7(AbstractClient.java:367)
 |   |   +- app//com.myapplication.exchange.client.AbstractClient$$Lambda$196/0x0000000800400040.accept(Unknown Source)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088)
 |   |   +- app//com.myapplication.exchange.scope.ResponseListener.onComplete(ResponseListener.java:43)
 |   |   +- app//org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:202)
 |   |   +- app//org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:194)
 |   |   +- app//org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:470)
 |   |   +- app//org.eclipse.jetty.client.HttpReceiver.abort(HttpReceiver.java:552)
 |   |   +- app//org.eclipse.jetty.client.HttpChannel.abortResponse(HttpChannel.java:156)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.terminateRequest(HttpSender.java:381)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.abort(HttpSender.java:566)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.anyToFailure(HttpSender.java:350)
 |   |   +- app//org.eclipse.jetty.client.HttpSender$CommitCallback.failed(HttpSender.java:717)
 |   |   +- app//org.eclipse.jetty.client.http.HttpSenderOverHTTP$HeadersCallback.failed(HttpSenderOverHTTP.java:310)
 |   |   +- app//org.eclipse.jetty.io.WriteFlusher.fail(WriteFlusher.java:319)
 |   |   +- app//org.eclipse.jetty.io.WriteFlusher.completeWrite(WriteFlusher.java:376)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.lambda$fill$1(SslConnection.java:650)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint$$Lambda$252/0x0000000800426040.run(Unknown Source)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
 |   |   +- java.base@11/java.lang.Thread.run(Thread.java:834)
 |   +> 56 qtp1713568869-56 RUNNABLE
 |   |   +- java.base@11/java.lang.Thread.dumpThreads(Native Method)
 |   |   +- java.base@11/java.lang.Thread.getStackTrace(Thread.java:1597)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool.dump(QueuedThreadPool.java:572)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dumpBeans(ContainerLifeCycle.java:701)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dump(ContainerLifeCycle.java:675)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dump(ContainerLifeCycle.java:638)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dump(ContainerLifeCycle.java:630)
 |   |   +- app//com.myapplication.exchange.client.AbstractClient.lambda$run$7(AbstractClient.java:367)
 |   |   +- app//com.myapplication.exchange.client.AbstractClient$$Lambda$196/0x0000000800400040.accept(Unknown Source)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088)
 |   |   +- app//com.myapplication.exchange.scope.ResponseListener.onComplete(ResponseListener.java:43)
 |   |   +- app//org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:202)
 |   |   +- app//org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:194)
 |   |   +- app//org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:470)
 |   |   +- app//org.eclipse.jetty.client.HttpReceiver.abort(HttpReceiver.java:552)
 |   |   +- app//org.eclipse.jetty.client.HttpChannel.abortResponse(HttpChannel.java:156)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.terminateRequest(HttpSender.java:381)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.abort(HttpSender.java:566)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.anyToFailure(HttpSender.java:350)
 |   |   +- app//org.eclipse.jetty.client.HttpSender$CommitCallback.failed(HttpSender.java:717)
 |   |   +- app//org.eclipse.jetty.client.http.HttpSenderOverHTTP$HeadersCallback.failed(HttpSenderOverHTTP.java:310)
 |   |   +- app//org.eclipse.jetty.io.WriteFlusher.fail(WriteFlusher.java:319)
 |   |   +- app//org.eclipse.jetty.io.WriteFlusher.completeWrite(WriteFlusher.java:376)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.lambda$fill$1(SslConnection.java:650)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint$$Lambda$252/0x0000000800426040.run(Unknown Source)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
 |   |   +- java.base@11/java.lang.Thread.run(Thread.java:834)
 |   +> 64 qtp1713568869-64 SELECTING RUNNABLE
 |   +> 55 qtp1713568869-55 BLOCKED
 |   |   +- java.base@11/sun.security.ssl.SSLEngineImpl.getHandshakeStatus(SSLEngineImpl.java:805)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection.toConnectionString(SslConnection.java:331)
 |   |   +- app//org.eclipse.jetty.io.AbstractEndPoint.toConnectionString(AbstractEndPoint.java:477)
 |   |   +- app//org.eclipse.jetty.io.AbstractEndPoint.toString(AbstractEndPoint.java:446)
 |   |   +- java.base@11/java.util.Formatter$FormatSpecifier.printString(Formatter.java:3031)
 |   |   +- java.base@11/java.util.Formatter$FormatSpecifier.print(Formatter.java:2908)
 |   |   +- java.base@11/java.util.Formatter.format(Formatter.java:2673)
 |   |   +- java.base@11/java.util.Formatter.format(Formatter.java:2609)
 |   |   +- java.base@11/java.lang.String.format(String.java:2897)
 |   |   +- app//org.eclipse.jetty.io.AbstractConnection.toString(AbstractConnection.java:290)
 |   |   +- java.base@11/java.util.Formatter$FormatSpecifier.printString(Formatter.java:3031)
 |   |   +- java.base@11/java.util.Formatter$FormatSpecifier.print(Formatter.java:2908)
 |   |   +- java.base@11/java.util.Formatter.format(Formatter.java:2673)
 |   |   +- java.base@11/java.util.Formatter.format(Formatter.java:2609)
 |   |   +- java.base@11/java.lang.String.format(String.java:2897)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$RunnableTask.toString(SslConnection.java:135)
 |   |   +- java.base@11/java.lang.String.valueOf(String.java:2951)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dumpObject(ContainerLifeCycle.java:664)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dump(ContainerLifeCycle.java:756)
 |   |   +- app//org.eclipse.jetty.util.component.DumpableCollection.dump(DumpableCollection.java:46)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dumpBeans(ContainerLifeCycle.java:728)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool.dump(QueuedThreadPool.java:635)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dumpBeans(ContainerLifeCycle.java:701)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dump(ContainerLifeCycle.java:675)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dump(ContainerLifeCycle.java:638)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dump(ContainerLifeCycle.java:630)
 |   |   +- app//com.myapplication.exchange.client.AbstractClient.lambda$run$7(AbstractClient.java:367)
 |   |   +- app//com.myapplication.exchange.client.AbstractClient$$Lambda$196/0x0000000800400040.accept(Unknown Source)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088)
 |   |   +- app//com.myapplication.exchange.scope.ResponseListener.onComplete(ResponseListener.java:43)
 |   |   +- app//org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:202)
 |   |   +- app//org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:194)
 |   |   +- app//org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:470)
 |   |   +- app//org.eclipse.jetty.client.HttpReceiver.abort(HttpReceiver.java:552)
 |   |   +- app//org.eclipse.jetty.client.HttpChannel.abortResponse(HttpChannel.java:156)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.terminateRequest(HttpSender.java:381)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.abort(HttpSender.java:566)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.anyToFailure(HttpSender.java:350)
 |   |   +- app//org.eclipse.jetty.client.HttpSender$CommitCallback.failed(HttpSender.java:717)
 |   |   +- app//org.eclipse.jetty.client.http.HttpSenderOverHTTP$HeadersCallback.failed(HttpSenderOverHTTP.java:310)
 |   |   +- app//org.eclipse.jetty.io.WriteFlusher.fail(WriteFlusher.java:319)
 |   |   +- app//org.eclipse.jetty.io.WriteFlusher.completeWrite(WriteFlusher.java:376)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.lambda$fill$1(SslConnection.java:650)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint$$Lambda$252/0x0000000800426040.run(Unknown Source)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
 |   |   +- java.base@11/java.lang.Thread.run(Thread.java:834)
 |   +> 24 qtp1713568869-24 RUNNABLE
 |   |   +- java.base@11/javax.crypto.Cipher.checkCipherState(Cipher.java:1787)
 |   |   +- java.base@11/javax.crypto.Cipher.doFinal(Cipher.java:2082)
 |   |   +- java.base@11/sun.security.ssl.SSLCipher$T13GcmReadCipherGenerator$GcmReadCipher.dispose(SSLCipher.java:1931)
 |   |   +- java.base@11/sun.security.ssl.InputRecord.changeReadCiphers(InputRecord.java:117)
 |   |   +- java.base@11/sun.security.ssl.Finished$T13FinishedConsumer.onConsumeFinished(Finished.java:943)
 |   |   +- java.base@11/sun.security.ssl.Finished$T13FinishedConsumer.consume(Finished.java:848)
 |   |   +- java.base@11/sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:392)
 |   |   +- java.base@11/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:444)
 |   |   +- java.base@11/sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(SSLEngineImpl.java:1065)
 |   |   +- java.base@11/sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(SSLEngineImpl.java:1052)
 |   |   +- java.base@11/java.security.AccessController.doPrivileged(Native Method)
 |   |   +- java.base@11/sun.security.ssl.SSLEngineImpl$DelegatedTask.run(SSLEngineImpl.java:999)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.fill(SslConnection.java:511)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.flush(SslConnection.java:843)
 |   |   +- app//org.eclipse.jetty.io.WriteFlusher.flush(WriteFlusher.java:393)
 |   |   +- app//org.eclipse.jetty.io.WriteFlusher.completeWrite(WriteFlusher.java:349)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.lambda$fill$1(SslConnection.java:650)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint$$Lambda$252/0x0000000800426040.run(Unknown Source)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
 |   |   +- java.base@11/java.lang.Thread.run(Thread.java:834)
 |   +> 58 qtp1713568869-58 RUNNABLE
 |   |   +- java.base@11/java.lang.Object.hashCode(Native Method)
 |   |   +- app//org.eclipse.jetty.websocket.common.io.IOState.toString(IOState.java:580)
 |   |   +- java.base@11/java.util.Formatter$FormatSpecifier.printString(Formatter.java:3031)
 |   |   +- java.base@11/java.util.Formatter$FormatSpecifier.print(Formatter.java:2908)
 |   |   +- java.base@11/java.util.Formatter.format(Formatter.java:2673)
 |   |   +- java.base@11/java.util.Formatter.format(Formatter.java:2609)
 |   |   +- java.base@11/java.lang.String.format(String.java:2897)
 |   |   +- app//org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.toConnectionString(AbstractWebSocketConnection.java:649)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection.toConnectionString(SslConnection.java:335)
 |   |   +- app//org.eclipse.jetty.io.AbstractEndPoint.toConnectionString(AbstractEndPoint.java:477)
 |   |   +- app//org.eclipse.jetty.io.AbstractEndPoint.toString(AbstractEndPoint.java:446)
 |   |   +- java.base@11/java.util.Formatter$FormatSpecifier.printString(Formatter.java:3031)
 |   |   +- java.base@11/java.util.Formatter$FormatSpecifier.print(Formatter.java:2908)
 |   |   +- java.base@11/java.util.Formatter.format(Formatter.java:2673)
 |   |   +- java.base@11/java.util.Formatter.format(Formatter.java:2609)
 |   |   +- java.base@11/java.lang.String.format(String.java:2897)
 |   |   +- app//org.eclipse.jetty.io.AbstractConnection.toString(AbstractConnection.java:290)
 |   |   +- java.base@11/java.util.Formatter$FormatSpecifier.printString(Formatter.java:3031)
 |   |   +- java.base@11/java.util.Formatter$FormatSpecifier.print(Formatter.java:2908)
 |   |   +- java.base@11/java.util.Formatter.format(Formatter.java:2673)
 |   |   +- java.base@11/java.util.Formatter.format(Formatter.java:2609)
 |   |   +- java.base@11/java.lang.String.format(String.java:2897)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$RunnableTask.toString(SslConnection.java:135)
 |   |   +- java.base@11/java.lang.String.valueOf(String.java:2951)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dumpObject(ContainerLifeCycle.java:664)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dump(ContainerLifeCycle.java:756)
 |   |   +- app//org.eclipse.jetty.util.component.DumpableCollection.dump(DumpableCollection.java:46)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dumpBeans(ContainerLifeCycle.java:728)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool.dump(QueuedThreadPool.java:635)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dumpBeans(ContainerLifeCycle.java:701)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dump(ContainerLifeCycle.java:675)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dump(ContainerLifeCycle.java:638)
 |   |   +- app//org.eclipse.jetty.util.component.ContainerLifeCycle.dump(ContainerLifeCycle.java:630)
 |   |   +- app//com.myapplication.exchange.client.AbstractClient.lambda$run$7(AbstractClient.java:367)
 |   |   +- app//com.myapplication.exchange.client.AbstractClient$$Lambda$196/0x0000000800400040.accept(Unknown Source)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
 |   |   +- java.base@11/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088)
 |   |   +- app//com.myapplication.exchange.scope.ResponseListener.onComplete(ResponseListener.java:43)
 |   |   +- app//org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:202)
 |   |   +- app//org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:194)
 |   |   +- app//org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:470)
 |   |   +- app//org.eclipse.jetty.client.HttpReceiver.abort(HttpReceiver.java:552)
 |   |   +- app//org.eclipse.jetty.client.HttpChannel.abortResponse(HttpChannel.java:156)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.terminateRequest(HttpSender.java:381)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.abort(HttpSender.java:566)
 |   |   +- app//org.eclipse.jetty.client.HttpSender.anyToFailure(HttpSender.java:350)
 |   |   +- app//org.eclipse.jetty.client.HttpSender$CommitCallback.failed(HttpSender.java:717)
 |   |   +- app//org.eclipse.jetty.client.http.HttpSenderOverHTTP$HeadersCallback.failed(HttpSenderOverHTTP.java:310)
 |   |   +- app//org.eclipse.jetty.io.WriteFlusher.fail(WriteFlusher.java:319)
 |   |   +- app//org.eclipse.jetty.io.WriteFlusher.completeWrite(WriteFlusher.java:376)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.lambda$fill$1(SslConnection.java:650)
 |   |   +- app//org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint$$Lambda$252/0x0000000800426040.run(Unknown Source)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
 |   |   +- app//org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
 |   |   +- java.base@11/java.lang.Thread.run(Thread.java:834)
 |   +> 34 qtp1713568869-34 SELECTING RUNNABLE
 |   +> jobs - size=4
 |       +- org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint$$Lambda$252/0x0000000800426040@67527963
 |       +- SSL:SslConnection@37c1927a::SocketChannelEndPoint@4d34a76a{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42017,OPEN,fill=-,flush=-,to=2614/0}{io=0/0,kio=0,kro=1}->SslConnection@37c1927a{NEED_WRAP,eio=5855/-1,di=-1,fill=IDLE,flush=IDLE}~>DecryptedEndPoint@79264fcb{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42017,OPEN,fill=FI,flush=P,to=2574/0}=>HttpConnectionOverHTTP@3fc86ab9(l:/192.168.1.100:42017 <-> r:api.kucoin.com/104.16.90.29:443,closed=false)=>HttpChannelOverHTTP@d4bb8ed(exchange=HttpExchange@36a2b97c req=PENDING/null@null res=PENDING/null@null)[send=HttpSenderOverHTTP@5e454735(req=HEADERS,snd=SENDING,failure=null)[HttpGenerator@15561321{s=COMPLETING}],recv=HttpReceiverOverHTTP@450a5db6(rsp=IDLE,failure=null)[HttpParser{s=START,0 of -1}]]:runFillable:BLOCKING
 |       +- SSL:SslConnection@66406532::SocketChannelEndPoint@12c8fa20{stream.binance.com/52.197.44.119:9443<->/192.168.1.100:41982,OPEN,fill=-,flush=-,to=3156/0}{io=0/0,kio=0,kro=1}->SslConnection@66406532{NOT_HANDSHAKING,eio=6804/-1,di=-1,fill=IDLE,flush=IDLE}~>DecryptedEndPoint@37223c43{stream.binance.com/52.197.44.119:9443<->/192.168.1.100:41982,OPEN,fill=FI,flush=-,to=2573/0}=>WebSocketClientConnection@89315bf9[ios=IOState@20d220fc[OPEN,in,out],f=Flusher@45dea821[queueSize=0,aggregateSize=-1,terminated=null],g=Generator[CLIENT,validating],p=Parser@10125340[ExtensionStack,s=START,c=0,len=0,f=null]]:runFillable:BLOCKING
 |       +- SSL:SslConnection@3674b525::SocketChannelEndPoint@790b6d7{stream.binance.com/52.197.44.119:9443<->/192.168.1.100:41983,OPEN,fill=-,flush=-,to=3159/0}{io=0/0,kio=0,kro=1}->SslConnection@3674b525{NOT_HANDSHAKING,eio=1994/-1,di=-1,fill=IDLE,flush=IDLE}~>DecryptedEndPoint@373f99a4{stream.binance.com/52.197.44.119:9443<->/192.168.1.100:41983,OPEN,fill=FI,flush=-,to=2569/0}=>WebSocketClientConnection@89315c18[ios=IOState@35355450[OPEN,in,out],f=Flusher@26fb124e[queueSize=0,aggregateSize=-1,terminated=null],g=Generator[CLIENT,validating],p=Parser@24df3e48[ExtensionStack,s=START,c=0,len=0,f=null]]:runFillable:BLOCKING
 +- org.eclipse.jetty.io.MappedByteBufferPool@6f6671ce
 += ScheduledExecutorScheduler@706e3fa6{STARTED} - STARTED
 |   +- java.base@11/jdk.internal.misc.Unsafe.park(Native Method)
 |   +- java.base@11/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:234)
 |   +- java.base@11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2123)
 |   +- java.base@11/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1182)
 |   +- java.base@11/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899)
 |   +- java.base@11/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1054)
 |   +- java.base@11/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1114)
 |   +- java.base@11/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
 |   +- java.base@11/java.lang.Thread.run(Thread.java:834)
 += HttpClientTransportOverHTTP@ef92a87{STARTED} - STARTED
 |   += ClientSelectorManager@5309786e{STARTED} - STARTED
 |       += ManagedSelector@3e4a7c1{STARTED} id=0 keys=16 selected=6 updates=0 - STARTED
 |       |   += EatWhatYouKill@1477a548/SelectorProducer@5bab09ce/IDLE/p=true/QueuedThreadPool[qtp1713568869]@6622fc65{STARTED,8<=41<=200,i=9,q=0}[ReservedThreadExecutor@6b20e241{s=3/4,p=0}][pc=0,pic=0,pec=3,epc=46]@2018-09-30T21:52:10.8211356-04:00 - STARTED
 |       |   |   +- SelectorProducer@5bab09ce
 |       |   |   +~ QueuedThreadPool[qtp1713568869]@6622fc65{STARTED,8<=41<=200,i=9,q=0}[ReservedThreadExecutor@6b20e241{s=3/4,p=0}] - STARTED
 |       |   +> updates @ 2018-09-30T21:52:10.7164151-04:00
 |       |   +> keys @ 2018-09-30T21:52:10.8161485-04:00
 |       |       +- sun.nio.ch.WindowsSelectorImpl@43e45599 keys=11
 |       |       +- SelectionKey@2e4a05aa{i=1}->SocketChannelEndPoint@7278f478{www.binance.com/52.84.88.90:443<->/192.168.1.100:41974,OPEN,fill=FI,flush=-,to=4366/0}{io=1/1,kio=1,kro=1}->SslConnection@2a5bce36{NOT_HANDSHAKING,eio=-1/-1,di=-1,fill=INTERESTED,flush=IDLE}~>DecryptedEndPoint@394a94f4{www.binance.com/52.84.88.90:443<->/192.168.1.100:41974,OPEN,fill=FI,flush=-,to=4366/0}=>HttpConnectionOverHTTP@213ad5e8(l:/192.168.1.100:41974 <-> r:www.binance.com/52.84.88.90:443,closed=false)=>HttpChannelOverHTTP@586346d9(exchange=null)[send=HttpSenderOverHTTP@6d8da299(req=QUEUED,snd=COMPLETED,failure=null)[HttpGenerator@1953fb60{s=START}],recv=HttpReceiverOverHTTP@74d3318a(rsp=IDLE,failure=null)[HttpParser{s=START,0 of -1}]]
 |       |       +- SelectionKey@29074187{i=0}->SocketChannelEndPoint@67bc95c2{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42014,OPEN,fill=-,flush=-,to=2628/0}{io=0/0,kio=0,kro=1}->SslConnection@58757992{NOT_HANDSHAKING,eio=0/18432,di=0,fill=INTERESTED,flush=IDLE}~>DecryptedEndPoint@d56c4a8{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42014,OPEN,fill=FI,flush=-,to=17/0}=>HttpConnectionOverHTTP@1e95b0da(l:/192.168.1.100:42014 <-> r:api.kucoin.com/104.16.90.29:443,closed=false)=>HttpChannelOverHTTP@1477743a(exchange=HttpExchange@36c4f447 req=PENDING/null@null res=PENDING/null@null)[send=HttpSenderOverHTTP@365d116c(req=COMMIT,snd=SENDING,failure=null)[HttpGenerator@30d3743c{s=END}],recv=HttpReceiverOverHTTP@5de15ccd(rsp=IDLE,failure=null)[HttpParser{s=START,0 of -1}]]
 |       |       +- SelectionKey@10e37f05{i=0}->SocketChannelEndPoint@4c16edfa{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42018,OPEN,fill=FI,flush=-,to=7/0}{io=0/1,kio=0,kro=1}->SslConnection@129e4365{NOT_HANDSHAKING,eio=-1/-1,di=-1,fill=INTERESTED,flush=IDLE}~>DecryptedEndPoint@39c7a79e{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42018,OPEN,fill=FI,flush=-,to=7/0}=>HttpConnectionOverHTTP@7dee52e7(l:/192.168.1.100:42018 <-> r:api.kucoin.com/104.16.90.29:443,closed=false)=>HttpChannelOverHTTP@6e17935f(exchange=HttpExchange@1595ca5a req=PENDING/null@null res=PENDING/null@null)[send=HttpSenderOverHTTP@75f026e6(req=COMMIT,snd=SENDING,failure=null)[HttpGenerator@710f9491{s=END}],recv=HttpReceiverOverHTTP@23d06c84(rsp=IDLE,failure=null)[HttpParser{s=START,0 of -1}]]
 |       |       +- SelectionKey@77daa83d{i=1}->SocketChannelEndPoint@18aca5be{www.bitstamp.net/45.60.110.133:443<->/192.168.1.100:41976,OPEN,fill=FI,flush=-,to=4314/0}{io=1/1,kio=1,kro=1}->SslConnection@6c1f775b{NOT_HANDSHAKING,eio=-1/-1,di=-1,fill=INTERESTED,flush=IDLE}~>DecryptedEndPoint@6139cd55{www.bitstamp.net/45.60.110.133:443<->/192.168.1.100:41976,OPEN,fill=FI,flush=-,to=4314/0}=>HttpConnectionOverHTTP@171e4cde(l:/192.168.1.100:41976 <-> r:www.bitstamp.net/45.60.110.133:443,closed=false)=>HttpChannelOverHTTP@41ad29ba(exchange=null)[send=HttpSenderOverHTTP@3c51e564(req=QUEUED,snd=COMPLETED,failure=null)[HttpGenerator@2b63f81a{s=START}],recv=HttpReceiverOverHTTP@41fcb46(rsp=IDLE,failure=null)[HttpParser{s=START,0 of -1}]]
 |       |       +- SelectionKey@78cde23e{i=0}->SocketChannelEndPoint@790b6d7{stream.binance.com/52.197.44.119:9443<->/192.168.1.100:41983,OPEN,fill=-,flush=-,to=52/0}{io=0/0,kio=0,kro=1}->SslConnection@3674b525{NOT_HANDSHAKING,eio=666/-1,di=-1,fill=IDLE,flush=IDLE}~>DecryptedEndPoint@373f99a4{stream.binance.com/52.197.44.119:9443<->/192.168.1.100:41983,OPEN,fill=-,flush=-,to=2666/0}=>WebSocketClientConnection@89315c18[ios=IOState@35355450[OPEN,in,out],f=Flusher@26fb124e[queueSize=0,aggregateSize=-1,terminated=null],g=Generator[CLIENT,validating],p=Parser@24df3e48[ExtensionStack,s=START,c=0,len=185,f=TEXT[len=0,fin=true,rsv=...,masked=false]]]
 |       |       +- SelectionKey@37f10684{i=0}->SocketChannelEndPoint@e9e488{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42012,OPEN,fill=-,flush=-,to=2669/0}{io=0/0,kio=0,kro=1}->SslConnection@4c66dc95{NOT_HANDSHAKING,eio=0/18432,di=0,fill=IDLE,flush=IDLE}~>DecryptedEndPoint@6079eff6{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42012,OPEN,fill=-,flush=-,to=2807/0}=>HttpConnectionOverHTTP@7cd84a87(l:/192.168.1.100:42012 <-> r:api.kucoin.com/104.16.90.29:443,closed=false)=>HttpChannelOverHTTP@17c27e57(exchange=HttpExchange@41273bdb req=PENDING/null@null res=PENDING/null@null)[send=HttpSenderOverHTTP@7aefc4d3(req=COMMIT,snd=SENDING,failure=null)[HttpGenerator@5516a910{s=END}],recv=HttpReceiverOverHTTP@415e7701(rsp=IDLE,failure=null)[HttpParser{s=START,0 of -1}]]
 |       |       +- SelectionKey@11ddca28{i=1}->SocketChannelEndPoint@2c57d286{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42021,OPEN,fill=FI,flush=-,to=128/0}{io=1/1,kio=1,kro=1}->SslConnection@1f1e78ad{NOT_HANDSHAKING,eio=-1/-1,di=-1,fill=INTERESTED,flush=IDLE}~>DecryptedEndPoint@2b89e07c{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42021,OPEN,fill=FI,flush=-,to=131/0}=>HttpConnectionOverHTTP@3f5a73c5(l:/192.168.1.100:42021 <-> r:api.kucoin.com/104.16.90.29:443,closed=false)=>HttpChannelOverHTTP@51364bb0(exchange=HttpExchange@43e760f2 req=TERMINATED/null@null res=PENDING/null@null)[send=HttpSenderOverHTTP@2f50a333(req=QUEUED,snd=COMPLETED,failure=null)[HttpGenerator@4b3e2ca5{s=START}],recv=HttpReceiverOverHTTP@28b695b9(rsp=IDLE,failure=null)[HttpParser{s=START,0 of -1}]]
 |       |       +- SelectionKey@7d77e7ae{i=1}->SocketChannelEndPoint@502e80ad{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42016,OPEN,fill=FI,flush=-,to=31/0}{io=1/1,kio=1,kro=8}->SslConnection@7acdf8a0{NEED_UNWRAP,eio=-1/-1,di=-1,fill=INTERESTED,flush=WAIT_FOR_FILL}~>DecryptedEndPoint@40acb858{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42016,OPEN,fill=FI,flush=P,to=3113/0}=>HttpConnectionOverHTTP@4ca9b2d6(l:/192.168.1.100:42016 <-> r:api.kucoin.com/104.16.90.29:443,closed=false)=>HttpChannelOverHTTP@5c2be6a9(exchange=HttpExchange@78242e69 req=PENDING/null@null res=PENDING/null@null)[send=HttpSenderOverHTTP@6db9d135(req=HEADERS,snd=SENDING,failure=null)[HttpGenerator@4872daa2{s=COMPLETING}],recv=HttpReceiverOverHTTP@4b6f63ab(rsp=IDLE,failure=null)[HttpParser{s=START,0 of -1}]]
 |       |       +- SelectionKey@24670e9d{i=0}->SocketChannelEndPoint@12615bc9{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:41979,OPEN,fill=-,flush=-,to=3621/0}{io=0/0,kio=0,kro=1}->SslConnection@317210c9{NOT_HANDSHAKING,eio=-1/-1,di=-1,fill=IDLE,flush=IDLE}~>DecryptedEndPoint@6f0b7b8f{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:41979,OPEN,fill=-,flush=-,to=4268/0}=>HttpConnectionOverHTTP@2446e1f9(l:/192.168.1.100:41979 <-> r:api.kucoin.com/104.16.90.29:443,closed=false)=>HttpChannelOverHTTP@5f492ffe(exchange=HttpExchange@47ee98cd req=TERMINATED/null@null res=PENDING/null@null)[send=HttpSenderOverHTTP@66bb2ca1(req=QUEUED,snd=COMPLETED,failure=null)[HttpGenerator@52d8f4fa{s=START}],recv=HttpReceiverOverHTTP@44780780(rsp=IDLE,failure=null)[HttpParser{s=START,0 of -1}]]
 |       |       +- SelectionKey@75af04f3{i=1}->SocketChannelEndPoint@77e3d732{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42008,OPEN,fill=FI,flush=-,to=135/0}{io=1/1,kio=1,kro=1}->SslConnection@4882334b{NOT_HANDSHAKING,eio=-1/-1,di=-1,fill=INTERESTED,flush=IDLE}~>DecryptedEndPoint@5de86185{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42008,OPEN,fill=FI,flush=-,to=135/0}=>HttpConnectionOverHTTP@1e8f2362(l:/192.168.1.100:42008 <-> r:api.kucoin.com/104.16.90.29:443,closed=false)=>HttpChannelOverHTTP@592829bf(exchange=HttpExchange@309b2fef req=TERMINATED/null@null res=PENDING/null@null)[send=HttpSenderOverHTTP@69da5adc(req=QUEUED,snd=COMPLETED,failure=null)[HttpGenerator@7720fa2b{s=START}],recv=HttpReceiverOverHTTP@6fdd40a1(rsp=IDLE,failure=null)[HttpParser{s=START,0 of -1}]]
 |       |       +- SelectionKey@74286c34{i=1}->SocketChannelEndPoint@6d0eee2{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42010,OPEN,fill=FI,flush=-,to=119/0}{io=1/1,kio=1,kro=1}->SslConnection@3d67585e{NOT_HANDSHAKING,eio=-1/-1,di=-1,fill=INTERESTED,flush=IDLE}~>DecryptedEndPoint@4de61c7b{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42010,OPEN,fill=FI,flush=-,to=120/0}=>HttpConnectionOverHTTP@2914d63d(l:/192.168.1.100:42010 <-> r:api.kucoin.com/104.16.90.29:443,closed=false)=>HttpChannelOverHTTP@483b952e(exchange=HttpExchange@491dd535 req=TERMINATED/null@null res=PENDING/null@null)[send=HttpSenderOverHTTP@4e3fd1e0(req=QUEUED,snd=COMPLETED,failure=null)[HttpGenerator@33c70998{s=START}],recv=HttpReceiverOverHTTP@2741782b(rsp=IDLE,failure=null)[HttpParser{s=START,0 of -1}]]
 |       += ManagedSelector@387899b4{STARTED} id=1 keys=17 selected=6 updates=16 - STARTED
 |           += EatWhatYouKill@30d3d326/SelectorProducer@551bed0/IDLE/p=true/QueuedThreadPool[qtp1713568869]@6622fc65{STARTED,8<=41<=200,i=13,q=0}[ReservedThreadExecutor@6b20e241{s=3/4,p=0}][pc=0,pic=0,pec=4,epc=41]@2018-09-30T21:52:10.8799779-04:00 - STARTED
 |           |   +- SelectorProducer@551bed0
 |           |   +~ QueuedThreadPool[qtp1713568869]@6622fc65{STARTED,8<=41<=200,i=13,q=0}[ReservedThreadExecutor@6b20e241{s=3/4,p=0}] - STARTED
 |           +> updates @ 2018-09-30T21:52:10.8211356-04:00
 |           +> keys @ 2018-09-30T21:52:10.8799779-04:00
 |               +- sun.nio.ch.WindowsSelectorImpl@203b1ae8 keys=17
 |               +- SelectionKey@43cc7769{i=0}->SocketChannelEndPoint@12c8fa20{stream.binance.com/52.197.44.119:9443<->/192.168.1.100:41982,OPEN,fill=-,flush=-,to=102/0}{io=0/0,kio=0,kro=1}->SslConnection@66406532{NOT_HANDSHAKING,eio=17580/-1,di=-1,fill=IDLE,flush=IDLE}~>DecryptedEndPoint@37223c43{stream.binance.com/52.197.44.119:9443<->/192.168.1.100:41982,OPEN,fill=-,flush=-,to=2716/0}=>WebSocketClientConnection@89315bf9[ios=IOState@20d220fc[OPEN,in,out],f=Flusher@45dea821[queueSize=0,aggregateSize=-1,terminated=null],g=Generator[CLIENT,validating],p=Parser@10125340[ExtensionStack,s=START,c=0,len=624,f=TEXT[len=0,fin=true,rsv=...,masked=false]]]
 |               +- SelectionKey@3cfb9d9e{i=1}->SocketChannelEndPoint@8eb55f8{stream.binance.com/52.197.44.119:9443<->/192.168.1.100:41987,OPEN,fill=FI,flush=-,to=3948/0}{io=1/1,kio=1,kro=8}->SslConnection@2dd6a5de{NOT_HANDSHAKING,eio=-1/-1,di=-1,fill=INTERESTED,flush=IDLE}~>DecryptedEndPoint@75dba539{stream.binance.com/52.197.44.119:9443<->/192.168.1.100:41987,OPEN,fill=FI,flush=-,to=3948/0}=>HttpConnectionOverHTTP@dcf1d30(l:/192.168.1.100:41987 <-> r:stream.binance.com/52.197.44.119:9443,closed=false)=>HttpChannelOverHTTP@5f59dde4(exchange=null)[send=HttpSenderOverHTTP@47397b84(req=QUEUED,snd=IDLE,failure=null)[HttpGenerator@6f63fc37{s=START}],recv=HttpReceiverOverHTTP@1ab04a76(rsp=IDLE,failure=null)[HttpParser{s=START,0 of -1}]]
 |               +- SelectionKey@20e11324{i=8}->Connect@b971239{java.nio.channels.SocketChannel[connection-pending remote=api.kucoin.com/104.16.90.29:443],{ssl.peer.port=443, ssl.peer.host=api.kucoin.com, http.destination=HttpDestination[https://api.kucoin.com]@77ead94,queue=10,pool=DuplexConnectionPool@778c6b08[c=28/512,a=17,i=0], http.connection.promise=org.eclipse.jetty.client.HttpClient$1$1@6f777c75, client.connector=HttpClient@294e5088{STARTED}}}
 |               +- SelectionKey@54b843b1{i=1}->SocketChannelEndPoint@5cc2ad78{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42028,OPEN,fill=FI,flush=-,to=3/0}{io=1/1,kio=1,kro=8}->SslConnection@2e22a979{NEED_UNWRAP,eio=-1/18432,di=-1,fill=INTERESTED,flush=WAIT_FOR_FILL}~>DecryptedEndPoint@3ae2539e{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42028,OPEN,fill=FI,flush=P,to=46/0}=>HttpConnectionOverHTTP@42792ecd(l:/192.168.1.100:42028 <-> r:api.kucoin.com/104.16.90.29:443,closed=false)=>HttpChannelOverHTTP@6ea21463(exchange=HttpExchange@27c2cda2 req=PENDING/null@null res=PENDING/null@null)[send=HttpSenderOverHTTP@1c90c142(req=HEADERS,snd=SENDING,failure=null)[HttpGenerator@34c61fed{s=COMPLETING}],recv=HttpReceiverOverHTTP@4a39141a(rsp=IDLE,failure=null)[HttpParser{s=START,0 of -1}]]
 |               +- SelectionKey@798a452{i=0}->SocketChannelEndPoint@5dac972d{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42009,OPEN,fill=FI,flush=-,to=26/0}{io=0/1,kio=0,kro=1}->SslConnection@6ff815e6{NOT_HANDSHAKING,eio=-1/-1,di=-1,fill=INTERESTED,flush=IDLE}~>DecryptedEndPoint@2dcd1afe{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42009,OPEN,fill=FI,flush=-,to=26/0}=>HttpConnectionOverHTTP@5853bea3(l:/192.168.1.100:42009 <-> r:api.kucoin.com/104.16.90.29:443,closed=false)=>HttpChannelOverHTTP@7c8e726(exchange=HttpExchange@3e641d0d req=TERMINATED/null@null res=PENDING/null@null)[send=HttpSenderOverHTTP@119c6802(req=QUEUED,snd=COMPLETED,failure=null)[HttpGenerator@54438a25{s=START}],recv=HttpReceiverOverHTTP@1472a65c(rsp=IDLE,failure=null)[HttpParser{s=START,0 of -1}]]
 |               +- SelectionKey@3b26ad4d{i=1}->SocketChannelEndPoint@7ba77f22{www.binance.com/52.84.88.90:443<->/192.168.1.100:41973,OPEN,fill=FI,flush=-,to=4644/0}{io=1/1,kio=1,kro=1}->SslConnection@61a72bc5{NOT_HANDSHAKING,eio=-1/-1,di=-1,fill=INTERESTED,flush=IDLE}~>DecryptedEndPoint@659a696b{www.binance.com/52.84.88.90:443<->/192.168.1.100:41973,OPEN,fill=FI,flush=-,to=4644/0}=>HttpConnectionOverHTTP@4e5b455b(l:/192.168.1.100:41973 <-> r:www.binance.com/52.84.88.90:443,closed=false)=>HttpChannelOverHTTP@67013806(exchange=null)[send=HttpSenderOverHTTP@279f05ab(req=QUEUED,snd=COMPLETED,failure=null)[HttpGenerator@7f3eeb9e{s=START}],recv=HttpReceiverOverHTTP@49591423(rsp=IDLE,failure=null)[HttpParser{s=START,0 of -1}]]
 |               +- SelectionKey@4b6014d0{i=1}->SocketChannelEndPoint@7860d337{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42020,OPEN,fill=FI,flush=-,to=51/0}{io=1/1,kio=1,kro=1}->SslConnection@461720e{NOT_HANDSHAKING,eio=-1/-1,di=-1,fill=INTERESTED,flush=IDLE}~>DecryptedEndPoint@7c0861c0{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42020,OPEN,fill=FI,flush=-,to=51/0}=>HttpConnectionOverHTTP@188d5a10(l:/192.168.1.100:42020 <-> r:api.kucoin.com/104.16.90.29:443,closed=false)=>HttpChannelOverHTTP@29cc611d(exchange=HttpExchange@26329728 req=TERMINATED/null@null res=PENDING/null@null)[send=HttpSenderOverHTTP@58b501b2(req=QUEUED,snd=COMPLETED,failure=null)[HttpGenerator@670c6d05{s=START}],recv=HttpReceiverOverHTTP@2d823c70(rsp=IDLE,failure=null)[HttpParser{s=START,0 of -1}]]
 |               +- SelectionKey@36d26942{i=8}->Connect@27f6d406{java.nio.channels.SocketChannel[connection-pending remote=api.kucoin.com/104.16.90.29:443],{ssl.peer.port=443, ssl.peer.host=api.kucoin.com, http.destination=HttpDestination[https://api.kucoin.com]@77ead94,queue=18,pool=DuplexConnectionPool@778c6b08[c=41/512,a=20,i=0], http.connection.promise=org.eclipse.jetty.client.HttpClient$1$1@781b3f0e, client.connector=HttpClient@294e5088{STARTED}}}
 |               +- SelectionKey@b8f903d{i=1}->SocketChannelEndPoint@70714988{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:41995,OPEN,fill=FI,flush=-,to=214/0}{io=1/1,kio=1,kro=1}->SslConnection@7108b3a9{NOT_HANDSHAKING,eio=-1/-1,di=-1,fill=INTERESTED,flush=IDLE}~>DecryptedEndPoint@60cf1f6a{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:41995,OPEN,fill=FI,flush=-,to=2734/0}=>HttpConnectionOverHTTP@64aa160e(l:/192.168.1.100:41995 <-> r:api.kucoin.com/104.16.90.29:443,closed=false)=>HttpChannelOverHTTP@418dbf32(exchange=HttpExchange@3b4a9382 req=TERMINATED/null@null res=PENDING/null@null)[send=HttpSenderOverHTTP@f6bfab9(req=QUEUED,snd=COMPLETED,failure=null)[HttpGenerator@17479071{s=START}],recv=HttpReceiverOverHTTP@3b9fd984(rsp=IDLE,failure=null)[HttpParser{s=START,0 of -1}]]
 |               +- SelectionKey@3898d72d{i=1}->SocketChannelEndPoint@4d34a76a{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42017,OPEN,fill=FI,flush=-,to=69/0}{io=1/1,kio=1,kro=1}->SslConnection@37c1927a{NOT_HANDSHAKING,eio=-1/-1,di=-1,fill=INTERESTED,flush=IDLE}~>DecryptedEndPoint@79264fcb{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42017,OPEN,fill=FI,flush=-,to=69/0}=>HttpConnectionOverHTTP@3fc86ab9(l:/192.168.1.100:42017 <-> r:api.kucoin.com/104.16.90.29:443,closed=false)=>HttpChannelOverHTTP@d4bb8ed(exchange=HttpExchange@36a2b97c req=TERMINATED/null@null res=PENDING/null@null)[send=HttpSenderOverHTTP@5e454735(req=QUEUED,snd=COMPLETED,failure=null)[HttpGenerator@15561321{s=START}],recv=HttpReceiverOverHTTP@450a5db6(rsp=IDLE,failure=null)[HttpParser{s=START,0 of -1}]]
 |               +- SelectionKey@4e63e394{i=8}->Connect@54268bf6{java.nio.channels.SocketChannel[connection-pending remote=api.kucoin.com/104.16.90.29:443],{ssl.peer.port=443, ssl.peer.host=api.kucoin.com, http.destination=HttpDestination[https://api.kucoin.com]@77ead94,queue=18,pool=DuplexConnectionPool@778c6b08[c=41/512,a=20,i=0], http.connection.promise=org.eclipse.jetty.client.HttpClient$1$1@4480df9, client.connector=HttpClient@294e5088{STARTED}}}
 |               +- SelectionKey@35e15459{i=1}->SocketChannelEndPoint@2f27c119{www.binance.com/52.84.88.90:443<->/192.168.1.100:41975,OPEN,fill=FI,flush=-,to=4697/0}{io=1/1,kio=1,kro=1}->SslConnection@6ab16e80{NOT_HANDSHAKING,eio=-1/-1,di=-1,fill=INTERESTED,flush=IDLE}~>DecryptedEndPoint@aa8311b{www.binance.com/52.84.88.90:443<->/192.168.1.100:41975,OPEN,fill=FI,flush=-,to=4697/0}=>HttpConnectionOverHTTP@6959c06b(l:/192.168.1.100:41975 <-> r:www.binance.com/52.84.88.90:443,closed=false)=>HttpChannelOverHTTP@4e4bc272(exchange=null)[send=HttpSenderOverHTTP@5f75edab(req=QUEUED,snd=COMPLETED,failure=null)[HttpGenerator@3ed14dab{s=START}],recv=HttpReceiverOverHTTP@753a8383(rsp=IDLE,failure=null)[HttpParser{s=START,0 of -1}]]
 |               +- SelectionKey@11bac742{i=1}->SocketChannelEndPoint@65729704{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42030,OPEN,fill=FI,flush=-,to=47/0}{io=1/1,kio=1,kro=8}->SslConnection@159a26b4{NEED_UNWRAP,eio=-1/-1,di=-1,fill=INTERESTED,flush=WAIT_FOR_FILL}~>DecryptedEndPoint@21928db9{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42030,OPEN,fill=FI,flush=P,to=50/0}=>HttpConnectionOverHTTP@3b4715ea(l:/192.168.1.100:42030 <-> r:api.kucoin.com/104.16.90.29:443,closed=false)=>HttpChannelOverHTTP@952493(exchange=HttpExchange@712e4932 req=PENDING/null@null res=PENDING/null@null)[send=HttpSenderOverHTTP@35457e25(req=HEADERS,snd=SENDING,failure=null)[HttpGenerator@8fc271{s=COMPLETING}],recv=HttpReceiverOverHTTP@2917cf4f(rsp=IDLE,failure=null)[HttpParser{s=START,0 of -1}]]
 |               +- SelectionKey@7195380d{i=8}->Connect@2af37486{java.nio.channels.SocketChannel[connection-pending remote=api.kucoin.com/104.16.90.29:443],{ssl.peer.port=443, ssl.peer.host=api.kucoin.com, http.destination=HttpDestination[https://api.kucoin.com]@77ead94,queue=18,pool=DuplexConnectionPool@778c6b08[c=41/512,a=20,i=0], http.connection.promise=org.eclipse.jetty.client.HttpClient$1$1@345983ab, client.connector=HttpClient@294e5088{STARTED}}}
 |               +- SelectionKey@19b5d149{i=1}->SocketChannelEndPoint@3a340328{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42015,OPEN,fill=FI,flush=-,to=166/0}{io=1/1,kio=1,kro=1}->SslConnection@3075beba{NOT_HANDSHAKING,eio=-1/-1,di=-1,fill=INTERESTED,flush=IDLE}~>DecryptedEndPoint@48dee966{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42015,OPEN,fill=FI,flush=-,to=166/0}=>HttpConnectionOverHTTP@5d18cd00(l:/192.168.1.100:42015 <-> r:api.kucoin.com/104.16.90.29:443,closed=false)=>HttpChannelOverHTTP@6b5af508(exchange=HttpExchange@76c706b7 req=TERMINATED/null@null res=PENDING/null@null)[send=HttpSenderOverHTTP@6cf07604(req=QUEUED,snd=COMPLETED,failure=null)[HttpGenerator@53da2725{s=START}],recv=HttpReceiverOverHTTP@6f146ae3(rsp=IDLE,failure=null)[HttpParser{s=START,0 of -1}]]
 |               +- SelectionKey@6c1dcba0{i=1}->SocketChannelEndPoint@57ceb3fb{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42019,OPEN,fill=FI,flush=-,to=70/0}{io=1/1,kio=1,kro=1}->SslConnection@6b136355{NOT_HANDSHAKING,eio=-1/-1,di=-1,fill=INTERESTED,flush=IDLE}~>DecryptedEndPoint@131836b0{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42019,OPEN,fill=FI,flush=-,to=70/0}=>HttpConnectionOverHTTP@41bf5594(l:/192.168.1.100:42019 <-> r:api.kucoin.com/104.16.90.29:443,closed=false)=>HttpChannelOverHTTP@66613f3f(exchange=HttpExchange@1698f16d req=TERMINATED/null@null res=PENDING/null@null)[send=HttpSenderOverHTTP@346bd92e(req=QUEUED,snd=COMPLETED,failure=null)[HttpGenerator@6614c4a5{s=START}],recv=HttpReceiverOverHTTP@9e3879f(rsp=IDLE,failure=null)[HttpParser{s=START,0 of -1}]]
 |               +- SelectionKey@14f3a12d{i=1}->SocketChannelEndPoint@f719c25{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:41978,OPEN,fill=FI,flush=-,to=178/0}{io=1/1,kio=1,kro=1}->SslConnection@3ce722a5{NOT_HANDSHAKING,eio=-1/-1,di=-1,fill=INTERESTED,flush=IDLE}~>DecryptedEndPoint@50b9ed92{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:41978,OPEN,fill=FI,flush=-,to=2737/0}=>HttpConnectionOverHTTP@40566941(l:/192.168.1.100:41978 <-> r:api.kucoin.com/104.16.90.29:443,closed=false)=>HttpChannelOverHTTP@1d8f25a4(exchange=HttpExchange@4abb431b req=TERMINATED/null@null res=PENDING/null@null)[send=HttpSenderOverHTTP@1b6bf9e8(req=QUEUED,snd=COMPLETED,failure=null)[HttpGenerator@4a1426a{s=START}],recv=HttpReceiverOverHTTP@6067f55f(rsp=IDLE,failure=null)[HttpParser{s=START,0 of -1}]]
 +- org.eclipse.jetty.util.SocketAddressResolver$Async@6b732cd
 += HttpDestination[https://www.binance.com]@7a7eae96,queue=0,pool=DuplexConnectionPool@541a181c[c=3/512,a=0,i=3] - STARTED
 |   +- DuplexConnectionPool@541a181c[c=3/512,a=0,i=3]
 |       +- HttpConnectionOverHTTP@213ad5e8::DecryptedEndPoint@394a94f4{www.binance.com/52.84.88.90:443<->/192.168.1.100:41974,OPEN,fill=FI,flush=-,to=4528/0}
 |       +- HttpConnectionOverHTTP@4e5b455b::DecryptedEndPoint@659a696b{www.binance.com/52.84.88.90:443<->/192.168.1.100:41973,OPEN,fill=FI,flush=-,to=4659/0}
 |       +- HttpConnectionOverHTTP@6959c06b::DecryptedEndPoint@aa8311b{www.binance.com/52.84.88.90:443<->/192.168.1.100:41975,OPEN,fill=FI,flush=-,to=4712/0}
 |   +- exchanges
 += HttpDestination[https://www.bitstamp.net]@5cb59b71,queue=0,pool=DuplexConnectionPool@63abfb70[c=1/512,a=0,i=1] - STARTED
 |   +- DuplexConnectionPool@63abfb70[c=1/512,a=0,i=1]
 |       +- HttpConnectionOverHTTP@171e4cde::DecryptedEndPoint@6139cd55{www.bitstamp.net/45.60.110.133:443<->/192.168.1.100:41976,OPEN,fill=FI,flush=-,to=4417/0}
 |   +- exchanges
 += HttpDestination[https://api.kucoin.com]@77ead94,queue=19,pool=DuplexConnectionPool@778c6b08[c=49/512,a=23,i=0] - STARTED
 |   +- DuplexConnectionPool@778c6b08[c=49/512,a=23,i=0]
 |       +- HttpConnectionOverHTTP@5d18cd00::DecryptedEndPoint@48dee966{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42015,OPEN,fill=FI,flush=-,to=180/0}
 |       +- HttpConnectionOverHTTP@41bf5594::DecryptedEndPoint@131836b0{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42019,OPEN,fill=FI,flush=-,to=84/0}
 |       +- HttpConnectionOverHTTP@2926291a::DecryptedEndPoint@6caef38d{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42031,OPEN,fill=FI,flush=W,to=46/0}
 |       +- HttpConnectionOverHTTP@1e95b0da::DecryptedEndPoint@d56c4a8{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42014,OPEN,fill=FI,flush=-,to=63/0}
 |       +- HttpConnectionOverHTTP@7cd84a87::DecryptedEndPoint@6079eff6{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42012,OPEN,fill=FI,flush=-,to=37/0}
 |       +- HttpConnectionOverHTTP@4ca9b2d6::DecryptedEndPoint@40acb858{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42016,OPEN,fill=FI,flush=P,to=55/0}
 |       +- HttpConnectionOverHTTP@22ddc24e::DecryptedEndPoint@6870ccfc{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42029,OPEN,fill=FI,flush=P,to=51/0}
 |       +- HttpConnectionOverHTTP@188d5a10::DecryptedEndPoint@7c0861c0{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42020,OPEN,fill=FI,flush=-,to=66/0}
 |       +- HttpConnectionOverHTTP@3f5a73c5::DecryptedEndPoint@2b89e07c{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42021,OPEN,fill=FI,flush=-,to=198/0}
 |       +- HttpConnectionOverHTTP@64aa160e::DecryptedEndPoint@60cf1f6a{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:41995,OPEN,fill=FI,flush=-,to=13/0}
 |       +- HttpConnectionOverHTTP@3b4715ea::DecryptedEndPoint@21928db9{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42030,OPEN,fill=-,flush=P,to=64/0}
 |       +- HttpConnectionOverHTTP@42792ecd::DecryptedEndPoint@3ae2539e{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42028,OPEN,fill=FI,flush=P,to=61/0}
 |       +- HttpConnectionOverHTTP@bab3710::DecryptedEndPoint@186eac90{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42032,OPEN,fill=FI,flush=P,to=10/0}
 |       +- HttpConnectionOverHTTP@c160ade::DecryptedEndPoint@6d9a2894{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42034,OPEN,fill=FI,flush=P,to=11/0}
 |       +- HttpConnectionOverHTTP@5853bea3::DecryptedEndPoint@2dcd1afe{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42009,OPEN,fill=FI,flush=-,to=41/0}
 |       +- HttpConnectionOverHTTP@7dee52e7::DecryptedEndPoint@39c7a79e{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42018,OPEN,fill=FI,flush=-,to=57/0}
 |       +- HttpConnectionOverHTTP@40566941::DecryptedEndPoint@50b9ed92{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:41978,OPEN,fill=FI,flush=-,to=2751/0}
 |       +- HttpConnectionOverHTTP@2914d63d::DecryptedEndPoint@4de61c7b{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42010,OPEN,fill=FI,flush=-,to=186/0}
 |       +- HttpConnectionOverHTTP@4c7d8332::DecryptedEndPoint@24a2b496{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42027,OPEN,fill=FI,flush=P,to=49/0}
 |       +- HttpConnectionOverHTTP@3fc86ab9::DecryptedEndPoint@79264fcb{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42017,OPEN,fill=FI,flush=-,to=84/0}
 |       +- HttpConnectionOverHTTP@65e14a96::DecryptedEndPoint@3f0b1914{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42036,OPEN,fill=FI,flush=P,to=13/0}
 |       +- HttpConnectionOverHTTP@2446e1f9::DecryptedEndPoint@6f0b7b8f{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:41979,OPEN,fill=-,flush=-,to=4335/0}
 |       +- HttpConnectionOverHTTP@1e8f2362::DecryptedEndPoint@5de86185{api.kucoin.com/104.16.90.29:443<->/192.168.1.100:42008,OPEN,fill=FI,flush=-,to=202/0}
 |   +- exchanges
 |       +- HttpExchange@51723525 req=PENDING/null@null res=PENDING/null@null
 |       +- HttpExchange@3c9509b7 req=PENDING/null@null res=PENDING/null@null
 |       +- HttpExchange@da20cb7 req=PENDING/null@null res=PENDING/null@null
 |       +- HttpExchange@6a8677ae req=PENDING/null@null res=PENDING/null@null
 |       +- HttpExchange@2a1dacc6 req=PENDING/null@null res=PENDING/null@null
 |       +- HttpExchange@3e51d083 req=PENDING/null@null res=PENDING/null@null
 |       +- HttpExchange@238ba44a req=PENDING/null@null res=PENDING/null@null
 |       +- HttpExchange@7a699c92 req=PENDING/null@null res=PENDING/null@null
 |       +- HttpExchange@3d556485 req=PENDING/null@null res=PENDING/null@null
 |       +- HttpExchange@d306e64 req=PENDING/null@null res=PENDING/null@null
 |       +- HttpExchange@73e7327c req=PENDING/null@null res=PENDING/null@null
 |       +- HttpExchange@45dcbd9e req=PENDING/null@null res=PENDING/null@null
 |       +- HttpExchange@53bb98ec req=PENDING/null@null res=PENDING/null@null
 |       +- HttpExchange@5d768fb1 req=PENDING/null@null res=PENDING/null@null
 |       +- HttpExchange@174822b1 req=PENDING/null@null res=PENDING/null@null
 |       +- HttpExchange@37585d8b req=PENDING/null@null res=PENDING/null@null
 |       +- HttpExchange@382bdf74 req=PENDING/null@null res=PENDING/null@null
 |       +- HttpExchange@51c9d4c7 req=PENDING/null@null res=PENDING/null@null
 |       +- HttpExchange@7c239e5 req=PENDING/null@null res=PENDING/null@null
 += HttpDestination[wss://stream.binance.com:9443]@72839893,queue=0,pool=DuplexConnectionPool@143539c8[c=1/512,a=0,i=1] - STARTED
     +- DuplexConnectionPool@143539c8[c=1/512,a=0,i=1]
         +- HttpConnectionOverHTTP@dcf1d30::DecryptedEndPoint@75dba539{stream.binance.com/52.197.44.119:9443<->/192.168.1.100:41987,OPEN,fill=FI,flush=-,to=4006/0}
     +- exchanges

Does this help?

@joakime

This comment has been minimized.

Copy link
Member

joakime commented Oct 1, 2018

Nothing standing out in that dump.

"No PSK Available" means that there was a TLS Session that could be resumed, but there was no Pre-Shared Key present.
That will trigger an INTERNAL_ERROR alert in the OpenJDK implementation side.

As seen in: http://hg.openjdk.java.net/jdk/jdk11/file/1ddf9a99e4ad/src/java.base/share/classes/sun/security/ssl/ServerHello.java#l1225

            // Check and launch ServerHello extensions.
            SSLExtension[] extTypes = chc.sslConfig.getEnabledExtensions(
                    SSLHandshake.SERVER_HELLO);
            serverHello.extensions.consumeOnLoad(chc, extTypes);
            if (!chc.isResumption) {
                // ... (snip) ...
            } else {
                // The PSK is consumed to allow it to be deleted
                Optional<SecretKey> psk =
                        chc.resumingSession.consumePreSharedKey();
                if(!psk.isPresent()) {
                    chc.conContext.fatal(Alert.INTERNAL_ERROR,
                    "No PSK available. Unable to resume.");
                }

                chc.handshakeSession = chc.resumingSession;

                setUpPskKD(chc, psk.get());
            }

According to the source control at http://hg.openjdk.java.net/
The ServerHello.java source file is new for Java 11 .

@sbordet

This comment has been minimized.

Copy link
Contributor

sbordet commented Oct 2, 2018

@cowwoc this is either a server problem (not really complying with TLS 1.3), or a JDK problem being too strict when dealing with TLS 1.3.

To understand what's going on, please enable system property javax.net.debug=all and report back here.
If you can give more information about the server will be great (e.g. are they implementing TLS 1.3 as RFC 8446, or are they implementing a draft version? What library are they using for TLS 1.3 on server? OpenSSL? What exact version of OpenSSL? Etc.)

@cowwoc

This comment has been minimized.

Copy link
Author

cowwoc commented Oct 2, 2018

I don't know what changed but all of a sudden I no longer get this exception. Maybe this was a server-side problem that was fixed. I don't own the server but for reference it was https://api.kucoin.com/ (see https://kucoinapidocs.docs.apiary.io/) and their services are known to be highly flaky. Closing this issue for now.

@cowwoc cowwoc closed this Oct 2, 2018

@cowwoc

This comment has been minimized.

Copy link
Author

cowwoc commented Oct 14, 2018

I was able to reproduce the problem with javax.net.debug=all enabled. Please let me know if you have enough information to move forward. Thank you.
debug.log

@cowwoc cowwoc reopened this Oct 14, 2018

@joakime

This comment has been minimized.

Copy link
Member

joakime commented Oct 14, 2018

I think this is the relevant section...

javax.net.ssl|DEBUG|23|HttpClient@2002348-35|2018-10-13 21:53:29.127 EDT|ServerHello.java:962|Negotiated protocol version: TLSv1.3
javax.net.ssl|DEBUG|14|HttpClient@2002348-20|2018-10-13 21:53:29.127 EDT|SSLExtensions.java:138|Ignore unsupported extension: status_request
javax.net.ssl|DEBUG|14|HttpClient@2002348-20|2018-10-13 21:53:29.144 EDT|SSLExtensions.java:138|Ignore unsupported extension: ec_point_formats
javax.net.ssl|DEBUG|14|HttpClient@2002348-20|2018-10-13 21:53:29.144 EDT|SSLExtensions.java:138|Ignore unsupported extension: application_layer_protocol_negotiation
javax.net.ssl|DEBUG|14|HttpClient@2002348-20|2018-10-13 21:53:29.144 EDT|SSLExtensions.java:138|Ignore unsupported extension: status_request_v2
javax.net.ssl|DEBUG|14|HttpClient@2002348-20|2018-10-13 21:53:29.144 EDT|SSLExtensions.java:138|Ignore unsupported extension: extended_master_secret
javax.net.ssl|DEBUG|14|HttpClient@2002348-20|2018-10-13 21:53:29.144 EDT|SSLExtensions.java:167|Consumed extension: supported_versions
javax.net.ssl|DEBUG|14|HttpClient@2002348-20|2018-10-13 21:53:29.144 EDT|SSLExtensions.java:167|Consumed extension: key_share
javax.net.ssl|DEBUG|14|HttpClient@2002348-20|2018-10-13 21:53:29.144 EDT|SSLExtensions.java:138|Ignore unsupported extension: renegotiation_info
javax.net.ssl|DEBUG|14|HttpClient@2002348-20|2018-10-13 21:53:29.144 EDT|PreSharedKeyExtension.java:799|Received pre_shared_key extension:  (
"PreSharedKey": {
  "selected_identity"      : "0x0000",
}
)
javax.net.ssl|DEBUG|14|HttpClient@2002348-20|2018-10-13 21:53:29.144 EDT|PreSharedKeyExtension.java:813|Resuming session:  (
Session(1539482003636|TLS_AES_128_GCM_SHA256)
)
javax.net.ssl|DEBUG|14|HttpClient@2002348-20|2018-10-13 21:53:29.144 EDT|SSLExtensions.java:167|Consumed extension: pre_shared_key
javax.net.ssl|ERROR|14|HttpClient@2002348-20|2018-10-13 21:53:29.145 EDT|TransportContext.java:313|Fatal (INTERNAL_ERROR): No PSK available. Unable to resume. (
"throwable" : {
  javax.net.ssl.SSLException: No PSK available. Unable to resume.
  	at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:129)
  	at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)
  	at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:308)
  	at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:264)
  	at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:255)
  	at java.base/sun.security.ssl.ServerHello$T13ServerHelloConsumer.consume(ServerHello.java:1224)
  	at java.base/sun.security.ssl.ServerHello$ServerHelloConsumer.onServerHello(ServerHello.java:984)
  	at java.base/sun.security.ssl.ServerHello$ServerHelloConsumer.consume(ServerHello.java:872)
  	at java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:392)
  	at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:444)
  	at java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(SSLEngineImpl.java:1065)
  	at java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(SSLEngineImpl.java:1052)
  	at java.base/java.security.AccessController.doPrivileged(Native Method)
  	at java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask.run(SSLEngineImpl.java:999)
  	at org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.fill(SslConnection.java:511)
  	at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.process(HttpReceiverOverHTTP.java:128)
  	at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.receive(HttpReceiverOverHTTP.java:73)
  	at org.eclipse.jetty.client.http.HttpChannelOverHTTP.receive(HttpChannelOverHTTP.java:133)
  	at org.eclipse.jetty.client.http.HttpConnectionOverHTTP.onFillable(HttpConnectionOverHTTP.java:155)
  	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)
  	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
  	at org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:411)
  	at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:305)
  	at org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:159)
  	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
  	at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118)
  	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:333)
  	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:310)
  	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168)
  	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:126)
  	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:366)
  	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
  	at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
  	at java.base/java.lang.Thread.run(Thread.java:834)}

)
@joakime

This comment has been minimized.

Copy link
Member

joakime commented Oct 14, 2018

Note: there is a JVM bug open for PSK on TLS/1.3, not sure if your issue overlaps with this open bug.

https://bugs.openjdk.java.net/browse/JDK-8049402

@cowwoc

This comment has been minimized.

Copy link
Author

cowwoc commented Oct 14, 2018

To be honest, I don't really understand these low-level details of the TLS protocol so I'm not sure how to proceed. What are the next steps for this issue?

Do you need to investigate further on your end? Do we know if the problem is with Jetty or the JVM?

@rraptorr

This comment has been minimized.

Copy link

rraptorr commented Oct 30, 2018

I've encountered the same problem when using Maven on Java 11 with TLS 1.3 enabled server. It seems like a race condition in Java 11 TLS 1.3 client library.

I was able to reproduce the problem with the following snippet: https://gist.github.com/rraptorr/e9c20fbdac6cd5dea8481283bb058d15
The problem appears for me with www.facebook.com, which uses it's own TLS 1.3 implementation and for personal server with OpenSSL 1.1.1, so this seems like a Java bug.

I've submitted it to Oracle via https://bugreport.java.com/bugreport/ (review ID 9057881).

@cowwoc

This comment has been minimized.

Copy link
Author

cowwoc commented Oct 30, 2018

@rraptorr Please post a link to the bug report once it becomes public.

@rraptorr

This comment has been minimized.

@guss77

This comment has been minimized.

Copy link

guss77 commented Nov 4, 2018

I have the same issue with Maven on JDK 11 and Jitpack.io. The workaround mentioned in the Java bug report worked for me - running: mvn -Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2 ... I can get the dependency from Jitpack without the No PSK error.

@joakime joakime added the JVM Issue label Nov 5, 2018

@cowwoc

This comment has been minimized.

Copy link
Author

cowwoc commented Dec 2, 2018

@rraptorr @guss77 I was asked to verify the https://bugs.openjdk.java.net/browse/JDK-8213202 fix but I am no longer working on this same project. Can one of you please verify confirm this is fixed?

@rraptorr

This comment has been minimized.

Copy link

rraptorr commented Dec 3, 2018

The fix is only available in OpenJDK repository. It might be also part of Java 12 early access builds. From practical point of view you would need to wait for another Java 11 release, January 2019 probably, but I have no idea if this fix will be part of that release.

@cowwoc

This comment has been minimized.

Copy link
Author

cowwoc commented Dec 3, 2018

@rraptorr The fix is in JDK 12 build 21 or newer, which you can find here: https://jdk.java.net/12/

@rraptorr

This comment has been minimized.

Copy link

rraptorr commented Dec 11, 2018

I was not able to reproduce the issue using b23

@cowwoc

This comment has been minimized.

Copy link
Author

cowwoc commented Dec 11, 2018

@rraptorr Thank you. Closing this issue.

@cowwoc cowwoc closed this Dec 11, 2018

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.