feat(observability): fix bugs found from product review + negative cases#2158
Conversation
62bf905 to
1b7d8b6
Compare
src/database.ts
Outdated
| if (err) { | ||
| setSpanError(span, err!); | ||
| } | ||
| await runner.run().then(release, async err => { |
There was a problem hiding this comment.
we are already doing .then() on runner.run(), why do we then need to await here?
There was a problem hiding this comment.
@odeke-em it will work even if we don't await on runner.run(). please check and remove the await
src/transaction.ts
Outdated
| (err as grpc.ServiceError).code === grpc.status.ABORTED | ||
| ) | ||
| ) { | ||
| span.addEvent('Transaction Aborted, retrying begin', { |
There was a problem hiding this comment.
This code block is for the non Aborted errors. Change Transaction threw error, retrying with explicit begin
src/database.ts
Outdated
| 'session.id': session?.id, | ||
| }); | ||
| this.runTransaction(options, runFn!); | ||
| await this.runTransaction(options, runFn!); |
There was a problem hiding this comment.
Why have we added await on this.runTransaction. This does not return a promise nor its a async method.
src/database.ts
Outdated
| } | ||
|
|
||
| if (err) { | ||
| await runFn!(err as grpc.ServiceError); |
src/database.ts
Outdated
| }); | ||
| release(); | ||
| this.runTransaction(options, runFn!); | ||
| await this.runTransaction(options, runFn!); |
There was a problem hiding this comment.
again why async here?
src/database.ts
Outdated
|
|
||
| try { | ||
| const result = await runner.run(); | ||
| span.end(); |
There was a problem hiding this comment.
span.end() should be done in finally block.
There was a problem hiding this comment.
Not really, on an exception this code retries in the while loop above so that's not correct to end it in the finally block. It should be ended only on success.
src/transaction.ts
Outdated
| ) | ||
| ) { | ||
| this.begin(); | ||
| span.addEvent('Stream broken. Safe to retry', { |
There was a problem hiding this comment.
remove these two spans for stream broken. We are not retrying broken stream here , that is happening in partial-result-stream class. https://github.com/googleapis/nodejs-spanner/blob/main/src/partial-result-stream.ts#L558-L586
Maybe lets skip these two spans for now and move on.
src/transaction.ts
Outdated
| ) | ||
| ) { | ||
| this.begin(); | ||
| span.addEvent('Stream broken. Safe to retry', { |
There was a problem hiding this comment.
same here. remove these events
src/transaction.ts
Outdated
| callback(err, resp); | ||
| }); | ||
| }, callback); | ||
| try { |
There was a problem hiding this comment.
no change is required here. As we are doing ".then" on begin call.
91c5281 to
508243f
Compare
7bdc173 to
a3589e5
Compare
Extracted out of PR googleapis#2158, this change traces Database.runTransactionAsync. However, testing isn't effective because of bugs such as googleapis#2166.
Extracted out of PR googleapis#2158, this change traces Database.runTransactionAsync. However, testing isn't effective because of bugs such as googleapis#2166.
Extracted out of PR googleapis#2158, this change traces Database.runTransactionAsync. Updates googleapis#2079
e0e31f5 to
13bc9f5
Compare
3fb5164 to
03a6298
Compare
ab6ae5d to
9b0a458
Compare
src/database.ts
Outdated
| .catch(e => { | ||
| setSpanErrorAndException(span, e as Error); | ||
| throw e; | ||
| }); |
There was a problem hiding this comment.
| .catch(e => { | |
| setSpanErrorAndException(span, e as Error); | |
| throw e; | |
| }); | |
| .catch(e => { | |
| setSpanErrorAndException(span, e as Error); | |
| span.end(); | |
| throw e; | |
| }); |
5bf4980 to
f0b8745
Compare
Extracted out of PR googleapis#2158, this change traces Database.runTransactionAsync. Updates googleapis#2079
🤖 I have created a release *beep* *boop* --- ## [7.15.0](https://togithub.com/googleapis/nodejs-spanner/compare/v7.14.0...v7.15.0) (2024-10-30) ### Features * (observability, samples): add tracing end-to-end sample ([#2130](https://togithub.com/googleapis/nodejs-spanner/issues/2130)) ([66d99e8](https://togithub.com/googleapis/nodejs-spanner/commit/66d99e836cd2bfbb3b0f78980ec2b499f9e5e563)) * (observability) add spans for BatchTransaction and Table ([#2115](https://togithub.com/googleapis/nodejs-spanner/issues/2115)) ([d51aae9](https://togithub.com/googleapis/nodejs-spanner/commit/d51aae9c9c3c0e6319d81c2809573ae54675acf3)), closes [#2114](https://togithub.com/googleapis/nodejs-spanner/issues/2114) * (observability) Add support for OpenTelemetry traces and allow observability options to be passed. ([#2131](https://togithub.com/googleapis/nodejs-spanner/issues/2131)) ([5237e11](https://togithub.com/googleapis/nodejs-spanner/commit/5237e118befb4b7fe4aea76a80a91e822d7a22e4)), closes [#2079](https://togithub.com/googleapis/nodejs-spanner/issues/2079) * (observability) propagate database name for every span generated to aid in quick debugging ([#2155](https://togithub.com/googleapis/nodejs-spanner/issues/2155)) ([0342e74](https://togithub.com/googleapis/nodejs-spanner/commit/0342e74721a0684d8195a6299c3a634eefc2b522)) * (observability) trace Database.batchCreateSessions + SessionPool.createSessions ([#2145](https://togithub.com/googleapis/nodejs-spanner/issues/2145)) ([f489c94](https://togithub.com/googleapis/nodejs-spanner/commit/f489c9479fa5402f0c960cf896fd3be0e946f182)) * (observability): trace Database.runPartitionedUpdate ([#2176](https://togithub.com/googleapis/nodejs-spanner/issues/2176)) ([701e226](https://togithub.com/googleapis/nodejs-spanner/commit/701e22660d5ac9f0b3e940ad656b9ca6c479251d)), closes [#2079](https://togithub.com/googleapis/nodejs-spanner/issues/2079) * (observability): trace Database.runTransactionAsync ([#2167](https://togithub.com/googleapis/nodejs-spanner/issues/2167)) ([d0fe178](https://togithub.com/googleapis/nodejs-spanner/commit/d0fe178623c1c48245d11bcea97fcd340b6615af)), closes [#207](https://togithub.com/googleapis/nodejs-spanner/issues/207) * Allow multiple KMS keys to create CMEK database/backup ([#2099](https://togithub.com/googleapis/nodejs-spanner/issues/2099)) ([51bc8a7](https://togithub.com/googleapis/nodejs-spanner/commit/51bc8a7445ab8b3d2239493b69d9c271c1086dde)) * **observability:** Fix bugs found from product review + negative cases ([#2158](https://togithub.com/googleapis/nodejs-spanner/issues/2158)) ([cbc86fa](https://togithub.com/googleapis/nodejs-spanner/commit/cbc86fa80498af6bd745eebb9443612936e26d4e)) * **observability:** Trace Database methods ([#2119](https://togithub.com/googleapis/nodejs-spanner/issues/2119)) ([1f06871](https://togithub.com/googleapis/nodejs-spanner/commit/1f06871f7aca386756e8691013602b069697bb87)), closes [#2114](https://togithub.com/googleapis/nodejs-spanner/issues/2114) * **observability:** Trace Database.batchWriteAtLeastOnce ([#2157](https://togithub.com/googleapis/nodejs-spanner/issues/2157)) ([2a19ef1](https://togithub.com/googleapis/nodejs-spanner/commit/2a19ef1af4f6fd1b81d08afc15db76007859a0b9)), closes [#2079](https://togithub.com/googleapis/nodejs-spanner/issues/2079) * **observability:** Trace Transaction ([#2122](https://togithub.com/googleapis/nodejs-spanner/issues/2122)) ([a464bdb](https://togithub.com/googleapis/nodejs-spanner/commit/a464bdb5cbb7856b7a08dac3ff48132948b65792)), closes [#2114](https://togithub.com/googleapis/nodejs-spanner/issues/2114) ### Bug Fixes * Exact staleness timebound ([#2143](https://togithub.com/googleapis/nodejs-spanner/issues/2143)) ([f01516e](https://togithub.com/googleapis/nodejs-spanner/commit/f01516ec6ba44730622cfb050c52cd93f30bba7a)), closes [#2129](https://togithub.com/googleapis/nodejs-spanner/issues/2129) * GetMetadata for Session ([#2124](https://togithub.com/googleapis/nodejs-spanner/issues/2124)) ([2fd63ac](https://togithub.com/googleapis/nodejs-spanner/commit/2fd63acb87ce06a02d7fdfa78d836dbd7ad59a26)), closes [#2123](https://togithub.com/googleapis/nodejs-spanner/issues/2123) --- This PR was generated with [Release Please](https://togithub.com/googleapis/release-please). See [documentation](https://togithub.com/googleapis/release-please#release-please).
This change adds recording of retry span annotations, catching cases in which exceptions where thrown but spans were not ended while testing out and visually confirming the results.