Uploaded image for project: 'Solr'
  1. Solr
  2. SOLR-14456

Compressed requests fail in SolrCloud when the request is routed internally by the serving solr node

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 7.7.2
    • 8.6, 9.0
    • SolrCloud
    • None

    Description

      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

      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:

      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)

       

      Attachments

        Issue Links

          Activity

            Commit adddab9d1466675cd79fd06c37592000a56841d2 in lucene-solr's branch refs/heads/master from Samuel García Martínez
            [ https://gitbox.apache.org/repos/asf?p=lucene-solr.git;h=adddab9d ]

            SOLR-14456: Fix Content-Type header forwarding on compressed requests (#1480)

            Co-authored-by: Samuel García Martínez <samuelgma@inditex.com>

            jira-bot ASF subversion and git services added a comment - Commit adddab9d1466675cd79fd06c37592000a56841d2 in lucene-solr's branch refs/heads/master from Samuel García Martínez [ https://gitbox.apache.org/repos/asf?p=lucene-solr.git;h=adddab9d ] SOLR-14456 : Fix Content-Type header forwarding on compressed requests (#1480) Co-authored-by: Samuel García Martínez <samuelgma@inditex.com>

            Commit 7b32e68d054adb511999a97da8bcc2ad5a8a2428 in lucene-solr's branch refs/heads/branch_8x from Samuel García Martínez
            [ https://gitbox.apache.org/repos/asf?p=lucene-solr.git;h=7b32e68 ]

            SOLR-14456: Fix Content-Type header forwarding on compressed requests (#1480)

            Co-authored-by: Samuel García Martínez <samuelgma@inditex.com>

            jira-bot ASF subversion and git services added a comment - Commit 7b32e68d054adb511999a97da8bcc2ad5a8a2428 in lucene-solr's branch refs/heads/branch_8x from Samuel García Martínez [ https://gitbox.apache.org/repos/asf?p=lucene-solr.git;h=7b32e68 ] SOLR-14456 : Fix Content-Type header forwarding on compressed requests (#1480) Co-authored-by: Samuel García Martínez <samuelgma@inditex.com>
            broustant Bruno Roustant added a comment -

            Closing after the 8.6.0 release

            broustant Bruno Roustant added a comment - Closing after the 8.6.0 release

            People

              houston Houston Putman
              samuelgmartinez Samuel García Martínez
              Votes:
              1 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 2h 40m
                  2h 40m