Skip to content
This repository was archived by the owner on Mar 26, 2026. It is now read-only.

Commit 9744aa3

Browse files
authored
feat: Enable csm by default (#1695)
## Description The client side metrics should be enabled by default ## Impact To meet user needs. Get them using client side metrics by default. ## Testing The system tests are already a good smoke test. They will start collecting metrics and they will tell us if there is a problem. Some conformance tests fail due to connection issues when you turn the metrics on though so conformance test changes are necessary. We have to make it so that they don't try to send metrics due to connection issues with the test proxy environment. Here were the failures below: === RUN TestReadRows_Generic_CloseClient (node:4514) MetadataLookupWarning: received unexpected error = All promises were rejected code = UNKNOWN [Servr log] 2025/08/20 20:02:20 There is 2s sleep on the server side [Servr log] 2025/08/20 20:02:20 There is 2s sleep on the server side [Servr log] 2025/08/20 20:02:20 There is 2s sleep on the server side (node:4514) MetadataLookupWarning: received unexpected error = All promises were rejected code = UNKNOWN /home/runner/work/nodejs-bigtable/nodejs-bigtable/node_modules/google-gax/node_modules/google-auth-library/build/src/auth/googleauth.js:284 throw new Error(exports.GoogleAuthExceptionMessages.NO_ADC_FOUND); ^ Error: Could not load the default credentials. Browse to https://cloud.google.com/docs/authentication/getting-started for more information. at GoogleAuth.getApplicationDefaultAsync (/home/runner/work/nodejs-bigtable/nodejs-bigtable/node_modules/google-gax/node_modules/google-auth-library/build/src/auth/googleauth.js:284:15) at async #determineClient (/home/runner/work/nodejs-bigtable/nodejs-bigtable/node_modules/google-gax/node_modules/google-auth-library/build/src/auth/googleauth.js:732:36) at async GoogleAuth.getClient (/home/runner/work/nodejs-bigtable/nodejs-bigtable/node_modules/google-gax/node_modules/google-auth-library/build/src/auth/googleauth.js:709:20) at async GrpcClient._getCredentials (/home/runner/work/nodejs-bigtable/nodejs-bigtable/node_modules/google-gax/build/src/grpc.js:192:24) at async GrpcClient.createStub (/home/runner/work/nodejs-bigtable/nodejs-bigtable/node_modules/google-gax/build/src/grpc.js:373:23) Node.js v20.19.4 test_workflow.go:134: The RPC to test proxy encountered error: rpc error: code = Unavailable desc = error reading from server: read tcp 127.0.0.1:48370->127.0.0.1:9999: read: connection reset by peer test_workflow.go:134: The RPC to test proxy encountered error: rpc error: code = Unavailable desc = error reading from server: read tcp 127.0.0.1:48370->127.0.0.1:9999: read: connection reset by peer test_workflow.go:134: The RPC to test proxy encountered error: rpc error: code = Unavailable desc = error reading from server: read tcp 127.0.0.1:48370->127.0.0.1:9999: read: connection reset by peer test_workflow.go:81: cbt client closing failed: rpc error: code = Unavailable desc = error reading from server: read tcp 127.0.0.1:48370->127.0.0.1:9999: read: connection reset by peer test_workflow.go:81: cbt client closing failed: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing: dial tcp :9999: connect: connection refused" --- FAIL: TestReadRows_Generic_CloseClient (1.12s) === RUN TestReadRows_Generic_DeadlineExceeded test_workflow.go:68: cbt client creation failed: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing: dial tcp :9999: connect: connection refused" --- FAIL: TestReadRows_Generic_DeadlineExceeded (0.00s) === RUN TestSampleRowKeys_Generic_MultiStreams test_workflow.go:68: cbt client creation failed: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing: dial tcp :9999: connect: connection refused" --- FAIL: TestSampleRowKeys_Generic_MultiStreams (0.00s) === RUN TestSampleRowKeys_Generic_DeadlineExceeded test_workflow.go:68: cbt client creation failed: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing: dial tcp :9999: connect: connection refused" --- FAIL: TestSampleRowKeys_Generic_DeadlineExceeded (0.00s) FAIL
1 parent cd45aa0 commit 9744aa3

3 files changed

Lines changed: 12 additions & 6 deletions

File tree

src/index.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -590,10 +590,9 @@ export class Bigtable {
590590
this.projectName = `projects/${this.projectId}`;
591591
this.shouldReplaceProjectIdToken = this.projectId === '{{projectId}}';
592592

593-
const handlers =
594-
options.metricsEnabled === true
595-
? [new GCPMetricsHandler(options as ClientOptions)]
596-
: [];
593+
const handlers = !(options.metricsEnabled === false)
594+
? [new GCPMetricsHandler(Object.assign({}, options) as ClientOptions)]
595+
: [];
597596
this._metricsConfigManager = new ClientSideMetricsConfigManager(handlers);
598597
}
599598

test/metric-service-client-credentials.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ describe('Bigtable/MetricServiceClientCredentials', () => {
2727
class FakeExporter {
2828
constructor(options: ClientOptions) {
2929
try {
30-
assert.strictEqual(options, clientOptions);
30+
assert.deepStrictEqual(options, clientOptions);
3131
done();
3232
} catch (e) {
3333
done(e);
@@ -91,7 +91,7 @@ describe('Bigtable/MetricServiceClientCredentials', () => {
9191
class FakeMetricServiceClient {
9292
constructor(options: ClientOptions) {
9393
try {
94-
assert.strictEqual(options, clientOptions);
94+
assert.deepStrictEqual(options, clientOptions);
9595
done();
9696
} catch (e) {
9797
done(e);

testproxy/services/create-client.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ const normalizeCallback = require('./utils/normalize-callback.js');
1717

1818
const grpc = require('@grpc/grpc-js');
1919
const {Bigtable} = require('../../build/src/index.js');
20+
const {
21+
ClientSideMetricsConfigManager,
22+
} = require('../../build/src/client-side-metrics/metrics-config-manager');
2023
const {BigtableClient} = require('../../build/src/index.js').v2;
2124

2225
const v2 = Symbol.for('v2');
@@ -81,6 +84,10 @@ const createClient = ({clientMap}) =>
8184
appProfileId,
8285
clientConfig,
8386
});
87+
const handlers = [];
88+
bigtable._metricsConfigManager = new ClientSideMetricsConfigManager(
89+
handlers,
90+
);
8491
bigtable[v2] = new BigtableClient(bigtable.options.BigtableClient);
8592
clientMap.set(clientId, bigtable);
8693
});

0 commit comments

Comments
 (0)