Skip to content

Commit a98e58c

Browse files
committed
Ability to configure the clickhouse keep alive settings
1 parent ffb5695 commit a98e58c

File tree

4 files changed

+46
-12
lines changed

4 files changed

+46
-12
lines changed

apps/webapp/app/env.server.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -769,6 +769,8 @@ const EnvironmentSchema = z.object({
769769
RUN_REPLICATION_LEADER_LOCK_ADDITIONAL_TIME_MS: z.coerce.number().int().default(10_000),
770770
RUN_REPLICATION_LEADER_LOCK_RETRY_INTERVAL_MS: z.coerce.number().int().default(500),
771771
RUN_REPLICATION_WAIT_FOR_ASYNC_INSERT: z.string().default("0"),
772+
RUN_REPLICATION_KEEP_ALIVE_ENABLED: z.string().default("1"),
773+
RUN_REPLICATION_KEEP_ALIVE_IDLE_SOCKET_TTL_MS: z.coerce.number().int().default(9_000),
772774
});
773775

774776
export type Environment = z.infer<typeof EnvironmentSchema>;

apps/webapp/app/services/runsReplicationInstance.server.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ function initializeRunsReplicationInstance() {
2323
const clickhouse = new ClickHouse({
2424
url: env.RUN_REPLICATION_CLICKHOUSE_URL,
2525
name: "runs-replication",
26+
keepAlive: {
27+
enabled: env.RUN_REPLICATION_KEEP_ALIVE_ENABLED === "1",
28+
idleSocketTtl: env.RUN_REPLICATION_KEEP_ALIVE_IDLE_SOCKET_TTL_MS,
29+
},
30+
logLevel: env.RUN_REPLICATION_LOG_LEVEL,
2631
});
2732

2833
const service = new RunsReplicationService({

internal-packages/clickhouse/src/client/client.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,22 @@ import type {
1515
ClickhouseWriter,
1616
} from "./types.js";
1717
import { generateErrorMessage } from "zod-error";
18-
import { Logger } from "@trigger.dev/core/logger";
18+
import { Logger, type LogLevel } from "@trigger.dev/core/logger";
19+
import type { Agent as HttpAgent } from "http";
20+
import type { Agent as HttpsAgent } from "https";
1921

2022
export type ClickhouseConfig = {
2123
name: string;
2224
url: string;
2325
tracer?: Tracer;
26+
keepAlive?: {
27+
enabled?: boolean;
28+
idleSocketTtl?: number;
29+
};
30+
httpAgent?: HttpAgent | HttpsAgent;
2431
clickhouseSettings?: ClickHouseSettings;
2532
logger?: Logger;
33+
logLevel?: LogLevel;
2634
};
2735

2836
export class ClickhouseClient implements ClickhouseReader, ClickhouseWriter {
@@ -33,11 +41,12 @@ export class ClickhouseClient implements ClickhouseReader, ClickhouseWriter {
3341

3442
constructor(config: ClickhouseConfig) {
3543
this.name = config.name;
36-
this.logger = config.logger ?? new Logger("ClickhouseClient", "debug");
44+
this.logger = config.logger ?? new Logger("ClickhouseClient", config.logLevel ?? "info");
3745

3846
this.client = createClient({
3947
url: config.url,
40-
48+
keep_alive: config.keepAlive,
49+
http_agent: config.httpAgent,
4150
clickhouse_settings: {
4251
...config.clickhouseSettings,
4352
output_format_json_quote_64bit_integers: 0,

internal-packages/clickhouse/src/index.ts

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,29 +3,38 @@ import { ClickhouseClient } from "./client/client.js";
33
import { ClickhouseReader, ClickhouseWriter } from "./client/types.js";
44
import { NoopClient } from "./client/noop.js";
55
import { insertTaskRuns, insertRawTaskRunPayloads } from "./taskRuns.js";
6-
import { Logger } from "@trigger.dev/core/logger";
6+
import { Logger, type LogLevel } from "@trigger.dev/core/logger";
7+
import type { Agent as HttpAgent } from "http";
8+
import type { Agent as HttpsAgent } from "https";
79

810
export type * from "./taskRuns.js";
911

12+
export type ClickhouseCommonConfig = {
13+
keepAlive?: {
14+
enabled?: boolean;
15+
idleSocketTtl?: number;
16+
};
17+
httpAgent?: HttpAgent | HttpsAgent;
18+
clickhouseSettings?: ClickHouseSettings;
19+
logger?: Logger;
20+
logLevel?: LogLevel;
21+
};
22+
1023
export type ClickHouseConfig =
11-
| {
24+
| ({
1225
name?: string;
1326
url?: string;
1427
writerUrl?: never;
1528
readerUrl?: never;
16-
clickhouseSettings?: ClickHouseSettings;
17-
logger?: Logger;
18-
}
19-
| {
29+
} & ClickhouseCommonConfig)
30+
| ({
2031
name?: never;
2132
url?: never;
2233
writerName?: string;
2334
writerUrl: string;
2435
readerName?: string;
2536
readerUrl: string;
26-
clickhouseSettings?: ClickHouseSettings;
27-
logger?: Logger;
28-
};
37+
} & ClickhouseCommonConfig);
2938

3039
export class ClickHouse {
3140
public readonly reader: ClickhouseReader;
@@ -47,6 +56,9 @@ export class ClickHouse {
4756
url: config.url,
4857
clickhouseSettings: config.clickhouseSettings,
4958
logger: this.logger,
59+
logLevel: config.logLevel,
60+
keepAlive: config.keepAlive,
61+
httpAgent: config.httpAgent,
5062
});
5163
this.reader = client;
5264
this.writer = client;
@@ -58,12 +70,18 @@ export class ClickHouse {
5870
url: config.readerUrl,
5971
clickhouseSettings: config.clickhouseSettings,
6072
logger: this.logger,
73+
logLevel: config.logLevel,
74+
keepAlive: config.keepAlive,
75+
httpAgent: config.httpAgent,
6176
});
6277
this.writer = new ClickhouseClient({
6378
name: config.writerName ?? "clickhouse-writer",
6479
url: config.writerUrl,
6580
clickhouseSettings: config.clickhouseSettings,
6681
logger: this.logger,
82+
logLevel: config.logLevel,
83+
keepAlive: config.keepAlive,
84+
httpAgent: config.httpAgent,
6785
});
6886

6987
this._splitClients = true;

0 commit comments

Comments
 (0)