Skip to content

Commit 2f31cf4

Browse files
authored
fix(backend-shared): Exclude non-credential env vars from separate pre-agg credentials trigger (#10699)
CUBEJS_PRE_AGGREGATIONS_BUILDER, CUBEJS_PRE_AGGREGATIONS_BACKOFF_MAX_TIME, and CUBEJS_PRE_AGGREGATIONS_ALLOW_NON_STRICT_DATE_RANGE_MATCH are config vars that should not cause hasPreAggregationsEnvVars to return true.
1 parent bca52d9 commit 2f31cf4

2 files changed

Lines changed: 43 additions & 4 deletions

File tree

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

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -144,12 +144,29 @@ type DataSourceOpts = { dataSource: string, preAggregations?: boolean };
144144
* Checks if at least one PRE_AGGREGATIONS env var is set for a given data source.
145145
*/
146146
export function hasPreAggregationsEnvVars(dataSource: string = 'default'): boolean {
147-
const prefix = dataSource === 'default'
148-
? 'CUBEJS_PRE_AGGREGATIONS_'
149-
: `CUBEJS_DS_${dataSource.toUpperCase()}_PRE_AGGREGATIONS_`;
147+
if (dataSource === 'default') {
148+
/**
149+
* Non-credential env vars that share the CUBEJS_PRE_AGGREGATIONS_ prefix
150+
* but should NOT trigger separate pre-aggregation credentials.
151+
*/
152+
const PRE_AGGREGATIONS_NON_CREDENTIAL_KEYS = new Set([
153+
'CUBEJS_PRE_AGGREGATIONS_SCHEMA',
154+
'CUBEJS_PRE_AGGREGATIONS_BUILDER',
155+
'CUBEJS_PRE_AGGREGATIONS_BACKOFF_MAX_TIME',
156+
'CUBEJS_PRE_AGGREGATIONS_ALLOW_NON_STRICT_DATE_RANGE_MATCH',
157+
]);
158+
159+
for (const key of Object.keys(process.env)) {
160+
if (key.startsWith('CUBEJS_PRE_AGGREGATIONS_') && !PRE_AGGREGATIONS_NON_CREDENTIAL_KEYS.has(key)) {
161+
return true;
162+
}
163+
}
164+
165+
return false;
166+
}
150167

151168
for (const key of Object.keys(process.env)) {
152-
if (key.startsWith(prefix) && key !== `${prefix}SCHEMA`) {
169+
if (key.startsWith(`CUBEJS_DS_${dataSource.toUpperCase()}_PRE_AGGREGATIONS_`)) {
153170
return true;
154171
}
155172
}

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,9 @@ describe('hasPreAggregationsEnvVars', () => {
148148
afterEach(() => {
149149
delete process.env.CUBEJS_PRE_AGGREGATIONS_DB_HOST;
150150
delete process.env.CUBEJS_PRE_AGGREGATIONS_SCHEMA;
151+
delete process.env.CUBEJS_PRE_AGGREGATIONS_BUILDER;
152+
delete process.env.CUBEJS_PRE_AGGREGATIONS_BACKOFF_MAX_TIME;
153+
delete process.env.CUBEJS_PRE_AGGREGATIONS_ALLOW_NON_STRICT_DATE_RANGE_MATCH;
151154
delete process.env.CUBEJS_DS_ANALYTICS_PRE_AGGREGATIONS_DB_HOST;
152155
delete process.env.CUBEJS_DATASOURCES;
153156
});
@@ -171,6 +174,25 @@ describe('hasPreAggregationsEnvVars', () => {
171174
expect(hasPreAggregationsEnvVars('default')).toBe(false);
172175
});
173176

177+
test('ignores CUBEJS_PRE_AGGREGATIONS_BUILDER', () => {
178+
process.env.CUBEJS_PRE_AGGREGATIONS_BUILDER = 'true';
179+
expect(hasPreAggregationsEnvVars('default')).toBe(false);
180+
});
181+
182+
test('returns false when only non-credential PRE_AGGREGATIONS vars are set', () => {
183+
process.env.CUBEJS_PRE_AGGREGATIONS_SCHEMA = 'my_preaggs';
184+
process.env.CUBEJS_PRE_AGGREGATIONS_BUILDER = 'true';
185+
process.env.CUBEJS_PRE_AGGREGATIONS_BACKOFF_MAX_TIME = '600';
186+
process.env.CUBEJS_PRE_AGGREGATIONS_ALLOW_NON_STRICT_DATE_RANGE_MATCH = 'true';
187+
expect(hasPreAggregationsEnvVars('default')).toBe(false);
188+
});
189+
190+
test('returns true when credential var is set alongside non-credential vars', () => {
191+
process.env.CUBEJS_PRE_AGGREGATIONS_BUILDER = 'true';
192+
process.env.CUBEJS_PRE_AGGREGATIONS_DB_HOST = 'some-host';
193+
expect(hasPreAggregationsEnvVars('default')).toBe(true);
194+
});
195+
174196
test('returns false for non-matching datasource', () => {
175197
process.env.CUBEJS_DS_ANALYTICS_PRE_AGGREGATIONS_DB_HOST = 'some-host';
176198
expect(hasPreAggregationsEnvVars('default')).toBe(false);

0 commit comments

Comments
 (0)