check out the videos on this website TROO.TUBE don't be such a sheep/zombie/loser/NPC. Much love! https://troo.tube/videos/watch/aaa64864-52ee-4201-922f-41300032f219
On Tue, May 5, 2020 at 3:33 AM Johannes Siegert <johannes.sieg...@offerista.com> wrote: > > Hi, > > We did further tests to see where the problem exactly is. These are our > outcomes: > > The content-length is calculated correctly, a quick test with curl showed > this. > The problem is that the stream with the gzip data is not fully consumed and > afterwards not closed. > > Using the debugger with a breakpoint at > org/apache/solr/common/util/Utils.java:575 shows that it won't enter the > function readFully((entity.getContent()) most likely due to how the gzip > stream content is wrapped and extracted beforehand. > > On line org/apache/solr/common/util/Utils.java:582 the > consumeQuietly(entity) should close the stream but does not because of a > silent exception. > > This seems to be the same as it is described in > https://issues.apache.org/jira/browse/SOLR-14457 > > We saw that the problem happened also with correct GZIP responses from > jetty. Not only with non-GZIP as described within the jira issue. > > Best, > > Johannes > > Am Do., 23. Apr. 2020 um 09:55 Uhr schrieb Johannes Siegert < > johannes.sieg...@offerista.com>: > > > Hi, > > > > we want to use gzip-compression between our application and the solr > > server. > > > > We use a standalone solr server version 8.4.1 and the prepackaged jetty as > > application server. > > > > We have enabled the jetty gzip module by adding these two files: > > > > {path_to_solr}/server/modules/gzip.mod (see below the question) > > {path_to_solr}/server/etc/jetty-gzip.xml (see below the question) > > > > Within the application we use a HttpSolrServer that is configured with > > allowCompression=true. > > > > After we had released our application we saw that the number of > > connections within the TCP-state CLOSE_WAIT rising up until the application > > was not able to open new connections. > > > > > > After a long debugging session we think the problem is that the header > > "Content-Length" that is returned by the jetty is sometimes wrong when > > gzip-compression is enabled. > > > > The solrj client uses a ContentLengthInputStream, that uses the header > > "Content-Lenght" to detect if all data was received. But the InputStream > > can not be fully consumed because the value of the header "Content-Lenght" > > is higher than the actual content-length. > > > > Usually the method PoolingHttpClientConnectionManager.releaseConnection is > > called after the InputStream was fully consumed. This give the connection > > free to be reused or to be closed by the application. > > > > Due to the incorrect header "Content-Length" the > > PoolingHttpClientConnectionManager.releaseConnection method is never called > > and the connection stays active. After the connection-timeout of the jetty > > is reached, it closes the connection from the server-side and the TCP-state > > switches into CLOSE_WAIT. The client never closes the connection and so the > > number of connections in use rises up. > > > > > > Currently we try to configure the jetty gzip module to return no > > "Content-Length" if gzip-compression was used. We hope that in this case > > another InputStream implementation is used that uses the NULL-terminator to > > see when the InputStream was fully consumed. > > > > Do you have any experiences with this problem or any suggestions for us? > > > > Thanks, > > > > Johannes > > > > > > gzip.mod > > > > ----- > > > > DO NOT EDIT - See: > > https://www.eclipse.org/jetty/documentation/current/startup-modules.html > > > > [description] > > Enable GzipHandler for dynamic gzip compression > > for the entire server. > > > > [tags] > > handler > > > > [depend] > > server > > > > [xml] > > etc/jetty-gzip.xml > > > > [ini-template] > > ## Minimum content length after which gzip is enabled > > jetty.gzip.minGzipSize=2048 > > > > ## Check whether a file with *.gz extension exists > > jetty.gzip.checkGzExists=false > > > > ## Gzip compression level (-1 for default) > > jetty.gzip.compressionLevel=-1 > > > > ## User agents for which gzip is disabled > > jetty.gzip.excludedUserAgent=.*MSIE.6\.0.* > > > > ----- > > > > jetty-gzip.xml > > > > ----- > > > > <?xml version="1.0"?> > > <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" " > > http://www.eclipse.org/jetty/configure_9_3.dtd"> > > > > <!-- =============================================================== --> > > <!-- Mixin the GZIP Handler --> > > <!-- This applies the GZIP Handler to the entire server --> > > <!-- If a GZIP handler is required for an individual context, then --> > > <!-- use a context XML (see test.xml example in distribution) --> > > <!-- =============================================================== --> > > > > <Configure id="Server" class="org.eclipse.jetty.server.Server"> > > <Call name="insertHandler"> > > <Arg> > > <New id="GzipHandler" > > class="org.eclipse.jetty.server.handler.gzip.GzipHandler"> > > <Set name="minGzipSize"> > > <Property name="jetty.gzip.minGzipSize" > > deprecated="gzip.minGzipSize" default="2048" /> > > </Set> > > <Set name="checkGzExists"> > > <Property name="jetty.gzip.checkGzExists" > > deprecated="gzip.checkGzExists" default="false" /> > > </Set> > > <Set name="compressionLevel"> > > <Property name="jetty.gzip.compressionLevel" > > deprecated="gzip.compressionLevel" default="-1" /> > > </Set> > > <Set name="inflateBufferSize"> > > <Property name="jetty.gzip.inflateBufferSize" > > default="0" /> > > </Set> > > <Set name="deflaterPoolCapacity"> > > <Property name="jetty.gzip.deflaterPoolCapacity" > > default="-1" /> > > </Set> > > <Set name="syncFlush"> > > <Property name="jetty.gzip.syncFlush" default="false" > > /> > > </Set> > > > > <Set name="excludedAgentPatterns"> > > <Array type="String"> > > <Item> > > <Property name="jetty.gzip.excludedUserAgent" > > deprecated="gzip.excludedUserAgent" default=".*MSIE.6\.0.*" /> > > </Item> > > </Array> > > </Set> > > > > <Set name="includedMethodList"> > > <Property name="jetty.gzip.includedMethodList" > > default="GET,POST" /> > > </Set> > > <Set name="excludedMethodList"> > > <Property name="jetty.gzip.excludedMethodList" > > default="" /> > > </Set> > > </New> > > </Arg> > > </Call> > > </Configure> > > > > ----- > >