From f2f7eb932c5e30e03d9360ee06283a38df87d5fa Mon Sep 17 00:00:00 2001 From: marianore-muttdata Date: Tue, 17 Jun 2025 12:46:43 -0300 Subject: [PATCH 1/2] feat: add new env vars --- .../reference/environment-variables.mdx | 20 +++++++++++++++++++ packages/cubejs-backend-shared/src/env.ts | 4 ++++ packages/cubejs-server/src/server.ts | 12 ++++++++++- 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/docs/pages/product/configuration/reference/environment-variables.mdx b/docs/pages/product/configuration/reference/environment-variables.mdx index 24e79dbaa158d..8ba0b1805badb 100644 --- a/docs/pages/product/configuration/reference/environment-variables.mdx +++ b/docs/pages/product/configuration/reference/environment-variables.mdx @@ -1128,6 +1128,26 @@ Until v0.35, the default value was `schema`. It can be also set using the [`schema_path` configuration option](/product/configuration/reference/config#schema_path). +## `CUBEJS_SERVER_HEADERS_TIMEOUT` + +The number of milliseconds to limit the amount of time the parser will wait +to receive the complete HTTP headers. +If the timeout expires, the server responds with status 408 without +forwarding the request to the request listener and then closes the connection. + +| Possible Values | Default in Development | Default in Production | +| ----------------------------------------- | ------------------------ | ------------------------ | +| A valid number or string representing one | NodeJS's version default | NodeJS's version default | + +## `CUBEJS_SERVER_KEEP_ALIVE_TIMEOUT` + +The number of milliseconds of inactivity a server needs to wait for additional incoming data, +after it has finished writing the last response, before a socket will be destroyed. + +| Possible Values | Default in Development | Default in Production | +| ----------------------------------------- | ------------------------ | ------------------------ | +| A valid number or string representing one | NodeJS's version default | NodeJS's version default | + ## `CUBEJS_SQL_USER` A username required to access the [SQL API][ref-sql-api]. diff --git a/packages/cubejs-backend-shared/src/env.ts b/packages/cubejs-backend-shared/src/env.ts index 94bbdea86ad3f..af0ce6b33bd3e 100644 --- a/packages/cubejs-backend-shared/src/env.ts +++ b/packages/cubejs-backend-shared/src/env.ts @@ -144,6 +144,10 @@ const variables: Record any> = { webSockets: () => get('CUBEJS_WEB_SOCKETS') .default('false') .asBoolStrict(), + serverHeadersTimeout: () => get('CUBEJS_SERVER_HEADERS_TIMEOUT') + .asInt(), + serverKeepAliveTimeout: () => get('CUBEJS_SERVER_KEEP_ALIVE_TIMEOUT') + .asInt(), rollupOnlyMode: () => get('CUBEJS_ROLLUP_ONLY') .default('false') .asBoolStrict(), diff --git a/packages/cubejs-server/src/server.ts b/packages/cubejs-server/src/server.ts index 3c35a931212e7..2cdeccc74f01b 100644 --- a/packages/cubejs-server/src/server.ts +++ b/packages/cubejs-server/src/server.ts @@ -47,7 +47,7 @@ type RequireOne = { export class CubejsServer { protected readonly core: CubeCore; - protected readonly config: RequireOne; + protected readonly config: RequireOne; protected server: GracefulHttpServer | null = null; @@ -64,6 +64,8 @@ export class CubejsServer { sqlPort: config.sqlPort || getEnv('sqlPort'), pgSqlPort: config.pgSqlPort || getEnv('pgSqlPort'), gatewayPort: config.gatewayPort || getEnv('nativeApiGatewayPort'), + serverHeadersTimeout: config.serverHeadersTimeout ?? getEnv('serverHeadersTimeout'), + serverKeepAliveTimeout: config.serverKeepAliveTimeout ?? getEnv('serverKeepAliveTimeout'), http: { ...config.http, cors: { @@ -114,6 +116,14 @@ export class CubejsServer { await this.sqlServer.init(this.config); } + if (this.config.serverKeepAliveTimeout) { + this.server.keepAliveTimeout = this.config.serverKeepAliveTimeout; + } + + if (this.config.serverHeadersTimeout) { + this.server.headersTimeout = this.config.serverHeadersTimeout; + } + const PORT = getEnv('port'); await this.server.listen(PORT); From 41486bad45c06fc1f55854eb45542dcbce288c50 Mon Sep 17 00:00:00 2001 From: marianore-muttdata Date: Tue, 17 Jun 2025 13:00:52 -0300 Subject: [PATCH 2/2] fix: add vars to interface --- packages/cubejs-server/src/server.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/cubejs-server/src/server.ts b/packages/cubejs-server/src/server.ts index 2cdeccc74f01b..064e5bbefa626 100644 --- a/packages/cubejs-server/src/server.ts +++ b/packages/cubejs-server/src/server.ts @@ -36,6 +36,8 @@ export interface CreateOptions extends CoreCreateOptions, WebSocketServerOptions webSockets?: boolean; http?: HttpOptions; gracefulShutdown?: number; + serverKeepAliveTimeout?: number; + serverHeadersTimeout?: number; } type RequireOne = {