@proteinjs/db-driver-spanner 1.12.3 → 1.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/LICENSE +21 -0
- package/dist/generated/index.js +1 -1
- package/dist/generated/index.js.map +1 -1
- package/dist/generated/test/index.d.ts.map +1 -1
- package/dist/generated/test/index.js +3 -1
- package/dist/generated/test/index.js.map +1 -1
- package/dist/src/SpannerConfig.d.ts +22 -0
- package/dist/src/SpannerConfig.d.ts.map +1 -1
- package/dist/src/SpannerDriver.d.ts +56 -9
- package/dist/src/SpannerDriver.d.ts.map +1 -1
- package/dist/src/SpannerDriver.js +229 -35
- package/dist/src/SpannerDriver.js.map +1 -1
- package/dist/src/SpannerLivenessMonitor.d.ts +25 -0
- package/dist/src/SpannerLivenessMonitor.d.ts.map +1 -1
- package/dist/src/SpannerLivenessMonitor.js +59 -4
- package/dist/src/SpannerLivenessMonitor.js.map +1 -1
- package/dist/test/ServiceUpdateVerbs.test.d.ts +2 -0
- package/dist/test/ServiceUpdateVerbs.test.d.ts.map +1 -0
- package/dist/test/ServiceUpdateVerbs.test.js +325 -0
- package/dist/test/ServiceUpdateVerbs.test.js.map +1 -0
- package/dist/test/SessionPoolExhaustion.test.d.ts +2 -0
- package/dist/test/SessionPoolExhaustion.test.d.ts.map +1 -0
- package/dist/test/SessionPoolExhaustion.test.js +230 -0
- package/dist/test/SessionPoolExhaustion.test.js.map +1 -0
- package/dist/test/SessionRecordTableQuery.test.d.ts +2 -0
- package/dist/test/SessionRecordTableQuery.test.d.ts.map +1 -0
- package/dist/test/SessionRecordTableQuery.test.js +185 -0
- package/dist/test/SessionRecordTableQuery.test.js.map +1 -0
- package/dist/test/SpannerLivenessMonitor.test.js +65 -0
- package/dist/test/SpannerLivenessMonitor.test.js.map +1 -1
- package/dist/test/SpannerOperationDeadline.test.d.ts +2 -0
- package/dist/test/SpannerOperationDeadline.test.d.ts.map +1 -0
- package/dist/test/SpannerOperationDeadline.test.js +227 -0
- package/dist/test/SpannerOperationDeadline.test.js.map +1 -0
- package/dist/test/TransactionSafety.test.d.ts +2 -0
- package/dist/test/TransactionSafety.test.d.ts.map +1 -0
- package/dist/test/TransactionSafety.test.js +325 -0
- package/dist/test/TransactionSafety.test.js.map +1 -0
- package/dist/test/index.d.ts +1 -0
- package/dist/test/index.d.ts.map +1 -1
- package/dist/test/index.js +1 -0
- package/dist/test/index.js.map +1 -1
- package/dist/test/util/serviceUpdateVerbsTestTables.d.ts +45 -0
- package/dist/test/util/serviceUpdateVerbsTestTables.d.ts.map +1 -0
- package/dist/test/util/serviceUpdateVerbsTestTables.js +100 -0
- package/dist/test/util/serviceUpdateVerbsTestTables.js.map +1 -0
- package/generated/index.ts +6 -9
- package/generated/test/index.ts +9 -10
- package/package.json +7 -6
- package/src/SpannerConfig.ts +22 -0
- package/src/SpannerDriver.ts +215 -28
- package/src/SpannerLivenessMonitor.ts +73 -5
- package/test/ServiceUpdateVerbs.test.ts +188 -0
- package/test/SessionPoolExhaustion.test.ts +127 -0
- package/test/SessionRecordTableQuery.test.ts +118 -0
- package/test/SpannerLivenessMonitor.test.ts +70 -0
- package/test/SpannerOperationDeadline.test.ts +156 -0
- package/test/TransactionSafety.test.ts +157 -0
- package/test/index.ts +1 -0
- package/test/util/serviceUpdateVerbsTestTables.ts +55 -0
|
@@ -102,7 +102,7 @@ var SpannerDriver = /** @class */ (function () {
|
|
|
102
102
|
};
|
|
103
103
|
SpannerDriver.prototype.getSpannerDb = function () {
|
|
104
104
|
if (!SpannerDriver.SPANNER_DB) {
|
|
105
|
-
SpannerDriver.SPANNER_DB = this.getSpannerInstance().database(this.config.databaseName);
|
|
105
|
+
SpannerDriver.SPANNER_DB = this.getSpannerInstance().database(this.config.databaseName, this.config.sessionPoolOptions);
|
|
106
106
|
SpannerDriver.LIVENESS_MONITOR = new SpannerLivenessMonitor_1.SpannerLivenessMonitor(SpannerDriver.SPANNER_DB).start();
|
|
107
107
|
}
|
|
108
108
|
return SpannerDriver.SPANNER_DB;
|
|
@@ -210,10 +210,14 @@ var SpannerDriver = /** @class */ (function () {
|
|
|
210
210
|
case 1:
|
|
211
211
|
_b.trys.push([1, 3, , 4]);
|
|
212
212
|
this.logger.debug({ message: "Executing query", obj: { sql: sql, params: namedParams } });
|
|
213
|
-
return [4 /*yield*/, this.
|
|
213
|
+
return [4 /*yield*/, this.withDeadline('spanner query', sql, runner.run({
|
|
214
214
|
sql: sql,
|
|
215
215
|
params: namedParams === null || namedParams === void 0 ? void 0 : namedParams.params,
|
|
216
216
|
types: namedParams === null || namedParams === void 0 ? void 0 : namedParams.types,
|
|
217
|
+
// The gRPC deadline is what actually cancels the RPC on a dead channel: the stream
|
|
218
|
+
// errors, the library ends the snapshot, and the borrowed session RETURNS to the
|
|
219
|
+
// pool. The withDeadline race alone would fail the caller but leak the session.
|
|
220
|
+
gaxOptions: { timeout: this.operationDeadlineMs() },
|
|
217
221
|
}))];
|
|
218
222
|
case 2:
|
|
219
223
|
rows = (_b.sent())[0];
|
|
@@ -251,23 +255,35 @@ var SpannerDriver = /** @class */ (function () {
|
|
|
251
255
|
if (!transaction) return [3 /*break*/, 2];
|
|
252
256
|
return [4 /*yield*/, this.executeDml(generateStatement, transaction)];
|
|
253
257
|
case 1: return [2 /*return*/, _a.sent()];
|
|
254
|
-
case 2: return [4 /*yield*/, this.
|
|
255
|
-
var rowCount;
|
|
258
|
+
case 2: return [4 /*yield*/, this.withDeadline('spanner dml transaction', '(runTransactionAsync)', this.getSpannerDb().runTransactionAsync(function (transaction) { return __awaiter(_this, void 0, void 0, function () {
|
|
259
|
+
var rowCount, error_2;
|
|
256
260
|
return __generator(this, function (_a) {
|
|
257
261
|
switch (_a.label) {
|
|
258
|
-
case 0:
|
|
262
|
+
case 0:
|
|
263
|
+
_a.trys.push([0, 3, , 5]);
|
|
264
|
+
return [4 /*yield*/, this.executeDml(generateStatement, transaction)];
|
|
259
265
|
case 1:
|
|
260
266
|
rowCount = _a.sent();
|
|
261
|
-
return [4 /*yield*/,
|
|
267
|
+
return [4 /*yield*/, this.commit(transaction)];
|
|
262
268
|
case 2:
|
|
263
269
|
_a.sent();
|
|
264
270
|
return [2 /*return*/, rowCount];
|
|
271
|
+
case 3:
|
|
272
|
+
error_2 = _a.sent();
|
|
273
|
+
return [4 /*yield*/, this.rollbackQuietly(transaction)];
|
|
274
|
+
case 4:
|
|
275
|
+
_a.sent();
|
|
276
|
+
throw error_2;
|
|
277
|
+
case 5: return [2 /*return*/];
|
|
265
278
|
}
|
|
266
279
|
});
|
|
267
280
|
}); }))];
|
|
268
281
|
case 3:
|
|
269
282
|
// Stalls in the transaction wrapper itself (session acquisition / begin / commit) happen
|
|
270
|
-
// OUTSIDE executeDml's instrumentation — wrap the whole round trip too.
|
|
283
|
+
// OUTSIDE executeDml's instrumentation — wrap the whole round trip too. Every await inside
|
|
284
|
+
// the run function is deadline-bounded (dml, commit, rollback): the run function therefore
|
|
285
|
+
// ALWAYS settles, which is what makes runTransactionAsync's own `finally` release the
|
|
286
|
+
// transaction's session back to the pool on a dead channel.
|
|
271
287
|
return [2 /*return*/, _a.sent()];
|
|
272
288
|
}
|
|
273
289
|
});
|
|
@@ -275,7 +291,7 @@ var SpannerDriver = /** @class */ (function () {
|
|
|
275
291
|
};
|
|
276
292
|
SpannerDriver.prototype.executeDml = function (generateStatement, runner) {
|
|
277
293
|
return __awaiter(this, void 0, void 0, function () {
|
|
278
|
-
var _a, sql, namedParams, startTime, rowCount, durationMs,
|
|
294
|
+
var _a, sql, namedParams, startTime, rowCount, durationMs, error_3, durationMs;
|
|
279
295
|
return __generator(this, function (_b) {
|
|
280
296
|
switch (_b.label) {
|
|
281
297
|
case 0:
|
|
@@ -290,10 +306,13 @@ var SpannerDriver = /** @class */ (function () {
|
|
|
290
306
|
case 1:
|
|
291
307
|
_b.trys.push([1, 3, , 4]);
|
|
292
308
|
this.logger.debug({ message: "Executing dml", obj: { sql: sql, params: namedParams } });
|
|
293
|
-
return [4 /*yield*/, this.
|
|
309
|
+
return [4 /*yield*/, this.withDeadline('spanner dml', sql, runner.runUpdate({
|
|
294
310
|
sql: sql,
|
|
295
311
|
params: namedParams === null || namedParams === void 0 ? void 0 : namedParams.params,
|
|
296
312
|
types: namedParams === null || namedParams === void 0 ? void 0 : namedParams.types,
|
|
313
|
+
// gRPC deadline: cancels the RPC on a dead channel so the transaction's run function
|
|
314
|
+
// settles and the library releases the session (see runDml).
|
|
315
|
+
gaxOptions: { timeout: this.operationDeadlineMs() },
|
|
297
316
|
}))];
|
|
298
317
|
case 2:
|
|
299
318
|
rowCount = (_b.sent())[0];
|
|
@@ -304,14 +323,14 @@ var SpannerDriver = /** @class */ (function () {
|
|
|
304
323
|
});
|
|
305
324
|
return [2 /*return*/, rowCount];
|
|
306
325
|
case 3:
|
|
307
|
-
|
|
326
|
+
error_3 = _b.sent();
|
|
308
327
|
durationMs = Number(process.hrtime.bigint() - startTime) / 1000000;
|
|
309
328
|
this.logger.error({
|
|
310
329
|
message: "Failed when executing dml",
|
|
311
|
-
obj: { sql: sql, params: namedParams, errorDetails:
|
|
330
|
+
obj: { sql: sql, params: namedParams, errorDetails: error_3.details, durationMs: durationMs },
|
|
312
331
|
});
|
|
313
|
-
SpannerDriver.LIVENESS_MONITOR.reportError(
|
|
314
|
-
throw
|
|
332
|
+
SpannerDriver.LIVENESS_MONITOR.reportError(error_3);
|
|
333
|
+
throw error_3;
|
|
315
334
|
case 4: return [2 /*return*/];
|
|
316
335
|
}
|
|
317
336
|
});
|
|
@@ -327,17 +346,26 @@ var SpannerDriver = /** @class */ (function () {
|
|
|
327
346
|
var _this = this;
|
|
328
347
|
return __generator(this, function (_a) {
|
|
329
348
|
switch (_a.label) {
|
|
330
|
-
case 0: return [4 /*yield*/, this.
|
|
331
|
-
var result;
|
|
349
|
+
case 0: return [4 /*yield*/, this.withDeadline('spanner transaction', '(runTransactionAsync)', this.getSpannerDb().runTransactionAsync(function (transaction) { return __awaiter(_this, void 0, void 0, function () {
|
|
350
|
+
var result, error_4;
|
|
332
351
|
return __generator(this, function (_a) {
|
|
333
352
|
switch (_a.label) {
|
|
334
|
-
case 0:
|
|
353
|
+
case 0:
|
|
354
|
+
_a.trys.push([0, 3, , 5]);
|
|
355
|
+
return [4 /*yield*/, fn(transaction)];
|
|
335
356
|
case 1:
|
|
336
357
|
result = _a.sent();
|
|
337
|
-
return [4 /*yield*/,
|
|
358
|
+
return [4 /*yield*/, this.commit(transaction)];
|
|
338
359
|
case 2:
|
|
339
360
|
_a.sent();
|
|
340
361
|
return [2 /*return*/, result];
|
|
362
|
+
case 3:
|
|
363
|
+
error_4 = _a.sent();
|
|
364
|
+
return [4 /*yield*/, this.rollbackQuietly(transaction)];
|
|
365
|
+
case 4:
|
|
366
|
+
_a.sent();
|
|
367
|
+
throw error_4;
|
|
368
|
+
case 5: return [2 /*return*/];
|
|
341
369
|
}
|
|
342
370
|
});
|
|
343
371
|
}); }))];
|
|
@@ -347,28 +375,89 @@ var SpannerDriver = /** @class */ (function () {
|
|
|
347
375
|
});
|
|
348
376
|
};
|
|
349
377
|
/**
|
|
350
|
-
|
|
351
|
-
*
|
|
352
|
-
*
|
|
353
|
-
|
|
354
|
-
|
|
378
|
+
* Deadline-bounded commit: a commit hanging on a dead channel would otherwise keep the
|
|
379
|
+
* transaction's run function pending forever, and with it the session (runTransactionAsync
|
|
380
|
+
* only releases the session once the run function settles).
|
|
381
|
+
*/
|
|
382
|
+
SpannerDriver.prototype.commit = function (transaction) {
|
|
383
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
384
|
+
return __generator(this, function (_a) {
|
|
385
|
+
switch (_a.label) {
|
|
386
|
+
case 0: return [4 /*yield*/, this.withDeadline('spanner commit', '(commit)', transaction.commit({ gaxOptions: { timeout: this.operationDeadlineMs() } }))];
|
|
387
|
+
case 1:
|
|
388
|
+
_a.sent();
|
|
389
|
+
return [2 /*return*/];
|
|
390
|
+
}
|
|
391
|
+
});
|
|
392
|
+
});
|
|
393
|
+
};
|
|
394
|
+
/**
|
|
395
|
+
* Release a transaction whose work errored. The client library's runner does NOT roll back on
|
|
396
|
+
* non-retryable errors — it just rethrows — so a thrown `fn` (e.g. an application rollback, or
|
|
397
|
+
* a failed statement) left the read-write transaction OPEN until session timeout. Real Spanner
|
|
398
|
+
* tolerates that (locks expire); the emulator serializes on its single read-write transaction,
|
|
399
|
+
* so one leaked transaction blocks every subsequent DDL with FAILED_PRECONDITION ("a
|
|
400
|
+
* read-write transaction is already in progress") — poisoning whole test runs. Rollback of an
|
|
401
|
+
* already-invalid transaction (e.g. ABORTED, about to be retried by the runner with a fresh
|
|
402
|
+
* transaction, or one whose commit was already called) is expected to fail; that failure is
|
|
403
|
+
* logged at debug and swallowed so the ORIGINAL error — the one that carries retry semantics —
|
|
404
|
+
* always propagates. Deadline-bounded like commit: an unbounded rollback on a dead channel
|
|
405
|
+
* would keep the run function (and its session) pending forever.
|
|
406
|
+
*/
|
|
407
|
+
SpannerDriver.prototype.rollbackQuietly = function (transaction) {
|
|
408
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
409
|
+
var rollbackError_1;
|
|
410
|
+
return __generator(this, function (_a) {
|
|
411
|
+
switch (_a.label) {
|
|
412
|
+
case 0:
|
|
413
|
+
_a.trys.push([0, 2, , 3]);
|
|
414
|
+
return [4 /*yield*/, this.withDeadline('spanner rollback', '(rollback)', transaction.rollback({ timeout: this.operationDeadlineMs() }))];
|
|
415
|
+
case 1:
|
|
416
|
+
_a.sent();
|
|
417
|
+
return [3 /*break*/, 3];
|
|
418
|
+
case 2:
|
|
419
|
+
rollbackError_1 = _a.sent();
|
|
420
|
+
this.logger.debug({ message: "Rollback after transaction error failed", obj: { rollbackError: rollbackError_1 } });
|
|
421
|
+
return [3 /*break*/, 3];
|
|
422
|
+
case 3: return [2 /*return*/];
|
|
423
|
+
}
|
|
424
|
+
});
|
|
425
|
+
});
|
|
426
|
+
};
|
|
427
|
+
/**
|
|
428
|
+
* The one choke point every query/dml/transaction op awaits through. Two jobs:
|
|
429
|
+
*
|
|
430
|
+
* 1. Stall diagnostics (2026-07-10 flow-hang investigation): logs ops still pending at 30s
|
|
431
|
+
* and 120s with the op and statement.
|
|
432
|
+
* 2. OP DEADLINE (2026-08-06 overnight wedge): an op that has not settled by
|
|
433
|
+
* `operationDeadlineMs` (default 60s) FAILS with an error naming the deadline instead of
|
|
434
|
+
* hanging forever on a dead gRPC channel. This race covers hangs the gRPC deadline cannot
|
|
435
|
+
* see (session-pool acquisition, library internals before the RPC starts); the
|
|
436
|
+
* wire-level cancellation + session return is the gRPC deadline attached per call
|
|
437
|
+
* (`gaxOptions.timeout`, same value) — see the call sites. Deadline failures feed the
|
|
438
|
+
* channel-death recycle counter; any success resets it.
|
|
355
439
|
*/
|
|
356
|
-
SpannerDriver.prototype.
|
|
440
|
+
SpannerDriver.prototype.withDeadline = function (op, sql, promise) {
|
|
357
441
|
var _this = this;
|
|
358
442
|
var _a, _b;
|
|
359
|
-
|
|
443
|
+
// Pool gauge (P4a): every op passes through here, so this is where waiting-on-the-pool
|
|
444
|
+
// becomes visible (throttled inside the monitor). The monitor exists by now — all ops
|
|
445
|
+
// require getSpannerDb() first.
|
|
446
|
+
SpannerDriver.LIVENESS_MONITOR.logPoolPressure();
|
|
447
|
+
var deadlineMs = this.operationDeadlineMs();
|
|
448
|
+
var generation = SpannerDriver.CLIENT_GENERATION;
|
|
360
449
|
var settled = false;
|
|
361
450
|
var logStall = function (afterMs) {
|
|
362
451
|
return _this.logger.error({
|
|
363
452
|
message: "Spanner op stalled: ".concat(op),
|
|
364
|
-
obj: { afterMs: afterMs, sql: String(sql).slice(0, 200) },
|
|
453
|
+
obj: { afterMs: afterMs, sql: String(sql).slice(0, 200), pool: SpannerDriver.LIVENESS_MONITOR.poolStats() },
|
|
365
454
|
});
|
|
366
455
|
};
|
|
367
456
|
var t1 = setTimeout(function () {
|
|
368
457
|
if (!settled) {
|
|
369
|
-
logStall(
|
|
458
|
+
logStall(30000);
|
|
370
459
|
}
|
|
371
|
-
},
|
|
460
|
+
}, 30000);
|
|
372
461
|
var t2 = setTimeout(function () {
|
|
373
462
|
if (!settled) {
|
|
374
463
|
logStall(120000);
|
|
@@ -376,18 +465,115 @@ var SpannerDriver = /** @class */ (function () {
|
|
|
376
465
|
}, 120000);
|
|
377
466
|
(_a = t1.unref) === null || _a === void 0 ? void 0 : _a.call(t1);
|
|
378
467
|
(_b = t2.unref) === null || _b === void 0 ? void 0 : _b.call(t2);
|
|
379
|
-
return Promise
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
468
|
+
return new Promise(function (resolve, reject) {
|
|
469
|
+
var _a;
|
|
470
|
+
var clear = function () {
|
|
471
|
+
settled = true;
|
|
472
|
+
clearTimeout(t1);
|
|
473
|
+
clearTimeout(t2);
|
|
474
|
+
clearTimeout(deadlineTimer);
|
|
475
|
+
};
|
|
476
|
+
var deadlineTimer = setTimeout(function () {
|
|
477
|
+
if (settled) {
|
|
478
|
+
return;
|
|
479
|
+
}
|
|
480
|
+
clear();
|
|
481
|
+
_this.logger.error({
|
|
482
|
+
message: "Spanner op exceeded its ".concat(deadlineMs, "ms deadline: ").concat(op, " \u2014 failing the op"),
|
|
483
|
+
obj: { sql: String(sql).slice(0, 200), pool: SpannerDriver.LIVENESS_MONITOR.poolStats() },
|
|
484
|
+
});
|
|
485
|
+
_this.recordDeadlineFailure(generation);
|
|
486
|
+
// Deliberately no grpc `code` on this error: the liveness monitor's probe/exit
|
|
487
|
+
// escalation stays owned by genuine grpc errors; hang-shaped death is owned by the
|
|
488
|
+
// recycle counter.
|
|
489
|
+
reject(new Error("Spanner op exceeded its ".concat(deadlineMs, "ms deadline: ").concat(op, " (configure via SpannerConfig.operationDeadlineMs)")));
|
|
490
|
+
}, deadlineMs);
|
|
491
|
+
(_a = deadlineTimer.unref) === null || _a === void 0 ? void 0 : _a.call(deadlineTimer);
|
|
492
|
+
Promise.resolve(promise).then(function (value) {
|
|
493
|
+
if (settled) {
|
|
494
|
+
return; // deadline already failed the caller; the library handles the late settle
|
|
495
|
+
}
|
|
496
|
+
clear();
|
|
497
|
+
_this.recordOpSuccess(generation);
|
|
498
|
+
resolve(value);
|
|
499
|
+
}, function (error) {
|
|
500
|
+
if (settled) {
|
|
501
|
+
return;
|
|
502
|
+
}
|
|
503
|
+
clear();
|
|
504
|
+
// A grpc DEADLINE_EXCEEDED (code 4) is the same dead-channel signal arriving via the
|
|
505
|
+
// per-call gRPC deadline — classification for the one counter, not a second path.
|
|
506
|
+
if ((error === null || error === void 0 ? void 0 : error.code) === 4) {
|
|
507
|
+
_this.recordDeadlineFailure(generation);
|
|
508
|
+
}
|
|
509
|
+
reject(error);
|
|
510
|
+
});
|
|
511
|
+
});
|
|
512
|
+
};
|
|
513
|
+
// ── Channel-death recycle (one owner for the process-wide client) ─────────
|
|
514
|
+
SpannerDriver.prototype.recordOpSuccess = function (generation) {
|
|
515
|
+
if (generation !== SpannerDriver.CLIENT_GENERATION) {
|
|
516
|
+
return; // outcome from a recycled client says nothing about the fresh channel
|
|
517
|
+
}
|
|
518
|
+
SpannerDriver.CONSECUTIVE_DEADLINE_FAILURES = 0;
|
|
519
|
+
};
|
|
520
|
+
SpannerDriver.prototype.recordDeadlineFailure = function (generation) {
|
|
521
|
+
if (generation !== SpannerDriver.CLIENT_GENERATION) {
|
|
522
|
+
return;
|
|
523
|
+
}
|
|
524
|
+
SpannerDriver.CONSECUTIVE_DEADLINE_FAILURES += 1;
|
|
525
|
+
if (SpannerDriver.CONSECUTIVE_DEADLINE_FAILURES < this.deadlineFailuresBeforeRecycle()) {
|
|
526
|
+
return;
|
|
527
|
+
}
|
|
528
|
+
// Reset BEFORE recycling: the counter and generation swap happen in this same synchronous
|
|
529
|
+
// frame, so a burst of ops all timing out together triggers exactly one recycle.
|
|
530
|
+
SpannerDriver.CONSECUTIVE_DEADLINE_FAILURES = 0;
|
|
531
|
+
this.recycleClient();
|
|
532
|
+
};
|
|
533
|
+
/**
|
|
534
|
+
* Drop the process-wide Spanner client so the next op builds a fresh client/channel — the
|
|
535
|
+
* categorical cure for a dead gRPC channel (Mac sleep, NAT drop) that deadlines every op.
|
|
536
|
+
* The old liveness monitor is stopped so its probe/exit escalation can't kill the process
|
|
537
|
+
* for a channel we just abandoned; LIVENESS_MONITOR itself stays pointed at it (stopped)
|
|
538
|
+
* until getSpannerDb() installs the new client's monitor, keeping in-flight ops' error
|
|
539
|
+
* paths callable.
|
|
540
|
+
*/
|
|
541
|
+
SpannerDriver.prototype.recycleClient = function () {
|
|
542
|
+
this.logger.error({
|
|
543
|
+
message: "Recycling Spanner client after ".concat(this.deadlineFailuresBeforeRecycle(), " consecutive op-deadline failures (dead gRPC channel suspected) \u2014 a fresh client/channel will be created on the next op"),
|
|
383
544
|
});
|
|
545
|
+
SpannerDriver.CLIENT_GENERATION += 1;
|
|
546
|
+
var oldMonitor = SpannerDriver.LIVENESS_MONITOR;
|
|
547
|
+
var oldDb = SpannerDriver.SPANNER_DB;
|
|
548
|
+
var oldSpanner = SpannerDriver.SPANNER;
|
|
549
|
+
SpannerDriver.SPANNER = undefined;
|
|
550
|
+
SpannerDriver.SPANNER_INSTANCE = undefined;
|
|
551
|
+
SpannerDriver.SPANNER_DB = undefined;
|
|
552
|
+
oldMonitor === null || oldMonitor === void 0 ? void 0 : oldMonitor.stop();
|
|
553
|
+
// Best-effort teardown of the old client: session deletes are themselves RPCs on the very
|
|
554
|
+
// channel we believe is dead — the recycle must not depend on them succeeding.
|
|
555
|
+
void (oldDb === null || oldDb === void 0 ? void 0 : oldDb.close().catch(function () { return undefined; }));
|
|
556
|
+
try {
|
|
557
|
+
oldSpanner === null || oldSpanner === void 0 ? void 0 : oldSpanner.close();
|
|
558
|
+
}
|
|
559
|
+
catch (_a) {
|
|
560
|
+
// already torn down
|
|
561
|
+
}
|
|
562
|
+
};
|
|
563
|
+
SpannerDriver.prototype.operationDeadlineMs = function () {
|
|
564
|
+
var _a;
|
|
565
|
+
return (_a = this.config.operationDeadlineMs) !== null && _a !== void 0 ? _a : 60000;
|
|
566
|
+
};
|
|
567
|
+
SpannerDriver.prototype.deadlineFailuresBeforeRecycle = function () {
|
|
568
|
+
var _a;
|
|
569
|
+
return (_a = this.config.deadlineFailuresBeforeRecycle) !== null && _a !== void 0 ? _a : 3;
|
|
384
570
|
};
|
|
385
571
|
/**
|
|
386
572
|
* Execute a schema write operation.
|
|
387
573
|
*/
|
|
388
574
|
SpannerDriver.prototype.runUpdateSchema = function (sql) {
|
|
389
575
|
return __awaiter(this, void 0, void 0, function () {
|
|
390
|
-
var startTime, operation, durationMs,
|
|
576
|
+
var startTime, operation, durationMs, error_5, durationMs;
|
|
391
577
|
return __generator(this, function (_a) {
|
|
392
578
|
switch (_a.label) {
|
|
393
579
|
case 0:
|
|
@@ -406,18 +592,26 @@ var SpannerDriver = /** @class */ (function () {
|
|
|
406
592
|
this.logger.debug({ message: "Schema update executed", obj: { sql: sql, durationMs: durationMs } });
|
|
407
593
|
return [3 /*break*/, 5];
|
|
408
594
|
case 4:
|
|
409
|
-
|
|
595
|
+
error_5 = _a.sent();
|
|
410
596
|
durationMs = Number(process.hrtime.bigint() - startTime) / 1000000;
|
|
411
597
|
this.logger.error({
|
|
412
598
|
message: "Failed when executing schema update",
|
|
413
|
-
obj: { sql: sql, errorDetails:
|
|
599
|
+
obj: { sql: sql, errorDetails: error_5.details, durationMs: durationMs },
|
|
414
600
|
});
|
|
415
|
-
throw
|
|
601
|
+
throw error_5;
|
|
416
602
|
case 5: return [2 /*return*/];
|
|
417
603
|
}
|
|
418
604
|
});
|
|
419
605
|
});
|
|
420
606
|
};
|
|
607
|
+
/**
|
|
608
|
+
* Channel-death recycle accounting (2026-08-06 overnight wedge). Ops are tagged with the
|
|
609
|
+
* generation of the client they started on; only same-generation outcomes touch the counter,
|
|
610
|
+
* so a burst of deadline failures from the OLD (recycled) channel can never spuriously
|
|
611
|
+
* recycle the fresh one.
|
|
612
|
+
*/
|
|
613
|
+
SpannerDriver.CLIENT_GENERATION = 0;
|
|
614
|
+
SpannerDriver.CONSECUTIVE_DEADLINE_FAILURES = 0;
|
|
421
615
|
return SpannerDriver;
|
|
422
616
|
}());
|
|
423
617
|
exports.SpannerDriver = SpannerDriver;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpannerDriver.js","sourceRoot":"","sources":["../../src/SpannerDriver.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SpannerDriver.js","sourceRoot":"","sources":["../../src/SpannerDriver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,42 @@
|
|
|
1
1
|
import { Database } from '@google-cloud/spanner';
|
|
2
|
+
/** Session pool gauge (P4a): the four numbers that make pool exhaustion observable. */
|
|
3
|
+
export type SpannerSessionPoolStats = {
|
|
4
|
+
size: number;
|
|
5
|
+
available: number;
|
|
6
|
+
borrowed: number;
|
|
7
|
+
totalWaiters: number;
|
|
8
|
+
};
|
|
2
9
|
export declare class SpannerLivenessMonitor {
|
|
3
10
|
private db;
|
|
4
11
|
private static readonly PROBE_SQL;
|
|
5
12
|
private static readonly PROBE_TIMEOUT_MS;
|
|
6
13
|
/** delay before each attempt; 5 attempts spanning ~2 min (fast failures) to ~4.5 min (30s-deadline failures) */
|
|
7
14
|
private static readonly PROBE_DELAYS_MS;
|
|
15
|
+
/** waiters > 0 is the wedge signature — warn on sight, but at most once per interval per process */
|
|
16
|
+
private static readonly POOL_PRESSURE_WARN_INTERVAL_MS;
|
|
8
17
|
private logger;
|
|
9
18
|
private checkInFlight;
|
|
19
|
+
private stopped;
|
|
20
|
+
private lastPoolPressureWarnMs;
|
|
10
21
|
constructor(db: Database);
|
|
11
22
|
/** Attach the single 'error' listener; called once when the Database singleton is created. */
|
|
12
23
|
start(): this;
|
|
24
|
+
/**
|
|
25
|
+
* Retire this monitor when its client is recycled (channel-death recycle in SpannerDriver):
|
|
26
|
+
* a stopped monitor must never escalate to process exit for a channel the driver has already
|
|
27
|
+
* abandoned — the replacement client gets a fresh monitor.
|
|
28
|
+
*/
|
|
29
|
+
stop(): void;
|
|
13
30
|
/** Called from driver catch blocks; probes only for connectivity-shaped errors. */
|
|
14
31
|
reportError(error: any): void;
|
|
32
|
+
poolStats(): SpannerSessionPoolStats;
|
|
33
|
+
/**
|
|
34
|
+
* Warn whenever operations are queued waiting on the session pool (the silent-wedge
|
|
35
|
+
* signature — with an infinite acquireTimeout a wedged pool otherwise produces no signal at
|
|
36
|
+
* all). Called by the driver as ops are issued; throttled so a contended burst emits one
|
|
37
|
+
* line per interval, not one per queued op.
|
|
38
|
+
*/
|
|
39
|
+
logPoolPressure(nowMs?: number): void;
|
|
15
40
|
private verifyLiveness;
|
|
16
41
|
private probe;
|
|
17
42
|
private sleep;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpannerLivenessMonitor.d.ts","sourceRoot":"","sources":["../../src/SpannerLivenessMonitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"SpannerLivenessMonitor.d.ts","sourceRoot":"","sources":["../../src/SpannerLivenessMonitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAe,MAAM,uBAAuB,CAAC;AAgB9D,uFAAuF;AACvF,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,qBAAa,sBAAsB;IAYrB,OAAO,CAAC,EAAE;IAXtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAc;IAC/C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAU;IAClD,gHAAgH;IAChH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAsC;IAC7E,oGAAoG;IACpG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,8BAA8B,CAAU;IAChE,OAAO,CAAC,MAAM,CAA+C;IAC7D,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,sBAAsB,CAA4B;gBAEtC,EAAE,EAAE,QAAQ;IAEhC,8FAA8F;IAC9F,KAAK,IAAI,IAAI;IAcb;;;;OAIG;IACH,IAAI,IAAI,IAAI;IAIZ,mFAAmF;IACnF,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAO7B,SAAS,IAAI,uBAAuB;IAKpC;;;;;OAKG;IACH,eAAe,CAAC,KAAK,SAAa,GAAG,IAAI;YAmB3B,cAAc;YAkCd,KAAK;IAOnB,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,IAAI;CAGb"}
|
|
@@ -40,32 +40,79 @@ exports.SpannerLivenessMonitor = void 0;
|
|
|
40
40
|
var logger_1 = require("@proteinjs/logger");
|
|
41
41
|
/** grpc status codes that indicate connectivity trouble rather than an application error */
|
|
42
42
|
var CONNECTIVITY_GRPC_CODES = [4 /* DEADLINE_EXCEEDED */, 14 /* UNAVAILABLE */];
|
|
43
|
+
/**
|
|
44
|
+
* Restart-requested exit code — the supervision contract shared with @proteinjs/build's
|
|
45
|
+
* serve-package (ServePackageSupervisor.RESTART_REQUEST_EXIT_CODE): a supervised process
|
|
46
|
+
* exiting with this code is respawned with bounded backoff instead of being treated as a plain
|
|
47
|
+
* failure (which the supervisor mirrors, i.e. stays down). Orchestrators that restart on any
|
|
48
|
+
* nonzero exit (systemd, Kubernetes) treat it like any other failure code, so it is safe
|
|
49
|
+
* everywhere. Hard-coded by design: the contract crosses a process boundary, like a signal.
|
|
50
|
+
*/
|
|
51
|
+
var RESTART_REQUEST_EXIT_CODE = 86;
|
|
43
52
|
var SpannerLivenessMonitor = /** @class */ (function () {
|
|
44
53
|
function SpannerLivenessMonitor(db) {
|
|
45
54
|
this.db = db;
|
|
46
55
|
this.logger = new logger_1.Logger({ name: this.constructor.name });
|
|
47
56
|
this.checkInFlight = false;
|
|
57
|
+
this.stopped = false;
|
|
58
|
+
this.lastPoolPressureWarnMs = Number.NEGATIVE_INFINITY;
|
|
48
59
|
}
|
|
49
60
|
/** Attach the single 'error' listener; called once when the Database singleton is created. */
|
|
50
61
|
SpannerLivenessMonitor.prototype.start = function () {
|
|
51
62
|
var _this = this;
|
|
52
63
|
this.db.on('error', function (error) {
|
|
53
64
|
var _a;
|
|
65
|
+
if (_this.stopped) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
54
68
|
_this.logger.warn({
|
|
55
69
|
message: "Spanner session pool emitted a background error; verifying db connectivity",
|
|
56
|
-
obj: { code: error === null || error === void 0 ? void 0 : error.code, errorDetails: (_a = error === null || error === void 0 ? void 0 : error.details) !== null && _a !== void 0 ? _a : String(error) },
|
|
70
|
+
obj: { code: error === null || error === void 0 ? void 0 : error.code, errorDetails: (_a = error === null || error === void 0 ? void 0 : error.details) !== null && _a !== void 0 ? _a : String(error), pool: _this.poolStats() },
|
|
57
71
|
});
|
|
58
72
|
void _this.verifyLiveness();
|
|
59
73
|
});
|
|
60
74
|
return this;
|
|
61
75
|
};
|
|
76
|
+
/**
|
|
77
|
+
* Retire this monitor when its client is recycled (channel-death recycle in SpannerDriver):
|
|
78
|
+
* a stopped monitor must never escalate to process exit for a channel the driver has already
|
|
79
|
+
* abandoned — the replacement client gets a fresh monitor.
|
|
80
|
+
*/
|
|
81
|
+
SpannerLivenessMonitor.prototype.stop = function () {
|
|
82
|
+
this.stopped = true;
|
|
83
|
+
};
|
|
62
84
|
/** Called from driver catch blocks; probes only for connectivity-shaped errors. */
|
|
63
85
|
SpannerLivenessMonitor.prototype.reportError = function (error) {
|
|
64
|
-
if (!CONNECTIVITY_GRPC_CODES.includes(error === null || error === void 0 ? void 0 : error.code)) {
|
|
86
|
+
if (this.stopped || !CONNECTIVITY_GRPC_CODES.includes(error === null || error === void 0 ? void 0 : error.code)) {
|
|
65
87
|
return;
|
|
66
88
|
}
|
|
67
89
|
void this.verifyLiveness();
|
|
68
90
|
};
|
|
91
|
+
SpannerLivenessMonitor.prototype.poolStats = function () {
|
|
92
|
+
var pool = this.db.pool_;
|
|
93
|
+
return { size: pool.size, available: pool.available, borrowed: pool.borrowed, totalWaiters: pool.totalWaiters };
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* Warn whenever operations are queued waiting on the session pool (the silent-wedge
|
|
97
|
+
* signature — with an infinite acquireTimeout a wedged pool otherwise produces no signal at
|
|
98
|
+
* all). Called by the driver as ops are issued; throttled so a contended burst emits one
|
|
99
|
+
* line per interval, not one per queued op.
|
|
100
|
+
*/
|
|
101
|
+
SpannerLivenessMonitor.prototype.logPoolPressure = function (nowMs) {
|
|
102
|
+
if (nowMs === void 0) { nowMs = Date.now(); }
|
|
103
|
+
var stats = this.poolStats();
|
|
104
|
+
if (stats.totalWaiters === 0) {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (nowMs - this.lastPoolPressureWarnMs < SpannerLivenessMonitor.POOL_PRESSURE_WARN_INTERVAL_MS) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
this.lastPoolPressureWarnMs = nowMs;
|
|
111
|
+
this.logger.warn({
|
|
112
|
+
message: "Spanner session pool under pressure: operations are waiting for a session",
|
|
113
|
+
obj: stats,
|
|
114
|
+
});
|
|
115
|
+
};
|
|
69
116
|
// --- helpers last ---
|
|
70
117
|
SpannerLivenessMonitor.prototype.verifyLiveness = function () {
|
|
71
118
|
var _a;
|
|
@@ -88,6 +135,9 @@ var SpannerLivenessMonitor = /** @class */ (function () {
|
|
|
88
135
|
return [4 /*yield*/, this.sleep(SpannerLivenessMonitor.PROBE_DELAYS_MS[attempt])];
|
|
89
136
|
case 3:
|
|
90
137
|
_b.sent();
|
|
138
|
+
if (this.stopped) {
|
|
139
|
+
return [2 /*return*/]; // client recycled mid-cycle — this channel's fate no longer matters
|
|
140
|
+
}
|
|
91
141
|
_b.label = 4;
|
|
92
142
|
case 4:
|
|
93
143
|
_b.trys.push([4, 6, , 7]);
|
|
@@ -107,8 +157,11 @@ var SpannerLivenessMonitor = /** @class */ (function () {
|
|
|
107
157
|
attempt++;
|
|
108
158
|
return [3 /*break*/, 2];
|
|
109
159
|
case 8:
|
|
160
|
+
if (this.stopped) {
|
|
161
|
+
return [2 /*return*/];
|
|
162
|
+
}
|
|
110
163
|
this.logger.error({
|
|
111
|
-
message: "Db unreachable after sustained probing; exiting so supervision
|
|
164
|
+
message: "Db unreachable after sustained probing; exiting restart-requested (code ".concat(RESTART_REQUEST_EXIT_CODE, ") so supervision respawns into a valid state"),
|
|
112
165
|
});
|
|
113
166
|
this.exit();
|
|
114
167
|
return [3 /*break*/, 10];
|
|
@@ -139,12 +192,14 @@ var SpannerLivenessMonitor = /** @class */ (function () {
|
|
|
139
192
|
return new Promise(function (resolve) { return setTimeout(resolve, ms); });
|
|
140
193
|
};
|
|
141
194
|
SpannerLivenessMonitor.prototype.exit = function () {
|
|
142
|
-
process.exit(
|
|
195
|
+
process.exit(RESTART_REQUEST_EXIT_CODE);
|
|
143
196
|
};
|
|
144
197
|
SpannerLivenessMonitor.PROBE_SQL = 'SELECT 1';
|
|
145
198
|
SpannerLivenessMonitor.PROBE_TIMEOUT_MS = 10000;
|
|
146
199
|
/** delay before each attempt; 5 attempts spanning ~2 min (fast failures) to ~4.5 min (30s-deadline failures) */
|
|
147
200
|
SpannerLivenessMonitor.PROBE_DELAYS_MS = [0, 5000, 15000, 30000, 60000];
|
|
201
|
+
/** waiters > 0 is the wedge signature — warn on sight, but at most once per interval per process */
|
|
202
|
+
SpannerLivenessMonitor.POOL_PRESSURE_WARN_INTERVAL_MS = 10000;
|
|
148
203
|
return SpannerLivenessMonitor;
|
|
149
204
|
}());
|
|
150
205
|
exports.SpannerLivenessMonitor = SpannerLivenessMonitor;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpannerLivenessMonitor.js","sourceRoot":"","sources":["../../src/SpannerLivenessMonitor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,4CAA2C;AAE3C,4FAA4F;AAC5F,IAAM,uBAAuB,GAAG,CAAC,CAAC,CAAC,uBAAuB,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC;AAElF;
|
|
1
|
+
{"version":3,"file":"SpannerLivenessMonitor.js","sourceRoot":"","sources":["../../src/SpannerLivenessMonitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServiceUpdateVerbs.test.d.ts","sourceRoot":"","sources":["../../test/ServiceUpdateVerbs.test.ts"],"names":[],"mappings":"AAmBA,OAAO,yBAAyB,CAAC"}
|