From fdc842b421fa138c9172f6c5d30daf9361865739 Mon Sep 17 00:00:00 2001 From: Kawika Avilla Date: Mon, 8 Apr 2024 11:11:02 +0000 Subject: [PATCH] [OE] Support compression for requests Support compressing traffic with `opensearch.compression: true`. Also, set compression in the Node server and OpenSearch traffic for CI. Issue resolved: https://github.com/opensearch-project/OpenSearch-Dashboards/issues/5296 Signed-off-by: Kawika Avilla --- .github/workflows/cypress_workflow.yml | 2 +- src/core/server/opensearch/client/client_config.ts | 5 +++++ src/core/server/opensearch/opensearch_config.ts | 8 ++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/.github/workflows/cypress_workflow.yml b/.github/workflows/cypress_workflow.yml index ac5d54bb7a2d..a4507d8bff55 100644 --- a/.github/workflows/cypress_workflow.yml +++ b/.github/workflows/cypress_workflow.yml @@ -30,7 +30,7 @@ env: TEST_REPO: ${{ inputs.test_repo != '' && inputs.test_repo || 'opensearch-project/opensearch-dashboards-functional-test' }} TEST_BRANCH: "${{ inputs.test_branch != '' && inputs.test_branch || github.base_ref }}" FTR_PATH: 'ftr' - START_CMD: 'node ../scripts/opensearch_dashboards --dev --no-base-path --no-watch --savedObjects.maxImportPayloadBytes=10485760 --server.maxPayloadBytes=1759977 --logging.json=false --data.search.aggs.shardDelay.enabled=true --csp.warnLegacyBrowsers=false' + START_CMD: 'node ../scripts/opensearch_dashboards --dev --no-base-path --no-watch --savedObjects.maxImportPayloadBytes=10485760 --server.maxPayloadBytes=1759977 --logging.json=false --data.search.aggs.shardDelay.enabled=true --csp.warnLegacyBrowsers=false --server.compression.enabled=true --opensearch.compression=true' OPENSEARCH_SNAPSHOT_CMD: 'node ../scripts/opensearch snapshot -E cluster.routing.allocation.disk.threshold_enabled=false' CYPRESS_BROWSER: 'chromium' CYPRESS_VISBUILDER_ENABLED: true diff --git a/src/core/server/opensearch/client/client_config.ts b/src/core/server/opensearch/client/client_config.ts index 0432bb8ddfd6..f53c9529a741 100644 --- a/src/core/server/opensearch/client/client_config.ts +++ b/src/core/server/opensearch/client/client_config.ts @@ -53,6 +53,7 @@ export type OpenSearchClientConfig = Pick< | 'username' | 'password' | 'disablePrototypePoisoningProtection' + | 'compression' > & { memoryCircuitBreaker?: | OpenSearchConfig['memoryCircuitBreaker'] @@ -120,6 +121,10 @@ export function parseClientOptions(config: OpenSearchClientConfig, scoped: boole clientOptions.disablePrototypePoisoningProtection = config.disablePrototypePoisoningProtection; } + if (config.compression) { + clientOptions.compression = 'gzip'; + } + return clientOptions; } diff --git a/src/core/server/opensearch/opensearch_config.ts b/src/core/server/opensearch/opensearch_config.ts index ba63e7350753..20800b8646fd 100644 --- a/src/core/server/opensearch/opensearch_config.ts +++ b/src/core/server/opensearch/opensearch_config.ts @@ -131,6 +131,7 @@ export const configSchema = schema.object({ healthCheck: schema.object({ delay: schema.duration({ defaultValue: 2500 }) }), ignoreVersionMismatch: schema.boolean({ defaultValue: false }), disablePrototypePoisoningProtection: schema.maybe(schema.boolean({ defaultValue: false })), + compression: schema.maybe(schema.boolean({ defaultValue: false })), }); const deprecations: ConfigDeprecationProvider = ({ renameFromRoot, renameFromRootWithoutMap }) => [ @@ -313,6 +314,12 @@ export class OpenSearchConfig { */ public readonly disablePrototypePoisoningProtection?: boolean; + /** + * Specifies whether the client should use compression to engine + * or not. + */ + public readonly compression?: boolean; + constructor(rawConfig: OpenSearchConfigType) { this.ignoreVersionMismatch = rawConfig.ignoreVersionMismatch; this.apiVersion = rawConfig.apiVersion; @@ -334,6 +341,7 @@ export class OpenSearchConfig { this.password = rawConfig.password; this.customHeaders = rawConfig.customHeaders; this.disablePrototypePoisoningProtection = rawConfig.disablePrototypePoisoningProtection; + this.compression = rawConfig.compression; const { alwaysPresentCertificate, verificationMode } = rawConfig.ssl; const { key, keyPassphrase, certificate, certificateAuthorities } = readKeyAndCerts(rawConfig);