[ https://issues.apache.org/jira/browse/SOLR-14456?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Houston Putman reassigned SOLR-14456: ------------------------------------- Assignee: Houston Putman > Compressed requests fail in SolrCloud when the request is routed internally > by the serving solr node > ---------------------------------------------------------------------------------------------------- > > Key: SOLR-14456 > URL: https://issues.apache.org/jira/browse/SOLR-14456 > Project: Solr > Issue Type: Bug > Security Level: Public(Default Security Level. Issues are Public) > Components: SolrCloud > Affects Versions: 7.7.2 > Environment: Solr version: 7.7.2 > Solr cloud enabled > Cluster topology: 6 nodes, 1 single collection, 10 shards and 3 replicas. 1 > HTTP LB using Round Robin over all nodes > All cluster nodes have gzip enabled for all paths, all HTTP verbs and all > MIME types. > Solr client: HttpSolrClient targeting the HTTP LB > h3. > Reporter: Samuel García Martínez > Assignee: Houston Putman > Priority: Major > Time Spent: 2.5h > Remaining Estimate: 0h > > h3. Solr cluster setup > * Solr version: 7.7.2 > * Solr cloud enabled > * Cluster topology: 6 nodes, 1 single collection, 10 shards and 3 replicas. > 1 HTTP LB using Round Robin over all nodes > * All cluster nodes have gzip enabled for all paths, all HTTP verbs and all > MIME types. > * Solr client: HttpSolrClient targeting the HTTP LB > h3. Problem description > When the Solr node that receives the request has to forward it > to a Solr Node that can actually perform the query, the response headers are > added incorrectly to the response, causing any HTTP client to fail, whether > it's a SolrClient or a basic HTTP client implementation with any other SDK. > To simplify the case, let's try to start from the following repro scenario: > * Start one node with cloud mode and port 8983 > * Create one single collection (1 shard, 1 replica) > * Start another node with port 8984 and the previusly started zk (-z > localhost:9983) > * Start a java application and query the cluster using the node on port 8984 > (the one that doesn't host the collection) > So, then something like this happens: > * The application queries node:8984 with compression enabled > ("Accept-Encoding: gzip") > and wt=javabin > * Node:8984 can't perform the query and creates a http request behind the > scenes to node:8983 > * Node:8983 returns a gzipped response with "Content-Encoding: gzip" and > "Content-Type: > application/octet-stream" > Node:8984 adds the "Content-Encoding: gzip" header as character stream to the > response > (it should be forwarded as "Content-Encoding" header, not character encoding) > * HttpSolrClient receives a "Content-Type: > application/octet-stream;charset=gzip", causing > an exception. > * HttpSolrClient tries to quietly close the connection, but since the stream > is broken, > the Utils.consumeFully fails to actually consume the entity (it throws > another exception in > GzipDecompressingEntity#getContent() with "not in GZIP format") > The exception thrown by HttpSolrClient is: > {code:java} > java.nio.charset.UnsupportedCharsetException: gzip > at java.nio.charset.Charset.forName(Charset.java:531) > at org.apache.http.entity.ContentType.create(ContentType.java:271) > at org.apache.http.entity.ContentType.create(ContentType.java:261) > at org.apache.http.entity.ContentType.parse(ContentType.java:319) > at > org.apache.solr.client.solrj.impl.HttpSolrClient.executeMethod(HttpSolrClient.java:591) > at > org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:255) > at > org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:244) > at org.apache.solr.client.solrj.SolrRequest.process(SolrRequest.java:194) > at org.apache.solr.client.solrj.SolrClient.query(SolrClient.java:1015) > at org.apache.solr.client.solrj.SolrClient.query(SolrClient.java:1031) > at > org.apache.solr.client.solrj.SolrClient$$FastClassBySpringCGLIB$$7fcf36a0.invoke(<generated>) > at > org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218){code} > -- This message was sent by Atlassian Jira (v8.3.4#803005) --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org For additional commands, e-mail: issues-h...@lucene.apache.org