You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@lucene.apache.org by "Samuel García Martínez (Jira)" <ji...@apache.org> on 2020/05/02 09:12:00 UTC

[jira] [Created] (SOLR-14456) Compressed requests fail in SolrCloud when the request is routed internally by the serving solr node

Samuel García Martínez created SOLR-14456:
---------------------------------------------

             Summary: 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


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-unsubscribe@lucene.apache.org
For additional commands, e-mail: issues-help@lucene.apache.org