From 08a54c0264997d7287554a1b5d1262e26fef1562 Mon Sep 17 00:00:00 2001 From: rakeshkky <12475069+rakeshkky@users.noreply.github.com> Date: Tue, 1 Oct 2019 17:09:09 +0530 Subject: [PATCH 1/3] remove brotli compression --- .../graphql/manual/deployment/compression.rst | 6 ++--- server/graphql-engine.cabal | 1 - server/src-lib/Hasura/Server/Compression.hs | 21 ++++++++++------- server/tests-py/test_compression.py | 23 ++++++++++--------- 4 files changed, 27 insertions(+), 24 deletions(-) diff --git a/docs/graphql/manual/deployment/compression.rst b/docs/graphql/manual/deployment/compression.rst index 93ef7da5808a0..787c077ce1f84 100644 --- a/docs/graphql/manual/deployment/compression.rst +++ b/docs/graphql/manual/deployment/compression.rst @@ -8,9 +8,7 @@ HTTP Compression The Hasura GraphQL Engine supports HTTP compression. The server looks for the ``Accept-Encoding`` header in request. -If the header contains ``br`` then the server uses `Brotli `__ compression else if the header contains -``gzip`` then the server uses `Gzip `__ compression. -If both values are present then the server prefers ``Brotli`` over ``Gzip``. -Also, the server sets the ``Content-Encoding`` response header value to ``br`` for ``Brotli`` compression or ``gzip`` for ``Gzip`` compression. +If the header contains ``gzip`` then the server uses `Gzip `__ compression. +Also, the server sets the ``Content-Encoding`` response header value to ``gzip``. **Only responses from "/v1/query" and "/v1/graphql" endpoints are compressed.** diff --git a/server/graphql-engine.cabal b/server/graphql-engine.cabal index f4cdd5c8a957a..17121b8ebc7d5 100644 --- a/server/graphql-engine.cabal +++ b/server/graphql-engine.cabal @@ -148,7 +148,6 @@ library -- HTTP compression , zlib - , brotli exposed-modules: Hasura.Prelude , Hasura.Logging diff --git a/server/src-lib/Hasura/Server/Compression.hs b/server/src-lib/Hasura/Server/Compression.hs index d35a91ba8bb10..398e5aa9e31e8 100644 --- a/server/src-lib/Hasura/Server/Compression.hs +++ b/server/src-lib/Hasura/Server/Compression.hs @@ -7,9 +7,10 @@ where import Hasura.Prelude -import Hasura.Server.Utils (brHeader, gzipHeader) +-- import Hasura.Server.Utils (brHeader, gzipHeader) +import Hasura.Server.Utils (gzipHeader) -import qualified Codec.Compression.Brotli as BR +-- import qualified Codec.Compression.Brotli as BR import qualified Codec.Compression.GZip as GZ import qualified Data.ByteString.Lazy as BL import qualified Data.Text as T @@ -17,12 +18,12 @@ import qualified Network.HTTP.Types.Header as NH data CompressionType = CTGZip - | CTBrotli + -- | CTBrotli deriving (Show, Eq) compressionTypeToTxt :: CompressionType -> T.Text compressionTypeToTxt CTGZip = "gzip" -compressionTypeToTxt CTBrotli = "brotli" +-- compressionTypeToTxt CTBrotli = "brotli" compressResponse :: NH.RequestHeaders @@ -31,14 +32,18 @@ compressResponse compressResponse reqHeaders unCompressedResp = let compressionTypeM = getRequestedCompression reqHeaders appendCompressionType (res, headerM) = (res, headerM, compressionTypeM) + -- brotliCompressionParams = + -- BR.defaultCompressParams{BR.compressLevel = BR.CompressionLevel4} + gzipCompressionParams = + GZ.defaultCompressParams{GZ.compressLevel = GZ.compressionLevel 1} in appendCompressionType $ case compressionTypeM of - Just CTBrotli -> (BR.compress unCompressedResp, Just brHeader) - Just CTGZip -> (GZ.compress unCompressedResp, Just gzipHeader) - Nothing -> (unCompressedResp, Nothing) + -- Just CTBrotli -> (BR.compressWith brotliCompressionParams unCompressedResp, Just brHeader) + Just CTGZip -> (GZ.compressWith gzipCompressionParams unCompressedResp, Just gzipHeader) + Nothing -> (unCompressedResp, Nothing) getRequestedCompression :: NH.RequestHeaders -> Maybe CompressionType getRequestedCompression reqHeaders - | "br" `elem` acceptEncodingVals = Just CTBrotli + -- | "br" `elem` acceptEncodingVals = Just CTBrotli | "gzip" `elem` acceptEncodingVals = Just CTGZip | otherwise = Nothing where diff --git a/server/tests-py/test_compression.py b/server/tests-py/test_compression.py index 552b51432bbf6..aa0ba97b1475a 100644 --- a/server/tests-py/test_compression.py +++ b/server/tests-py/test_compression.py @@ -63,27 +63,28 @@ def test_gzip_compression_v1_query(self, hge_ctx): resp = self._make_post(hge_ctx, url, q, self.gzip_header) self._assert_gzip(resp, exp_resp) - def test_brotli_compression_graphql(self, hge_ctx): - url, q, exp_resp = self._get_config(self.dir() + '/graphql_query.yaml') - resp = self._make_post(hge_ctx, url, q, self.brotli_header) - self._assert_brotli(resp, exp_resp) + # def test_brotli_compression_graphql(self, hge_ctx): + # url, q, exp_resp = self._get_config(self.dir() + '/graphql_query.yaml') + # resp = self._make_post(hge_ctx, url, q, self.brotli_header) + # self._assert_brotli(resp, exp_resp) - def test_brotli_compression_v1_query(self, hge_ctx): - url, q, exp_resp = self._get_config(self.dir() + '/v1_query.yaml') - resp = self._make_post(hge_ctx, url, q, self.brotli_header) - self._assert_brotli(resp, exp_resp) + # def test_brotli_compression_v1_query(self, hge_ctx): + # url, q, exp_resp = self._get_config(self.dir() + '/v1_query.yaml') + # resp = self._make_post(hge_ctx, url, q, self.brotli_header) + # self._assert_brotli(resp, exp_resp) - # If gzip and brotli encoding are requested the server prefers brotli def test_gzip_brotli_graphql_query(self, hge_ctx): url, q, exp_resp = self._get_config(self.dir() + '/graphql_query.yaml') resp = self._make_post(hge_ctx, url, q, self.gzip_brotli_header) - self._assert_brotli(resp, exp_resp) + # self._assert_brotli(resp, exp_resp) + self._assert_gzip(resp, exp_resp) def test_gzip_brotli_v1_query(self, hge_ctx): url, q, exp_resp = self._get_config(self.dir() + '/v1_query.yaml') resp = self._make_post(hge_ctx, url, q, self.gzip_brotli_header) - self._assert_brotli(resp, exp_resp) + # self._assert_brotli(resp, exp_resp) + self._assert_gzip(resp, exp_resp) @classmethod def dir(cls): From 0034e82cbd09a1eb482e1dec4cabdbd5fb4bd3f5 Mon Sep 17 00:00:00 2001 From: rakeshkky <12475069+rakeshkky@users.noreply.github.com> Date: Thu, 3 Oct 2019 11:57:14 +0530 Subject: [PATCH 2/3] remove comments in Hasura/Server/Compression.hs Review request by @lexi-lambda --- server/src-lib/Hasura/Server/Compression.hs | 8 -------- 1 file changed, 8 deletions(-) diff --git a/server/src-lib/Hasura/Server/Compression.hs b/server/src-lib/Hasura/Server/Compression.hs index 398e5aa9e31e8..8c3dcd31753c6 100644 --- a/server/src-lib/Hasura/Server/Compression.hs +++ b/server/src-lib/Hasura/Server/Compression.hs @@ -7,10 +7,8 @@ where import Hasura.Prelude --- import Hasura.Server.Utils (brHeader, gzipHeader) import Hasura.Server.Utils (gzipHeader) --- import qualified Codec.Compression.Brotli as BR import qualified Codec.Compression.GZip as GZ import qualified Data.ByteString.Lazy as BL import qualified Data.Text as T @@ -18,12 +16,10 @@ import qualified Network.HTTP.Types.Header as NH data CompressionType = CTGZip - -- | CTBrotli deriving (Show, Eq) compressionTypeToTxt :: CompressionType -> T.Text compressionTypeToTxt CTGZip = "gzip" --- compressionTypeToTxt CTBrotli = "brotli" compressResponse :: NH.RequestHeaders @@ -32,18 +28,14 @@ compressResponse compressResponse reqHeaders unCompressedResp = let compressionTypeM = getRequestedCompression reqHeaders appendCompressionType (res, headerM) = (res, headerM, compressionTypeM) - -- brotliCompressionParams = - -- BR.defaultCompressParams{BR.compressLevel = BR.CompressionLevel4} gzipCompressionParams = GZ.defaultCompressParams{GZ.compressLevel = GZ.compressionLevel 1} in appendCompressionType $ case compressionTypeM of - -- Just CTBrotli -> (BR.compressWith brotliCompressionParams unCompressedResp, Just brHeader) Just CTGZip -> (GZ.compressWith gzipCompressionParams unCompressedResp, Just gzipHeader) Nothing -> (unCompressedResp, Nothing) getRequestedCompression :: NH.RequestHeaders -> Maybe CompressionType getRequestedCompression reqHeaders - -- | "br" `elem` acceptEncodingVals = Just CTBrotli | "gzip" `elem` acceptEncodingVals = Just CTGZip | otherwise = Nothing where From 0f2837cb4d65a22675c9220a7590fdead13f03a9 Mon Sep 17 00:00:00 2001 From: rakeshkky <12475069+rakeshkky@users.noreply.github.com> Date: Fri, 4 Oct 2019 11:03:24 +0530 Subject: [PATCH 3/3] remove commented lines in test_compression.py --- server/tests-py/test_compression.py | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/server/tests-py/test_compression.py b/server/tests-py/test_compression.py index aa0ba97b1475a..8d8da452afd32 100644 --- a/server/tests-py/test_compression.py +++ b/server/tests-py/test_compression.py @@ -63,27 +63,15 @@ def test_gzip_compression_v1_query(self, hge_ctx): resp = self._make_post(hge_ctx, url, q, self.gzip_header) self._assert_gzip(resp, exp_resp) - # def test_brotli_compression_graphql(self, hge_ctx): - # url, q, exp_resp = self._get_config(self.dir() + '/graphql_query.yaml') - # resp = self._make_post(hge_ctx, url, q, self.brotli_header) - # self._assert_brotli(resp, exp_resp) - - # def test_brotli_compression_v1_query(self, hge_ctx): - # url, q, exp_resp = self._get_config(self.dir() + '/v1_query.yaml') - # resp = self._make_post(hge_ctx, url, q, self.brotli_header) - # self._assert_brotli(resp, exp_resp) - def test_gzip_brotli_graphql_query(self, hge_ctx): url, q, exp_resp = self._get_config(self.dir() + '/graphql_query.yaml') resp = self._make_post(hge_ctx, url, q, self.gzip_brotli_header) - # self._assert_brotli(resp, exp_resp) self._assert_gzip(resp, exp_resp) def test_gzip_brotli_v1_query(self, hge_ctx): url, q, exp_resp = self._get_config(self.dir() + '/v1_query.yaml') resp = self._make_post(hge_ctx, url, q, self.gzip_brotli_header) - # self._assert_brotli(resp, exp_resp) self._assert_gzip(resp, exp_resp) @classmethod