> Caused by: java.io.IOException: Connection reset by peer > at sun.nio.ch.IOUtil.write(IOUtil.java:148)
This means the remote side closed the connection prematurely during a write operation. This is fishy, and I would consider it a red-flag that the remote isn't following the HTTP spec properly. You can verify if all of the data was legitimately sent over the network using a tracing tool like wireshark. You can also determine how that data was sent (with Content-Length, using Transfer-Encoding: chunked, compressed or not, or using super old school HTTP/1.0 techniques of raw bytes and closure of the connection). Joakim Erdfelt / joa...@webtide.com On Thu, Apr 14, 2022 at 10:47 AM Robben, Bert via jetty-users < jetty-users@eclipse.org> wrote: > Hey, > > > > I had a test failure (race condition, saw it only once) where a jetty > client makes a request on a jetty server and only gets an incomplete > response back. The jetty client does an asynchronous POST and consumes the > response using an InputStreamResponseListener. > > > > try (InputStream inputStream = listener.getInputStream()) { > > long dataReceived = 0; > > byte[] buffer = new byte[…]; > > int read = inputStream.read(buffer); > > while (read >= 0) { > > dataReceived += read; > > read = inputStream.read(buffer); > > } > > > > This loop ends *without exceptions*. However, the amount of data in the > response (dataReceived) is > 0, but a lot smaller than expected which makes > the test fail. > > > > Important to know is that at the moment of this failure, the server was > killed (as part of the test). Other requests that were ongoing get > exceptions like the ones below. I understand and fully expect these > exceptions. What I don’t understand is why the request that was consuming > its response didn’t get any. > > > > Is it wrong from me to assume I’ll always get some exception in case the > server is killed? > > > > I assume that our server-side resource is working as it should (so it > completes when the entire response has been sent to the output); so this > one doesn’t count. > > > > Note that the server does NOT fill in the CONTENT_LENGTH of the response; > as such the client doesn’t know when the stream will end. Is it possible > that the client interprets closure of the response stream sometimes as “ok, > this is the end” and doesn’t throw exceptions? > > > > > > Here are some of the other exceptions from other (but different) requests: > > > > [2022-04-12 03:09:49,154] [ERROR] [] [http-requests] [] - > 1649732989067,87,GET, > http://test-product:8080/test-product/v1/clustersingleton/clusterinfo/clusterInfoProvider?id=554d75d7-5c16-47e4-95e9-c0b110d1ec40-3484&replyAfter=110,EOFException, > "HttpConnectionOverHTTP@48aa14a1::SocketChannelEndPoint@4c95996c{l=/ > 10.233.90.85:35120,r=test-product/10.233.45.8:8080 > ,ISHUT,fill=-,flush=-,to=85/29123}{io=0/0,kio=0,kro=1}->HttpConnectionOverHTTP@48aa14a1 > (l:/10.233.90.85:35120 <-> r:test-product/10.233.45.8:8080 > ,closed=false)=>HttpChannelOverHTTP@9971e9a(exchange=HttpExchange@20c3f0a6{req=HttpRequest[GET > /test-product/v1/clustersingleton/clusterinfo/clusterInfoProvider > HTTP/1.1]@38d4f703[TERMINATED/null] res=HttpResponse[null 0 > null]@586a478c[PENDING/null]})[send=HttpSenderOverHTTP@69b8e1d5 > (req=QUEUED,snd=COMPLETED,failure=null)[HttpGenerator@56417a84 > {s=START}],recv=HttpReceiverOverHTTP@4932f3a0(rsp=IDLE,failure=null)[HttpParser{s=CLOSED,0 > of -1}]]" > > > > at > org.eclipse.jetty.client.http.HttpReceiverOverHTTP.earlyEOF(HttpReceiverOverHTTP.java:376) > > at > org.eclipse.jetty.client.http.HttpReceiverOverHTTP.process(HttpReceiverOverHTTP.java:181) > > at > org.eclipse.jetty.client.http.HttpChannelOverHTTP.receive(HttpChannelOverHTTP.java:131) > > at > org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) > > at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) > > at > org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338) > > at > org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:1614) > > > > and > > > > java.io.IOException: org.eclipse.jetty.io.EofException > > at > org.eclipse.jetty.client.util.OutputStreamContentProvider$DeferredOutputStream.flush(OutputStreamContentProvider.java:151) > > … > > Caused by: java.io.IOException: Connection reset by peer > > at sun.nio.ch.IOUtil.write(IOUtil.java:148) > > > > This test failure was exceptional; I suspect some race condition on the > server. > > > > Note: I was using Jetty 9.4.43.v20210629 in this test. (I’ve now upgraded > to 9.4.46) > > > > Thanks, > > > > Bert > The information contained in this message is proprietary and/or > confidential. If you are not the intended recipient, please: (i) delete the > message and all copies; (ii) do not disclose, distribute or use the message > in any manner; and (iii) notify the sender immediately. In addition, please > be aware that any message addressed to our domain is subject to archiving > and review by persons other than the intended recipient. Thank you. > _______________________________________________ > jetty-users mailing list > jetty-users@eclipse.org > To unsubscribe from this list, visit > https://www.eclipse.org/mailman/listinfo/jetty-users >
_______________________________________________ jetty-users mailing list jetty-users@eclipse.org To unsubscribe from this list, visit https://www.eclipse.org/mailman/listinfo/jetty-users