Skip to content

Commit a6a6b8f

Browse files
committed
refactor(clickhouse-driver): use env-var for clickhouse env variables
1 parent 0c41721 commit a6a6b8f

File tree

4 files changed

+105
-58
lines changed

4 files changed

+105
-58
lines changed

packages/cubejs-backend-shared/src/env.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1164,9 +1164,9 @@ const variables: Record<string, (...args: any) => any> = {
11641164
}: {
11651165
dataSource: string,
11661166
}) => (
1167-
process.env[
1168-
keyByDataSource('CUBEJS_DB_CLICKHOUSE_READONLY', dataSource)
1169-
]
1167+
get(keyByDataSource('CUBEJS_DB_CLICKHOUSE_READONLY', dataSource))
1168+
.default('false')
1169+
.asBool()
11701170
),
11711171

11721172
/**
@@ -1177,9 +1177,9 @@ const variables: Record<string, (...args: any) => any> = {
11771177
}: {
11781178
dataSource: string,
11791179
}) => (
1180-
process.env[
1181-
keyByDataSource('CUBEJS_DB_CLICKHOUSE_COMPRESSION', dataSource)
1182-
]
1180+
get(keyByDataSource('CUBEJS_DB_CLICKHOUSE_COMPRESSION', dataSource))
1181+
.default('false')
1182+
.asBool()
11831183
),
11841184

11851185
/** ****************************************************************

packages/cubejs-backend-shared/test/db_env_multi.test.ts

Lines changed: 50 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1511,58 +1511,84 @@ describe('Multiple datasources', () => {
15111511
});
15121512

15131513
test('getEnv("clickhouseReadOnly")', () => {
1514-
process.env.CUBEJS_DB_CLICKHOUSE_READONLY = 'default1';
1515-
process.env.CUBEJS_DS_POSTGRES_DB_CLICKHOUSE_READONLY = 'postgres1';
1516-
process.env.CUBEJS_DS_WRONG_DB_CLICKHOUSE_READONLY = 'wrong1';
1517-
expect(getEnv('clickhouseReadOnly', { dataSource: 'default' })).toEqual('default1');
1518-
expect(getEnv('clickhouseReadOnly', { dataSource: 'postgres' })).toEqual('postgres1');
1514+
process.env.CUBEJS_DB_CLICKHOUSE_READONLY = 'true';
1515+
process.env.CUBEJS_DS_POSTGRES_DB_CLICKHOUSE_READONLY = 'true';
1516+
process.env.CUBEJS_DS_WRONG_DB_CLICKHOUSE_READONLY = 'true';
1517+
expect(getEnv('clickhouseReadOnly', { dataSource: 'default' })).toEqual(true);
1518+
expect(getEnv('clickhouseReadOnly', { dataSource: 'postgres' })).toEqual(true);
15191519
expect(() => getEnv('clickhouseReadOnly', { dataSource: 'wrong' })).toThrow(
15201520
'The wrong data source is missing in the declared CUBEJS_DATASOURCES.'
15211521
);
15221522

1523-
process.env.CUBEJS_DB_CLICKHOUSE_READONLY = 'default2';
1524-
process.env.CUBEJS_DS_POSTGRES_DB_CLICKHOUSE_READONLY = 'postgres2';
1525-
process.env.CUBEJS_DS_WRONG_DB_CLICKHOUSE_READONLY = 'wrong2';
1526-
expect(getEnv('clickhouseReadOnly', { dataSource: 'default' })).toEqual('default2');
1527-
expect(getEnv('clickhouseReadOnly', { dataSource: 'postgres' })).toEqual('postgres2');
1523+
process.env.CUBEJS_DB_CLICKHOUSE_READONLY = 'false';
1524+
process.env.CUBEJS_DS_POSTGRES_DB_CLICKHOUSE_READONLY = 'false';
1525+
process.env.CUBEJS_DS_WRONG_DB_CLICKHOUSE_READONLY = 'false';
1526+
expect(getEnv('clickhouseReadOnly', { dataSource: 'default' })).toEqual(false);
1527+
expect(getEnv('clickhouseReadOnly', { dataSource: 'postgres' })).toEqual(false);
1528+
expect(() => getEnv('clickhouseReadOnly', { dataSource: 'wrong' })).toThrow(
1529+
'The wrong data source is missing in the declared CUBEJS_DATASOURCES.'
1530+
);
1531+
1532+
process.env.CUBEJS_DB_CLICKHOUSE_READONLY = 'wrong';
1533+
process.env.CUBEJS_DS_POSTGRES_DB_CLICKHOUSE_READONLY = 'wrong';
1534+
process.env.CUBEJS_DS_WRONG_DB_CLICKHOUSE_READONLY = 'wrong';
1535+
expect(() => getEnv('clickhouseReadOnly', { dataSource: 'default' })).toThrow(
1536+
'env-var: "CUBEJS_DB_CLICKHOUSE_READONLY" should be either "true", "false", "TRUE", "FALSE", 1, or 0'
1537+
);
1538+
expect(() => getEnv('clickhouseReadOnly', { dataSource: 'postgres' })).toThrow(
1539+
'env-var: "CUBEJS_DS_POSTGRES_DB_CLICKHOUSE_READONLY" should be either "true", "false", "TRUE", "FALSE", 1, or 0'
1540+
);
15281541
expect(() => getEnv('clickhouseReadOnly', { dataSource: 'wrong' })).toThrow(
15291542
'The wrong data source is missing in the declared CUBEJS_DATASOURCES.'
15301543
);
15311544

15321545
delete process.env.CUBEJS_DB_CLICKHOUSE_READONLY;
15331546
delete process.env.CUBEJS_DS_POSTGRES_DB_CLICKHOUSE_READONLY;
15341547
delete process.env.CUBEJS_DS_WRONG_DB_CLICKHOUSE_READONLY;
1535-
expect(getEnv('clickhouseReadOnly', { dataSource: 'default' })).toBeUndefined();
1536-
expect(getEnv('clickhouseReadOnly', { dataSource: 'postgres' })).toBeUndefined();
1548+
expect(getEnv('clickhouseReadOnly', { dataSource: 'default' })).toEqual(false);
1549+
expect(getEnv('clickhouseReadOnly', { dataSource: 'postgres' })).toEqual(false);
15371550
expect(() => getEnv('clickhouseReadOnly', { dataSource: 'wrong' })).toThrow(
15381551
'The wrong data source is missing in the declared CUBEJS_DATASOURCES.'
15391552
);
15401553
});
15411554

15421555
test('getEnv("clickhouseCompression")', () => {
1543-
process.env.CUBEJS_DB_CLICKHOUSE_COMPRESSION = 'default1';
1544-
process.env.CUBEJS_DS_POSTGRES_DB_CLICKHOUSE_COMPRESSION = 'postgres1';
1545-
process.env.CUBEJS_DS_WRONG_DB_CLICKHOUSE_COMPRESSION = 'wrong1';
1546-
expect(getEnv('clickhouseCompression', { dataSource: 'default' })).toEqual('default1');
1547-
expect(getEnv('clickhouseCompression', { dataSource: 'postgres' })).toEqual('postgres1');
1556+
process.env.CUBEJS_DB_CLICKHOUSE_COMPRESSION = 'true';
1557+
process.env.CUBEJS_DS_POSTGRES_DB_CLICKHOUSE_COMPRESSION = 'true';
1558+
process.env.CUBEJS_DS_WRONG_DB_CLICKHOUSE_COMPRESSION = 'true';
1559+
expect(getEnv('clickhouseCompression', { dataSource: 'default' })).toEqual(true);
1560+
expect(getEnv('clickhouseCompression', { dataSource: 'postgres' })).toEqual(true);
15481561
expect(() => getEnv('clickhouseCompression', { dataSource: 'wrong' })).toThrow(
15491562
'The wrong data source is missing in the declared CUBEJS_DATASOURCES.'
15501563
);
15511564

1552-
process.env.CUBEJS_DB_CLICKHOUSE_COMPRESSION = 'default2';
1553-
process.env.CUBEJS_DS_POSTGRES_DB_CLICKHOUSE_COMPRESSION = 'postgres2';
1554-
process.env.CUBEJS_DS_WRONG_DB_CLICKHOUSE_COMPRESSION = 'wrong2';
1555-
expect(getEnv('clickhouseCompression', { dataSource: 'default' })).toEqual('default2');
1556-
expect(getEnv('clickhouseCompression', { dataSource: 'postgres' })).toEqual('postgres2');
1565+
process.env.CUBEJS_DB_CLICKHOUSE_COMPRESSION = 'false';
1566+
process.env.CUBEJS_DS_POSTGRES_DB_CLICKHOUSE_COMPRESSION = 'false';
1567+
process.env.CUBEJS_DS_WRONG_DB_CLICKHOUSE_COMPRESSION = 'false';
1568+
expect(getEnv('clickhouseCompression', { dataSource: 'default' })).toEqual(false);
1569+
expect(getEnv('clickhouseCompression', { dataSource: 'postgres' })).toEqual(false);
1570+
expect(() => getEnv('clickhouseCompression', { dataSource: 'wrong' })).toThrow(
1571+
'The wrong data source is missing in the declared CUBEJS_DATASOURCES.'
1572+
);
1573+
1574+
process.env.CUBEJS_DB_CLICKHOUSE_COMPRESSION = 'wrong';
1575+
process.env.CUBEJS_DS_POSTGRES_DB_CLICKHOUSE_COMPRESSION = 'wrong';
1576+
process.env.CUBEJS_DS_WRONG_DB_CLICKHOUSE_COMPRESSION = 'wrong';
1577+
expect(() => getEnv('clickhouseCompression', { dataSource: 'default' })).toThrow(
1578+
'env-var: "CUBEJS_DB_CLICKHOUSE_COMPRESSION" should be either "true", "false", "TRUE", "FALSE", 1, or 0'
1579+
);
1580+
expect(() => getEnv('clickhouseCompression', { dataSource: 'postgres' })).toThrow(
1581+
'env-var: "CUBEJS_DS_POSTGRES_DB_CLICKHOUSE_COMPRESSION" should be either "true", "false", "TRUE", "FALSE", 1, or 0'
1582+
);
15571583
expect(() => getEnv('clickhouseCompression', { dataSource: 'wrong' })).toThrow(
15581584
'The wrong data source is missing in the declared CUBEJS_DATASOURCES.'
15591585
);
15601586

15611587
delete process.env.CUBEJS_DB_CLICKHOUSE_COMPRESSION;
15621588
delete process.env.CUBEJS_DS_POSTGRES_DB_CLICKHOUSE_COMPRESSION;
15631589
delete process.env.CUBEJS_DS_WRONG_DB_CLICKHOUSE_COMPRESSION;
1564-
expect(getEnv('clickhouseCompression', { dataSource: 'default' })).toBeUndefined();
1565-
expect(getEnv('clickhouseCompression', { dataSource: 'postgres' })).toBeUndefined();
1590+
expect(getEnv('clickhouseCompression', { dataSource: 'default' })).toEqual(false);
1591+
expect(getEnv('clickhouseCompression', { dataSource: 'postgres' })).toEqual(false);
15661592
expect(() => getEnv('clickhouseCompression', { dataSource: 'wrong' })).toThrow(
15671593
'The wrong data source is missing in the declared CUBEJS_DATASOURCES.'
15681594
);

packages/cubejs-backend-shared/test/db_env_single.test.ts

Lines changed: 46 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -959,37 +959,59 @@ describe('Single datasources', () => {
959959
});
960960

961961
test('getEnv("clickhouseReadOnly")', () => {
962-
process.env.CUBEJS_DB_CLICKHOUSE_READONLY = 'default1';
963-
expect(getEnv('clickhouseReadOnly', { dataSource: 'default' })).toEqual('default1');
964-
expect(getEnv('clickhouseReadOnly', { dataSource: 'postgres' })).toEqual('default1');
965-
expect(getEnv('clickhouseReadOnly', { dataSource: 'wrong' })).toEqual('default1');
966-
967-
process.env.CUBEJS_DB_CLICKHOUSE_READONLY = 'default2';
968-
expect(getEnv('clickhouseReadOnly', { dataSource: 'default' })).toEqual('default2');
969-
expect(getEnv('clickhouseReadOnly', { dataSource: 'postgres' })).toEqual('default2');
970-
expect(getEnv('clickhouseReadOnly', { dataSource: 'wrong' })).toEqual('default2');
962+
process.env.CUBEJS_DB_CLICKHOUSE_READONLY = 'true';
963+
expect(getEnv('clickhouseReadOnly', { dataSource: 'default' })).toEqual(true);
964+
expect(getEnv('clickhouseReadOnly', { dataSource: 'postgres' })).toEqual(true);
965+
expect(getEnv('clickhouseReadOnly', { dataSource: 'wrong' })).toEqual(true);
966+
967+
process.env.CUBEJS_DB_CLICKHOUSE_READONLY = 'false';
968+
expect(getEnv('clickhouseReadOnly', { dataSource: 'default' })).toEqual(false);
969+
expect(getEnv('clickhouseReadOnly', { dataSource: 'postgres' })).toEqual(false);
970+
expect(getEnv('clickhouseReadOnly', { dataSource: 'wrong' })).toEqual(false);
971+
972+
process.env.CUBEJS_DB_CLICKHOUSE_READONLY = 'wrong';
973+
expect(() => getEnv('clickhouseReadOnly', { dataSource: 'default' })).toThrow(
974+
'env-var: "CUBEJS_DB_CLICKHOUSE_READONLY" should be either "true", "false", "TRUE", "FALSE", 1, or 0'
975+
);
976+
expect(() => getEnv('clickhouseReadOnly', { dataSource: 'postgres' })).toThrow(
977+
'env-var: "CUBEJS_DB_CLICKHOUSE_READONLY" should be either "true", "false", "TRUE", "FALSE", 1, or 0'
978+
);
979+
expect(() => getEnv('clickhouseReadOnly', { dataSource: 'wrong' })).toThrow(
980+
'env-var: "CUBEJS_DB_CLICKHOUSE_READONLY" should be either "true", "false", "TRUE", "FALSE", 1, or 0'
981+
);
971982

972983
delete process.env.CUBEJS_DB_CLICKHOUSE_READONLY;
973-
expect(getEnv('clickhouseReadOnly', { dataSource: 'default' })).toBeUndefined();
974-
expect(getEnv('clickhouseReadOnly', { dataSource: 'postgres' })).toBeUndefined();
975-
expect(getEnv('clickhouseReadOnly', { dataSource: 'wrong' })).toBeUndefined();
984+
expect(getEnv('clickhouseReadOnly', { dataSource: 'default' })).toEqual(false);
985+
expect(getEnv('clickhouseReadOnly', { dataSource: 'postgres' })).toEqual(false);
986+
expect(getEnv('clickhouseReadOnly', { dataSource: 'wrong' })).toEqual(false);
976987
});
977988

978989
test('getEnv("clickhouseCompression")', () => {
979-
process.env.CUBEJS_DB_CLICKHOUSE_COMPRESSION = 'default1';
980-
expect(getEnv('clickhouseCompression', { dataSource: 'default' })).toEqual('default1');
981-
expect(getEnv('clickhouseCompression', { dataSource: 'postgres' })).toEqual('default1');
982-
expect(getEnv('clickhouseCompression', { dataSource: 'wrong' })).toEqual('default1');
983-
984-
process.env.CUBEJS_DB_CLICKHOUSE_COMPRESSION = 'default2';
985-
expect(getEnv('clickhouseCompression', { dataSource: 'default' })).toEqual('default2');
986-
expect(getEnv('clickhouseCompression', { dataSource: 'postgres' })).toEqual('default2');
987-
expect(getEnv('clickhouseCompression', { dataSource: 'wrong' })).toEqual('default2');
990+
process.env.CUBEJS_DB_CLICKHOUSE_COMPRESSION = 'true';
991+
expect(getEnv('clickhouseCompression', { dataSource: 'default' })).toEqual(true);
992+
expect(getEnv('clickhouseCompression', { dataSource: 'postgres' })).toEqual(true);
993+
expect(getEnv('clickhouseCompression', { dataSource: 'wrong' })).toEqual(true);
994+
995+
process.env.CUBEJS_DB_CLICKHOUSE_COMPRESSION = 'false';
996+
expect(getEnv('clickhouseCompression', { dataSource: 'default' })).toEqual(false);
997+
expect(getEnv('clickhouseCompression', { dataSource: 'postgres' })).toEqual(false);
998+
expect(getEnv('clickhouseCompression', { dataSource: 'wrong' })).toEqual(false);
999+
1000+
process.env.CUBEJS_DB_CLICKHOUSE_COMPRESSION = 'wrong';
1001+
expect(() => getEnv('clickhouseCompression', { dataSource: 'default' })).toThrow(
1002+
'env-var: "CUBEJS_DB_CLICKHOUSE_COMPRESSION" should be either "true", "false", "TRUE", "FALSE", 1, or 0'
1003+
);
1004+
expect(() => getEnv('clickhouseCompression', { dataSource: 'postgres' })).toThrow(
1005+
'env-var: "CUBEJS_DB_CLICKHOUSE_COMPRESSION" should be either "true", "false", "TRUE", "FALSE", 1, or 0'
1006+
);
1007+
expect(() => getEnv('clickhouseCompression', { dataSource: 'wrong' })).toThrow(
1008+
'env-var: "CUBEJS_DB_CLICKHOUSE_COMPRESSION" should be either "true", "false", "TRUE", "FALSE", 1, or 0'
1009+
);
9881010

9891011
delete process.env.CUBEJS_DB_CLICKHOUSE_COMPRESSION;
990-
expect(getEnv('clickhouseCompression', { dataSource: 'default' })).toBeUndefined();
991-
expect(getEnv('clickhouseCompression', { dataSource: 'postgres' })).toBeUndefined();
992-
expect(getEnv('clickhouseCompression', { dataSource: 'wrong' })).toBeUndefined();
1012+
expect(getEnv('clickhouseCompression', { dataSource: 'default' })).toEqual(false);
1013+
expect(getEnv('clickhouseCompression', { dataSource: 'postgres' })).toEqual(false);
1014+
expect(getEnv('clickhouseCompression', { dataSource: 'wrong' })).toEqual(false);
9931015
});
9941016

9951017
test('getEnv("elasticApiId")', () => {

packages/cubejs-clickhouse-driver/src/ClickHouseDriver.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -151,8 +151,7 @@ export class ClickHouseDriver extends BaseDriver implements DriverInterface {
151151
const database = config.database ?? (getEnv('dbName', { dataSource }) as string) ?? 'default';
152152

153153
// TODO this is a bit inconsistent with readOnly
154-
this.readOnlyMode =
155-
getEnv('clickhouseReadOnly', { dataSource }) === 'true';
154+
this.readOnlyMode = getEnv('clickhouseReadOnly', { dataSource });
156155

157156
// Expect that getEnv('dbQueryTimeout') will always return a value
158157
const requestTimeoutEnv: number = getEnv('dbQueryTimeout', { dataSource }) * 1000;
@@ -168,8 +167,8 @@ export class ClickHouseDriver extends BaseDriver implements DriverInterface {
168167
requestTimeout,
169168
compression: {
170169
// Response compression can't be enabled for a user with readonly=1, as ClickHouse will not allow settings modifications for such user.
171-
response: this.readOnlyMode ? false : getEnv('clickhouseCompression', { dataSource }) === 'true',
172-
request: getEnv('clickhouseCompression', { dataSource }) === 'true',
170+
response: this.readOnlyMode ? false : getEnv('clickhouseCompression', { dataSource }),
171+
request: getEnv('clickhouseCompression', { dataSource }),
173172
},
174173
clickhouseSettings: {
175174
// If ClickHouse user's permissions are restricted with "readonly = 1",

0 commit comments

Comments
 (0)