After upgrading Solr to Jetty 9.3, we noticed a lot of Solr tests started to randomly fail, and a couple would consistently fail.
After some investigation, I tracked down two issues that I think are involved.
One issue seems to be based on Locale. I think there is a default Locale bug or something, but I still have to dig into that one. More to come.
Specifically, it seems to be an HttpInput#consumeAll change.
The code went from:
T item = getNextContent();
if (item == null)
_contentState.waitForContent(this);
To:
Content item = nextContent();
if (item == null)
break; // Let's not bother blocking
Is that legal? And even if it is, isn't it at least a pretty big back compat break?
We can hit this case quite easily - and in 9.2 Jetty seems to properly wait on the server until the client is done sending and consumes all it should. In 9.3, if there is even a short pause in the wrong place on the client side, the server resets the connection on the client as it consumeAll bails early now. That messes with the client (broken pipe, connection reset) and prevents connection reuse.
Comments?
- Mark