Skip to content

Commit d4f4f1a

Browse files
committed
Document ObservabilityOptions plus prefix _observabilityOptions
1 parent d0a338d commit d4f4f1a

File tree

12 files changed

+58
-49
lines changed

12 files changed

+58
-49
lines changed

observability-test/batch-transaction.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ describe('BatchTransaction', () => {
139139
batchTransaction = new BatchTransaction(SESSION as {} as Session);
140140
batchTransaction.session = SESSION as {} as Session;
141141
batchTransaction.id = ID;
142-
batchTransaction.observabilityOptions_ = {tracerProvider: provider};
142+
batchTransaction._observabilityOptions = {tracerProvider: provider};
143143
REQUEST.callsFake((_, callback) => callback(null, RESPONSE));
144144
});
145145

observability-test/database.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ describe('Database', () => {
241241
database = new Database(INSTANCE, NAME, POOL_OPTIONS);
242242
database.parent = INSTANCE;
243243
database.databaseRole = 'parent_role';
244-
database.observabilityOptions_ = {
244+
database._observabilityOptions = {
245245
tracerProvider: provider,
246246
enableExtendedTracing: false,
247247
};

observability-test/spanner.ts

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,16 @@ describe('EndToEnd', () => {
127127
});
128128

129129
beforeEach(async () => {
130-
const setupResult = await setup();
130+
traceExporter = new InMemorySpanExporter();
131+
const sampler = new AlwaysOnSampler();
132+
const provider = new NodeTracerProvider({
133+
sampler: sampler,
134+
exporter: traceExporter,
135+
});
136+
const setupResult = await setup({
137+
tracerProvider: provider,
138+
enableExtendedTracing: false,
139+
});
131140
spanner = setupResult.spanner;
132141
server = setupResult.server;
133142
spannerMock = setupResult.spannerMock;
@@ -143,21 +152,10 @@ describe('EndToEnd', () => {
143152
mock.StatementResult.updateCount(1)
144153
);
145154

146-
traceExporter = new InMemorySpanExporter();
147-
const sampler = new AlwaysOnSampler();
148-
149-
const provider = new NodeTracerProvider({
150-
sampler: sampler,
151-
exporter: traceExporter,
152-
});
153155
provider.addSpanProcessor(new SimpleSpanProcessor(traceExporter));
154156

155157
const instance = spanner.instance('instance');
156158
database = instance.database('database');
157-
database.observabilityOptions_ = {
158-
tracerProvider: provider,
159-
enableExtendedTracing: false,
160-
};
161159
});
162160

163161
afterEach(() => {
@@ -488,26 +486,26 @@ describe('ObservabilityOptions injection and propagation', async () => {
488486

489487
it('Passed into Spanner, Instance and Database', done => {
490488
// Ensure that the same observability configuration is set on the Spanner client.
491-
assert.deepStrictEqual(spanner.observabilityOptions_, observabilityOptions);
489+
assert.deepStrictEqual(spanner._observabilityOptions, observabilityOptions);
492490

493491
// Acquire a handle to the Instance through spanner.instance.
494492
const instanceByHandle = spanner.instance('instance');
495493
assert.deepStrictEqual(
496-
instanceByHandle.observabilityOptions_,
494+
instanceByHandle._observabilityOptions,
497495
observabilityOptions
498496
);
499497

500498
// Create the Instance by means of a constructor directly.
501499
const instanceByConstructor = new Instance(spanner, 'myInstance');
502500
assert.deepStrictEqual(
503-
instanceByConstructor.observabilityOptions_,
501+
instanceByConstructor._observabilityOptions,
504502
observabilityOptions
505503
);
506504

507505
// Acquire a handle to the Database through instance.database.
508506
const databaseByHandle = instanceByHandle.database('database');
509507
assert.deepStrictEqual(
510-
databaseByHandle.observabilityOptions_,
508+
databaseByHandle._observabilityOptions,
511509
observabilityOptions
512510
);
513511

@@ -517,7 +515,7 @@ describe('ObservabilityOptions injection and propagation', async () => {
517515
'myDatabase'
518516
);
519517
assert.deepStrictEqual(
520-
databaseByConstructor.observabilityOptions_,
518+
databaseByConstructor._observabilityOptions,
521519
observabilityOptions
522520
);
523521

observability-test/table.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ describe('Table', () => {
9292
extend(Table, TableCached);
9393
table = new Table(DATABASE, NAME);
9494
transaction = new FakeTransaction();
95-
table.observabilityOptions_ = {tracerProvider: provider};
95+
table._observabilityOptions = {tracerProvider: provider};
9696
});
9797

9898
afterEach(() => {

src/batch-transaction.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ class BatchTransaction extends Snapshot {
139139

140140
const traceConfig: traceConfig = {
141141
sql: query,
142-
opts: this.observabilityOptions_,
142+
opts: this._observabilityOptions,
143143
};
144144
return startTrace(
145145
'BatchTransaction.createQueryPartitions',
@@ -182,7 +182,7 @@ class BatchTransaction extends Snapshot {
182182
*/
183183
createPartitions_(config, callback) {
184184
const traceConfig: traceConfig = {
185-
opts: this.observabilityOptions_,
185+
opts: this._observabilityOptions,
186186
};
187187

188188
return startTrace(
@@ -259,7 +259,7 @@ class BatchTransaction extends Snapshot {
259259
*/
260260
createReadPartitions(options, callback) {
261261
const traceConfig: traceConfig = {
262-
opts: this.observabilityOptions_,
262+
opts: this._observabilityOptions,
263263
};
264264

265265
return startTrace(

src/database.ts

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ class Database extends common.GrpcServiceObject {
344344
databaseDialect?: EnumKey<
345345
typeof databaseAdmin.spanner.admin.database.v1.DatabaseDialect
346346
> | null;
347-
observabilityOptions_?: ObservabilityOptions;
347+
_observabilityOptions?: ObservabilityOptions;
348348
constructor(
349349
instance: Instance,
350350
name: string,
@@ -467,7 +467,7 @@ class Database extends common.GrpcServiceObject {
467467
Object.assign({}, queryOptions),
468468
Database.getEnvironmentQueryOptions()
469469
);
470-
this.observabilityOptions_ = instance.observabilityOptions_;
470+
this._observabilityOptions = instance._observabilityOptions;
471471
}
472472
/**
473473
* @typedef {array} SetDatabaseMetadataResponse
@@ -693,7 +693,7 @@ class Database extends common.GrpcServiceObject {
693693

694694
const sessions = (resp!.session || []).map(metadata => {
695695
const session = this.session(metadata.name!);
696-
session.observabilityOptions_ = this.observabilityOptions_;
696+
session._observabilityOptions = this._observabilityOptions;
697697
session.metadata = metadata;
698698
return session;
699699
});
@@ -738,7 +738,7 @@ class Database extends common.GrpcServiceObject {
738738
const id = identifier.transaction;
739739
const transaction = new BatchTransaction(session, options);
740740
transaction.id = id;
741-
transaction.observabilityOptions_ = this.observabilityOptions_;
741+
transaction._observabilityOptions = this._observabilityOptions;
742742
transaction.readTimestamp = identifier.timestamp as PreciseDate;
743743
return transaction;
744744
}
@@ -828,7 +828,7 @@ class Database extends common.GrpcServiceObject {
828828
? (optionsOrCallback as TimestampBounds)
829829
: {};
830830

831-
const q = {opts: this.observabilityOptions_};
831+
const q = {opts: this._observabilityOptions};
832832
return startTrace('Database.createBatchTransaction', q, span => {
833833
this.pool_.getSession((err, session) => {
834834
if (err) {
@@ -1086,7 +1086,7 @@ class Database extends common.GrpcServiceObject {
10861086
/CREATE TABLE `*([^\s`(]+)/
10871087
)![1];
10881088
const table = this.table(tableName!);
1089-
table.observabilityOptions_ = this.observabilityOptions_;
1089+
table._observabilityOptions = this._observabilityOptions;
10901090
callback!(null, table, operation!, resp!);
10911091
});
10921092
}
@@ -1875,7 +1875,7 @@ class Database extends common.GrpcServiceObject {
18751875
delete (gaxOpts as GetSessionsOptions).pageToken;
18761876
}
18771877

1878-
const q = {opts: this.observabilityOptions_};
1878+
const q = {opts: this._observabilityOptions};
18791879
return startTrace('Database.getSessions', q, span => {
18801880
this.request<
18811881
google.spanner.v1.ISession,
@@ -1897,7 +1897,7 @@ class Database extends common.GrpcServiceObject {
18971897
sessionInstances = sessions.map(metadata => {
18981898
const session = self.session(metadata.name!);
18991899
session.metadata = metadata;
1900-
session.observabilityOptions_ = this.observabilityOptions_;
1900+
session._observabilityOptions = this._observabilityOptions;
19011901
return session;
19021902
});
19031903
}
@@ -2058,7 +2058,7 @@ class Database extends common.GrpcServiceObject {
20582058
? (optionsOrCallback as TimestampBounds)
20592059
: {};
20602060

2061-
const q = {opts: this.observabilityOptions_};
2061+
const q = {opts: this._observabilityOptions};
20622062
return startTrace('Database.getSnapshot', q, span => {
20632063
this.pool_.getSession((err, session) => {
20642064
if (err) {
@@ -2159,7 +2159,7 @@ class Database extends common.GrpcServiceObject {
21592159
? (optionsOrCallback as GetTransactionOptions)
21602160
: {};
21612161

2162-
const q = {opts: this.observabilityOptions_};
2162+
const q = {opts: this._observabilityOptions};
21632163
return startTrace('Database.getTransaction', q, span => {
21642164
this.pool_.getSession((err, session, transaction) => {
21652165
if (options.requestOptions) {
@@ -2786,7 +2786,7 @@ class Database extends common.GrpcServiceObject {
27862786
? (optionsOrCallback as TimestampBounds)
27872787
: {};
27882788

2789-
const q = {sql: query, opts: this.observabilityOptions_};
2789+
const q = {sql: query, opts: this._observabilityOptions};
27902790
return startTrace('Database.run', q, span => {
27912791
this.runStream(query, options)
27922792
.on('error', err => {
@@ -3007,7 +3007,7 @@ class Database extends common.GrpcServiceObject {
30073007
options?: TimestampBounds
30083008
): PartialResultStream {
30093009
const proxyStream: Transform = through.obj();
3010-
const q = {sql: query, opts: this.observabilityOptions_};
3010+
const q = {sql: query, opts: this._observabilityOptions};
30113011
return startTrace('Database.runStream', q, span => {
30123012
this.pool_.getSession((err, session) => {
30133013
if (err) {
@@ -3185,7 +3185,7 @@ class Database extends common.GrpcServiceObject {
31853185
? (optionsOrRunFn as RunTransactionOptions)
31863186
: {};
31873187

3188-
const q = {opts: this.observabilityOptions_};
3188+
const q = {opts: this._observabilityOptions};
31893189
startTrace('Database.runTransaction', q, span => {
31903190
this.pool_.getSession((err, session?, transaction?) => {
31913191
if (err) {
@@ -3578,7 +3578,7 @@ class Database extends common.GrpcServiceObject {
35783578
? (optionsOrCallback as CallOptions)
35793579
: {};
35803580

3581-
const q = {opts: this.observabilityOptions_};
3581+
const q = {opts: this._observabilityOptions};
35823582
return startTrace('Database.writeAtLeastOnce', q, span => {
35833583
this.pool_.getSession((err, session?, transaction?) => {
35843584
if (err && isSessionNotFoundError(err as grpc.ServiceError)) {

src/index.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,8 @@ export type GetInstanceConfigOperationsCallback = PagedCallback<
131131
* @property {google.spanner.v1.IDirectedReadOptions} [directedReadOptions] Sets the DirectedReadOptions for all ReadRequests and ExecuteSqlRequests for the Client.
132132
* Indicates which replicas or regions should be used for non-transactional reads or queries.
133133
* DirectedReadOptions won't be set for readWrite transactions"
134+
* @property {ObservabilityOptions} [observabilityOptions] defines the configuration
135+
* for OpenTelemetry Tracing.
134136
*/
135137
export interface SpannerOptions extends GrpcClientOptions {
136138
apiEndpoint?: string;
@@ -241,7 +243,7 @@ class Spanner extends GrpcService {
241243
resourceHeader_: {[k: string]: string};
242244
routeToLeaderEnabled = true;
243245
directedReadOptions: google.spanner.v1.IDirectedReadOptions | null;
244-
observabilityOptions_: ObservabilityOptions | undefined;
246+
_observabilityOptions: ObservabilityOptions | undefined;
245247

246248
/**
247249
* Placeholder used to auto populate a column with the commit timestamp.
@@ -368,7 +370,7 @@ class Spanner extends GrpcService {
368370
[CLOUD_RESOURCE_HEADER]: this.projectFormattedName_,
369371
};
370372
this.directedReadOptions = directedReadOptions;
371-
this.observabilityOptions_ = options.observabilityOptions;
373+
this._observabilityOptions = options.observabilityOptions;
372374
}
373375

374376
/**
@@ -589,7 +591,7 @@ class Spanner extends GrpcService {
589591
return;
590592
}
591593
const instance = this.instance(formattedName);
592-
instance.observabilityOptions_ = this.observabilityOptions_;
594+
instance._observabilityOptions = this._observabilityOptions;
593595
callback!(null, instance, operation, resp);
594596
}
595597
);

src/instance.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ class Instance extends common.GrpcServiceObject {
165165
databases_: Map<string, Database>;
166166
metadata?: IInstance;
167167
resourceHeader_: {[k: string]: string};
168-
observabilityOptions_?: ObservabilityOptions;
168+
_observabilityOptions?: ObservabilityOptions;
169169
constructor(spanner: Spanner, name: string) {
170170
const formattedName_ = Instance.formatName_(spanner.projectId, name);
171171
const methods = {
@@ -241,7 +241,7 @@ class Instance extends common.GrpcServiceObject {
241241
this.resourceHeader_ = {
242242
[CLOUD_RESOURCE_HEADER]: this.formattedName_,
243243
};
244-
this.observabilityOptions_ = spanner.observabilityOptions_;
244+
this._observabilityOptions = spanner._observabilityOptions;
245245
}
246246

247247
/**
@@ -928,7 +928,7 @@ class Instance extends common.GrpcServiceObject {
928928
return;
929929
}
930930
const database = this.database(name, poolOptions || poolCtor);
931-
database.observabilityOptions_ = this.observabilityOptions_;
931+
database._observabilityOptions = this._observabilityOptions;
932932
callback(null, database, operation, resp);
933933
}
934934
);
@@ -978,7 +978,7 @@ class Instance extends common.GrpcServiceObject {
978978
const key = name.split('/').pop() + optionsKey;
979979
if (!this.databases_.has(key!)) {
980980
const db = new Database(this, name, poolOptions, queryOptions);
981-
db.observabilityOptions_ = this.observabilityOptions_;
981+
db._observabilityOptions = this._observabilityOptions;
982982
this.databases_.set(key!, db);
983983
}
984984
return this.databases_.get(key!)!;

src/instrument.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,15 @@ interface SQLStatement {
4545
sql: string;
4646
}
4747

48+
/*
49+
* ObservabilityOptions defines the configuration with which
50+
* startTrace may be invoked if set.
51+
* @property [tracerProvider] is the injected TracerProvider to use,
52+
* otherwise the global TracerProvider shall be used.
53+
* @property [enableExtendedTracing] when set signifies that spans started
54+
* with an accompanying an SQL statement shall be annotated with that SQL.
55+
* Alternatively, you could set environment variable `SPANNER_ENABLE_EXTENDED_TRACING=true`.
56+
*/
4857
interface ObservabilityOptions {
4958
tracerProvider: TracerProvider;
5059
enableExtendedTracing?: boolean;

src/table.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ const POSTGRESQL = 'POSTGRESQL';
9999
class Table {
100100
database: Database;
101101
name: string;
102-
observabilityOptions_?: ObservabilityOptions;
102+
_observabilityOptions?: ObservabilityOptions;
103103
constructor(database: Database, name: string) {
104104
/**
105105
* The {@link Database} instance of this {@link Table} instance.
@@ -113,7 +113,7 @@ class Table {
113113
* @type {string}
114114
*/
115115
this.name = name;
116-
this.observabilityOptions_ = database.observabilityOptions_;
116+
this._observabilityOptions = database._observabilityOptions;
117117
}
118118
/**
119119
* Create a table.
@@ -1081,7 +1081,7 @@ class Table {
10811081
callback: CommitCallback
10821082
): void {
10831083
const traceConfig: traceConfig = {
1084-
opts: this.observabilityOptions_,
1084+
opts: this._observabilityOptions,
10851085
};
10861086

10871087
startTrace('Table.' + method, traceConfig, span => {

0 commit comments

Comments
 (0)