@proteinjs/db-driver-spanner 1.13.0 → 1.14.1
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 +24 -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.js +1 -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 +46 -11
- package/dist/src/SpannerDriver.d.ts.map +1 -1
- package/dist/src/SpannerDriver.js +194 -26
- 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 +48 -2
- package/dist/src/SpannerLivenessMonitor.js.map +1 -1
- 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/SpannerLivenessMonitor.test.js +42 -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/generated/index.ts +6 -9
- package/generated/test/index.ts +8 -11
- package/package.json +6 -5
- package/src/SpannerConfig.ts +22 -0
- package/src/SpannerDriver.ts +204 -28
- package/src/SpannerLivenessMonitor.ts +61 -3
- package/test/SessionPoolExhaustion.test.ts +127 -0
- package/test/SpannerLivenessMonitor.test.ts +55 -0
- package/test/SpannerOperationDeadline.test.ts +156 -0
- package/test/TransactionSafety.test.ts +157 -0
|
@@ -101,9 +101,32 @@ var SpannerDriver = /** @class */ (function () {
|
|
|
101
101
|
return SpannerDriver.SPANNER_INSTANCE;
|
|
102
102
|
};
|
|
103
103
|
SpannerDriver.prototype.getSpannerDb = function () {
|
|
104
|
+
var _this = this;
|
|
104
105
|
if (!SpannerDriver.SPANNER_DB) {
|
|
105
|
-
|
|
106
|
-
|
|
106
|
+
var db_2 = this.getSpannerInstance().database(this.config.databaseName, this.config.sessionPoolOptions);
|
|
107
|
+
// The session pool forwards its 'error' events to the Database (session keepalive /
|
|
108
|
+
// delete failures — advisory: the pool self-heals, and per-query failures reject their
|
|
109
|
+
// own calls instead of flowing through this channel). Without a listener Node treats
|
|
110
|
+
// the emit as an unhandled 'error' event and crashes the process; a recycled client's
|
|
111
|
+
// post-close session deletes make that a certainty, so the owner that creates the
|
|
112
|
+
// Database also owns its error channel.
|
|
113
|
+
db_2.on('error', function (error) {
|
|
114
|
+
var detail = error instanceof Error ? error.message : String(error);
|
|
115
|
+
if (SpannerDriver.SPANNER_DB === db_2) {
|
|
116
|
+
_this.logger.warn({
|
|
117
|
+
message: 'Spanner session pool error (advisory; the pool self-heals)',
|
|
118
|
+
obj: { error: detail },
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
_this.logger.debug({
|
|
123
|
+
message: 'Spanner session pool error from a recycled/abandoned client (expected during teardown)',
|
|
124
|
+
obj: { error: detail },
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
SpannerDriver.SPANNER_DB = db_2;
|
|
129
|
+
SpannerDriver.LIVENESS_MONITOR = new SpannerLivenessMonitor_1.SpannerLivenessMonitor(db_2).start();
|
|
107
130
|
}
|
|
108
131
|
return SpannerDriver.SPANNER_DB;
|
|
109
132
|
};
|
|
@@ -210,10 +233,14 @@ var SpannerDriver = /** @class */ (function () {
|
|
|
210
233
|
case 1:
|
|
211
234
|
_b.trys.push([1, 3, , 4]);
|
|
212
235
|
this.logger.debug({ message: "Executing query", obj: { sql: sql, params: namedParams } });
|
|
213
|
-
return [4 /*yield*/, this.
|
|
236
|
+
return [4 /*yield*/, this.withDeadline('spanner query', sql, runner.run({
|
|
214
237
|
sql: sql,
|
|
215
238
|
params: namedParams === null || namedParams === void 0 ? void 0 : namedParams.params,
|
|
216
239
|
types: namedParams === null || namedParams === void 0 ? void 0 : namedParams.types,
|
|
240
|
+
// The gRPC deadline is what actually cancels the RPC on a dead channel: the stream
|
|
241
|
+
// errors, the library ends the snapshot, and the borrowed session RETURNS to the
|
|
242
|
+
// pool. The withDeadline race alone would fail the caller but leak the session.
|
|
243
|
+
gaxOptions: { timeout: this.operationDeadlineMs() },
|
|
217
244
|
}))];
|
|
218
245
|
case 2:
|
|
219
246
|
rows = (_b.sent())[0];
|
|
@@ -251,7 +278,7 @@ var SpannerDriver = /** @class */ (function () {
|
|
|
251
278
|
if (!transaction) return [3 /*break*/, 2];
|
|
252
279
|
return [4 /*yield*/, this.executeDml(generateStatement, transaction)];
|
|
253
280
|
case 1: return [2 /*return*/, _a.sent()];
|
|
254
|
-
case 2: return [4 /*yield*/, this.
|
|
281
|
+
case 2: return [4 /*yield*/, this.withDeadline('spanner dml transaction', '(runTransactionAsync)', this.getSpannerDb().runTransactionAsync(function (transaction) { return __awaiter(_this, void 0, void 0, function () {
|
|
255
282
|
var rowCount, error_2;
|
|
256
283
|
return __generator(this, function (_a) {
|
|
257
284
|
switch (_a.label) {
|
|
@@ -260,7 +287,7 @@ var SpannerDriver = /** @class */ (function () {
|
|
|
260
287
|
return [4 /*yield*/, this.executeDml(generateStatement, transaction)];
|
|
261
288
|
case 1:
|
|
262
289
|
rowCount = _a.sent();
|
|
263
|
-
return [4 /*yield*/,
|
|
290
|
+
return [4 /*yield*/, this.commit(transaction)];
|
|
264
291
|
case 2:
|
|
265
292
|
_a.sent();
|
|
266
293
|
return [2 /*return*/, rowCount];
|
|
@@ -276,7 +303,10 @@ var SpannerDriver = /** @class */ (function () {
|
|
|
276
303
|
}); }))];
|
|
277
304
|
case 3:
|
|
278
305
|
// Stalls in the transaction wrapper itself (session acquisition / begin / commit) happen
|
|
279
|
-
// OUTSIDE executeDml's instrumentation — wrap the whole round trip too.
|
|
306
|
+
// OUTSIDE executeDml's instrumentation — wrap the whole round trip too. Every await inside
|
|
307
|
+
// the run function is deadline-bounded (dml, commit, rollback): the run function therefore
|
|
308
|
+
// ALWAYS settles, which is what makes runTransactionAsync's own `finally` release the
|
|
309
|
+
// transaction's session back to the pool on a dead channel.
|
|
280
310
|
return [2 /*return*/, _a.sent()];
|
|
281
311
|
}
|
|
282
312
|
});
|
|
@@ -299,10 +329,13 @@ var SpannerDriver = /** @class */ (function () {
|
|
|
299
329
|
case 1:
|
|
300
330
|
_b.trys.push([1, 3, , 4]);
|
|
301
331
|
this.logger.debug({ message: "Executing dml", obj: { sql: sql, params: namedParams } });
|
|
302
|
-
return [4 /*yield*/, this.
|
|
332
|
+
return [4 /*yield*/, this.withDeadline('spanner dml', sql, runner.runUpdate({
|
|
303
333
|
sql: sql,
|
|
304
334
|
params: namedParams === null || namedParams === void 0 ? void 0 : namedParams.params,
|
|
305
335
|
types: namedParams === null || namedParams === void 0 ? void 0 : namedParams.types,
|
|
336
|
+
// gRPC deadline: cancels the RPC on a dead channel so the transaction's run function
|
|
337
|
+
// settles and the library releases the session (see runDml).
|
|
338
|
+
gaxOptions: { timeout: this.operationDeadlineMs() },
|
|
306
339
|
}))];
|
|
307
340
|
case 2:
|
|
308
341
|
rowCount = (_b.sent())[0];
|
|
@@ -336,7 +369,7 @@ var SpannerDriver = /** @class */ (function () {
|
|
|
336
369
|
var _this = this;
|
|
337
370
|
return __generator(this, function (_a) {
|
|
338
371
|
switch (_a.label) {
|
|
339
|
-
case 0: return [4 /*yield*/, this.
|
|
372
|
+
case 0: return [4 /*yield*/, this.withDeadline('spanner transaction', '(runTransactionAsync)', this.getSpannerDb().runTransactionAsync(function (transaction) { return __awaiter(_this, void 0, void 0, function () {
|
|
340
373
|
var result, error_4;
|
|
341
374
|
return __generator(this, function (_a) {
|
|
342
375
|
switch (_a.label) {
|
|
@@ -345,7 +378,7 @@ var SpannerDriver = /** @class */ (function () {
|
|
|
345
378
|
return [4 /*yield*/, fn(transaction)];
|
|
346
379
|
case 1:
|
|
347
380
|
result = _a.sent();
|
|
348
|
-
return [4 /*yield*/,
|
|
381
|
+
return [4 /*yield*/, this.commit(transaction)];
|
|
349
382
|
case 2:
|
|
350
383
|
_a.sent();
|
|
351
384
|
return [2 /*return*/, result];
|
|
@@ -364,6 +397,23 @@ var SpannerDriver = /** @class */ (function () {
|
|
|
364
397
|
});
|
|
365
398
|
});
|
|
366
399
|
};
|
|
400
|
+
/**
|
|
401
|
+
* Deadline-bounded commit: a commit hanging on a dead channel would otherwise keep the
|
|
402
|
+
* transaction's run function pending forever, and with it the session (runTransactionAsync
|
|
403
|
+
* only releases the session once the run function settles).
|
|
404
|
+
*/
|
|
405
|
+
SpannerDriver.prototype.commit = function (transaction) {
|
|
406
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
407
|
+
return __generator(this, function (_a) {
|
|
408
|
+
switch (_a.label) {
|
|
409
|
+
case 0: return [4 /*yield*/, this.withDeadline('spanner commit', '(commit)', transaction.commit({ gaxOptions: { timeout: this.operationDeadlineMs() } }))];
|
|
410
|
+
case 1:
|
|
411
|
+
_a.sent();
|
|
412
|
+
return [2 /*return*/];
|
|
413
|
+
}
|
|
414
|
+
});
|
|
415
|
+
});
|
|
416
|
+
};
|
|
367
417
|
/**
|
|
368
418
|
* Release a transaction whose work errored. The client library's runner does NOT roll back on
|
|
369
419
|
* non-retryable errors — it just rethrows — so a thrown `fn` (e.g. an application rollback, or
|
|
@@ -372,8 +422,10 @@ var SpannerDriver = /** @class */ (function () {
|
|
|
372
422
|
* so one leaked transaction blocks every subsequent DDL with FAILED_PRECONDITION ("a
|
|
373
423
|
* read-write transaction is already in progress") — poisoning whole test runs. Rollback of an
|
|
374
424
|
* already-invalid transaction (e.g. ABORTED, about to be retried by the runner with a fresh
|
|
375
|
-
* transaction) is expected to fail; that failure is
|
|
376
|
-
* — the one that carries retry semantics —
|
|
425
|
+
* transaction, or one whose commit was already called) is expected to fail; that failure is
|
|
426
|
+
* logged at debug and swallowed so the ORIGINAL error — the one that carries retry semantics —
|
|
427
|
+
* always propagates. Deadline-bounded like commit: an unbounded rollback on a dead channel
|
|
428
|
+
* would keep the run function (and its session) pending forever.
|
|
377
429
|
*/
|
|
378
430
|
SpannerDriver.prototype.rollbackQuietly = function (transaction) {
|
|
379
431
|
return __awaiter(this, void 0, void 0, function () {
|
|
@@ -382,7 +434,7 @@ var SpannerDriver = /** @class */ (function () {
|
|
|
382
434
|
switch (_a.label) {
|
|
383
435
|
case 0:
|
|
384
436
|
_a.trys.push([0, 2, , 3]);
|
|
385
|
-
return [4 /*yield*/, transaction.rollback()];
|
|
437
|
+
return [4 /*yield*/, this.withDeadline('spanner rollback', '(rollback)', transaction.rollback({ timeout: this.operationDeadlineMs() }))];
|
|
386
438
|
case 1:
|
|
387
439
|
_a.sent();
|
|
388
440
|
return [3 /*break*/, 3];
|
|
@@ -396,28 +448,39 @@ var SpannerDriver = /** @class */ (function () {
|
|
|
396
448
|
});
|
|
397
449
|
};
|
|
398
450
|
/**
|
|
399
|
-
*
|
|
400
|
-
*
|
|
401
|
-
*
|
|
402
|
-
*
|
|
403
|
-
*
|
|
451
|
+
* The one choke point every query/dml/transaction op awaits through. Two jobs:
|
|
452
|
+
*
|
|
453
|
+
* 1. Stall diagnostics (2026-07-10 flow-hang investigation): logs ops still pending at 30s
|
|
454
|
+
* and 120s with the op and statement.
|
|
455
|
+
* 2. OP DEADLINE (2026-08-06 overnight wedge): an op that has not settled by
|
|
456
|
+
* `operationDeadlineMs` (default 60s) FAILS with an error naming the deadline instead of
|
|
457
|
+
* hanging forever on a dead gRPC channel. This race covers hangs the gRPC deadline cannot
|
|
458
|
+
* see (session-pool acquisition, library internals before the RPC starts); the
|
|
459
|
+
* wire-level cancellation + session return is the gRPC deadline attached per call
|
|
460
|
+
* (`gaxOptions.timeout`, same value) — see the call sites. Deadline failures feed the
|
|
461
|
+
* channel-death recycle counter; any success resets it.
|
|
404
462
|
*/
|
|
405
|
-
SpannerDriver.prototype.
|
|
463
|
+
SpannerDriver.prototype.withDeadline = function (op, sql, promise) {
|
|
406
464
|
var _this = this;
|
|
407
465
|
var _a, _b;
|
|
408
|
-
|
|
466
|
+
// Pool gauge (P4a): every op passes through here, so this is where waiting-on-the-pool
|
|
467
|
+
// becomes visible (throttled inside the monitor). The monitor exists by now — all ops
|
|
468
|
+
// require getSpannerDb() first.
|
|
469
|
+
SpannerDriver.LIVENESS_MONITOR.logPoolPressure();
|
|
470
|
+
var deadlineMs = this.operationDeadlineMs();
|
|
471
|
+
var generation = SpannerDriver.CLIENT_GENERATION;
|
|
409
472
|
var settled = false;
|
|
410
473
|
var logStall = function (afterMs) {
|
|
411
474
|
return _this.logger.error({
|
|
412
475
|
message: "Spanner op stalled: ".concat(op),
|
|
413
|
-
obj: { afterMs: afterMs, sql: String(sql).slice(0, 200) },
|
|
476
|
+
obj: { afterMs: afterMs, sql: String(sql).slice(0, 200), pool: SpannerDriver.LIVENESS_MONITOR.poolStats() },
|
|
414
477
|
});
|
|
415
478
|
};
|
|
416
479
|
var t1 = setTimeout(function () {
|
|
417
480
|
if (!settled) {
|
|
418
|
-
logStall(
|
|
481
|
+
logStall(30000);
|
|
419
482
|
}
|
|
420
|
-
},
|
|
483
|
+
}, 30000);
|
|
421
484
|
var t2 = setTimeout(function () {
|
|
422
485
|
if (!settled) {
|
|
423
486
|
logStall(120000);
|
|
@@ -425,12 +488,109 @@ var SpannerDriver = /** @class */ (function () {
|
|
|
425
488
|
}, 120000);
|
|
426
489
|
(_a = t1.unref) === null || _a === void 0 ? void 0 : _a.call(t1);
|
|
427
490
|
(_b = t2.unref) === null || _b === void 0 ? void 0 : _b.call(t2);
|
|
428
|
-
return Promise
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
491
|
+
return new Promise(function (resolve, reject) {
|
|
492
|
+
var _a;
|
|
493
|
+
var clear = function () {
|
|
494
|
+
settled = true;
|
|
495
|
+
clearTimeout(t1);
|
|
496
|
+
clearTimeout(t2);
|
|
497
|
+
clearTimeout(deadlineTimer);
|
|
498
|
+
};
|
|
499
|
+
var deadlineTimer = setTimeout(function () {
|
|
500
|
+
if (settled) {
|
|
501
|
+
return;
|
|
502
|
+
}
|
|
503
|
+
clear();
|
|
504
|
+
_this.logger.error({
|
|
505
|
+
message: "Spanner op exceeded its ".concat(deadlineMs, "ms deadline: ").concat(op, " \u2014 failing the op"),
|
|
506
|
+
obj: { sql: String(sql).slice(0, 200), pool: SpannerDriver.LIVENESS_MONITOR.poolStats() },
|
|
507
|
+
});
|
|
508
|
+
_this.recordDeadlineFailure(generation);
|
|
509
|
+
// Deliberately no grpc `code` on this error: the liveness monitor's probe/exit
|
|
510
|
+
// escalation stays owned by genuine grpc errors; hang-shaped death is owned by the
|
|
511
|
+
// recycle counter.
|
|
512
|
+
reject(new Error("Spanner op exceeded its ".concat(deadlineMs, "ms deadline: ").concat(op, " (configure via SpannerConfig.operationDeadlineMs)")));
|
|
513
|
+
}, deadlineMs);
|
|
514
|
+
(_a = deadlineTimer.unref) === null || _a === void 0 ? void 0 : _a.call(deadlineTimer);
|
|
515
|
+
Promise.resolve(promise).then(function (value) {
|
|
516
|
+
if (settled) {
|
|
517
|
+
return; // deadline already failed the caller; the library handles the late settle
|
|
518
|
+
}
|
|
519
|
+
clear();
|
|
520
|
+
_this.recordOpSuccess(generation);
|
|
521
|
+
resolve(value);
|
|
522
|
+
}, function (error) {
|
|
523
|
+
if (settled) {
|
|
524
|
+
return;
|
|
525
|
+
}
|
|
526
|
+
clear();
|
|
527
|
+
// A grpc DEADLINE_EXCEEDED (code 4) is the same dead-channel signal arriving via the
|
|
528
|
+
// per-call gRPC deadline — classification for the one counter, not a second path.
|
|
529
|
+
if ((error === null || error === void 0 ? void 0 : error.code) === 4) {
|
|
530
|
+
_this.recordDeadlineFailure(generation);
|
|
531
|
+
}
|
|
532
|
+
reject(error);
|
|
533
|
+
});
|
|
432
534
|
});
|
|
433
535
|
};
|
|
536
|
+
// ── Channel-death recycle (one owner for the process-wide client) ─────────
|
|
537
|
+
SpannerDriver.prototype.recordOpSuccess = function (generation) {
|
|
538
|
+
if (generation !== SpannerDriver.CLIENT_GENERATION) {
|
|
539
|
+
return; // outcome from a recycled client says nothing about the fresh channel
|
|
540
|
+
}
|
|
541
|
+
SpannerDriver.CONSECUTIVE_DEADLINE_FAILURES = 0;
|
|
542
|
+
};
|
|
543
|
+
SpannerDriver.prototype.recordDeadlineFailure = function (generation) {
|
|
544
|
+
if (generation !== SpannerDriver.CLIENT_GENERATION) {
|
|
545
|
+
return;
|
|
546
|
+
}
|
|
547
|
+
SpannerDriver.CONSECUTIVE_DEADLINE_FAILURES += 1;
|
|
548
|
+
if (SpannerDriver.CONSECUTIVE_DEADLINE_FAILURES < this.deadlineFailuresBeforeRecycle()) {
|
|
549
|
+
return;
|
|
550
|
+
}
|
|
551
|
+
// Reset BEFORE recycling: the counter and generation swap happen in this same synchronous
|
|
552
|
+
// frame, so a burst of ops all timing out together triggers exactly one recycle.
|
|
553
|
+
SpannerDriver.CONSECUTIVE_DEADLINE_FAILURES = 0;
|
|
554
|
+
this.recycleClient();
|
|
555
|
+
};
|
|
556
|
+
/**
|
|
557
|
+
* Drop the process-wide Spanner client so the next op builds a fresh client/channel — the
|
|
558
|
+
* categorical cure for a dead gRPC channel (Mac sleep, NAT drop) that deadlines every op.
|
|
559
|
+
* The old liveness monitor is stopped so its probe/exit escalation can't kill the process
|
|
560
|
+
* for a channel we just abandoned; LIVENESS_MONITOR itself stays pointed at it (stopped)
|
|
561
|
+
* until getSpannerDb() installs the new client's monitor, keeping in-flight ops' error
|
|
562
|
+
* paths callable.
|
|
563
|
+
*/
|
|
564
|
+
SpannerDriver.prototype.recycleClient = function () {
|
|
565
|
+
this.logger.error({
|
|
566
|
+
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"),
|
|
567
|
+
});
|
|
568
|
+
SpannerDriver.CLIENT_GENERATION += 1;
|
|
569
|
+
var oldMonitor = SpannerDriver.LIVENESS_MONITOR;
|
|
570
|
+
var oldDb = SpannerDriver.SPANNER_DB;
|
|
571
|
+
var oldSpanner = SpannerDriver.SPANNER;
|
|
572
|
+
SpannerDriver.SPANNER = undefined;
|
|
573
|
+
SpannerDriver.SPANNER_INSTANCE = undefined;
|
|
574
|
+
SpannerDriver.SPANNER_DB = undefined;
|
|
575
|
+
oldMonitor === null || oldMonitor === void 0 ? void 0 : oldMonitor.stop();
|
|
576
|
+
// Best-effort teardown of the old client: session deletes are themselves RPCs on the very
|
|
577
|
+
// channel we believe is dead — the recycle must not depend on them succeeding.
|
|
578
|
+
void (oldDb === null || oldDb === void 0 ? void 0 : oldDb.close().catch(function () { return undefined; }));
|
|
579
|
+
try {
|
|
580
|
+
oldSpanner === null || oldSpanner === void 0 ? void 0 : oldSpanner.close();
|
|
581
|
+
}
|
|
582
|
+
catch (_a) {
|
|
583
|
+
// already torn down
|
|
584
|
+
}
|
|
585
|
+
};
|
|
586
|
+
SpannerDriver.prototype.operationDeadlineMs = function () {
|
|
587
|
+
var _a;
|
|
588
|
+
return (_a = this.config.operationDeadlineMs) !== null && _a !== void 0 ? _a : 60000;
|
|
589
|
+
};
|
|
590
|
+
SpannerDriver.prototype.deadlineFailuresBeforeRecycle = function () {
|
|
591
|
+
var _a;
|
|
592
|
+
return (_a = this.config.deadlineFailuresBeforeRecycle) !== null && _a !== void 0 ? _a : 3;
|
|
593
|
+
};
|
|
434
594
|
/**
|
|
435
595
|
* Execute a schema write operation.
|
|
436
596
|
*/
|
|
@@ -467,6 +627,14 @@ var SpannerDriver = /** @class */ (function () {
|
|
|
467
627
|
});
|
|
468
628
|
});
|
|
469
629
|
};
|
|
630
|
+
/**
|
|
631
|
+
* Channel-death recycle accounting (2026-08-06 overnight wedge). Ops are tagged with the
|
|
632
|
+
* generation of the client they started on; only same-generation outcomes touch the counter,
|
|
633
|
+
* so a burst of deadline failures from the OLD (recycled) channel can never spuriously
|
|
634
|
+
* recycle the fresh one.
|
|
635
|
+
*/
|
|
636
|
+
SpannerDriver.CLIENT_GENERATION = 0;
|
|
637
|
+
SpannerDriver.CONSECUTIVE_DEADLINE_FAILURES = 0;
|
|
470
638
|
return SpannerDriver;
|
|
471
639
|
}());
|
|
472
640
|
exports.SpannerDriver = SpannerDriver;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpannerDriver.js","sourceRoot":"","sources":["../../src/SpannerDriver.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAiF;AACjF,oCAOuB;AAEvB,mEAAkE;AAClE,4CAA2C;AAE3C,qEAAoE;AACpE,uEAAsE;AACtE,iEAAgE;AAEhE;;GAEG;AACH;IASE,uBAAY,MAAqB,EAAE,QAAuC;QAJlE,WAAM,GAAG,IAAI,eAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;QAK3D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAEO,kCAAU,GAAlB;;QACE,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;YAC1B,0FAA0F;YAC1F,0FAA0F;YAC1F,4FAA4F;YAC5F,yFAAyF;YACzF,4FAA4F;YAC5F,0FAA0F;YAC1F,0FAA0F;YAC1F,2FAA2F;YAC3F,4FAA4F;YAC5F,oEAAoE;YACpE,IAAM,eAAe,GAAG,MAAM,CAAC,MAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,mCAAI,KAAM,CAAC,CAAC;YACrF,IAAM,SAAS,GACb,eAAe,GAAG,CAAC;gBACjB,CAAC,CAAC;oBACE,wBAAwB,EAAE,eAAe;oBACzC,2BAA2B,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,iCAAiC,IAAI,KAAM,CAAC;oBAC5F,qCAAqC,EAAE,CAAC;iBACzC;gBACH,CAAC,CAAC,EAAE,CAAC;YACT,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;gBAC9B,aAAa,CAAC,OAAO,GAAG,IAAI,iBAAO,CACjC,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAC3F,CAAC;aACH;iBAAM;gBACL,aAAa,CAAC,OAAO,GAAG,IAAI,iBAAO,YAAG,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,IAAK,SAAS,EAAG,CAAC;aACzF;SACF;QAED,OAAO,aAAa,CAAC,OAAO,CAAC;IAC/B,CAAC;IAEO,0CAAkB,GAA1B;QACE,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE;YACnC,aAAa,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;SACvF;QAED,OAAO,aAAa,CAAC,gBAAgB,CAAC;IACxC,CAAC;IAEO,oCAAY,GAApB;QACE,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;YAC7B,aAAa,CAAC,UAAU,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACxF,aAAa,CAAC,gBAAgB,GAAG,IAAI,+CAAsB,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC;SAC/F;QAED,OAAO,aAAa,CAAC,UAAU,CAAC;IAClC,CAAC;IAED,iCAAS,GAAT;QACE,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;IAClC,CAAC;IAED,uCAAe,GAAf;QACE,IAAM,iBAAiB,GAAG,IAAI,mDAAwB,EAAE,CAAC;QACzD,IAAM,gBAAgB,GAAG,IAAI,iDAAuB,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAM,cAAc,GAAG,IAAI,6CAAqB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9D,OAAO,IAAI,iBAAY,CAAC,IAAI,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAC;IACrF,CAAC;IAED;;;;;OAKG;IACH,qCAAa,GAAb,UAAc,SAAiB,EAAE,UAAkB;QACjD,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAA,gBAAW,EAAC,SAAS,CAAC,CAAC;QAChF,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAC,GAAG,IAAK,OAAA,GAAG,CAAC,IAAI,KAAK,UAAU,EAAvB,CAAuB,CAAC,CAAC;QAEnF,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,iBAAU,UAAU,sCAA4B,KAAK,CAAC,IAAI,CAAE,CAAC,CAAC;SAC/E;QAED,IAAM,IAAI,GAAG,IAAI,mDAAwB,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAElE,IAAI,CAAC,IAAI,EAAE;YACT,MAAM,IAAI,KAAK,CAAC,2CAAoC,UAAU,uBAAa,KAAK,CAAC,IAAI,CAAE,CAAC,CAAC;SAC1F;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,6CAAqB,GAArB,UAAsB,SAAiB,EAAE,UAAkB,EAAE,aAAsB;QACjF,IAAI,aAAa,EAAE;YACjB,OAAO,UAAU,CAAC;SACnB;QAED,IAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,KAAK,QAAQ,CAAC;QAE/E,IAAI,eAAe,EAAE;YACnB,OAAO,gBAAS,UAAU,MAAG,CAAC;SAC/B;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAEK,2CAAmB,GAAzB;;;;4BACM,qBAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAA;;wBAAzC,IAAI,SAAqC,EAAE;4BACzC,sBAAO;yBACR;wBAED,qBAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAA;;wBAAhE,SAAgE,CAAC;;;;;KAClE;IAEa,gCAAQ,GAAtB,UAAuB,YAAoB;;;;;4BACxB,qBAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,EAAA;;wBAAzE,MAAM,GAAI,CAAA,SAA+D,CAAA,GAAnE;wBACb,sBAAO,MAAM,EAAC;;;;KACf;IAED;;OAEG;IACG,gCAAQ,GAAd,UACE,iBAAsE,EACtE,WAAyB;;;;4BAElB,qBAAM,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,EAAA;4BAArF,sBAAO,SAA8E,EAAC;;;;KACvF;IAEa,oCAAY,GAA1B,UACE,iBAAsE,EACtE,MAA8B;;;;;;wBAExB,KAAuB,iBAAiB,CAAC;4BAC7C,SAAS,EAAE,IAAI;4BACf,cAAc,EAAE,IAAI;4BACpB,kBAAkB,EAAE,KAAK;4BACzB,mBAAmB,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;4BAClD,qBAAqB,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;yBAC7D,CAAC,EANM,GAAG,SAAA,EAAE,WAAW,iBAAA,CAMrB;wBAEG,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;;;;wBAGxC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,EAAE,EAAE,GAAG,KAAA,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;wBACtE,qBAAM,IAAI,CAAC,YAAY,CACpC,eAAe,EACf,GAAG,EACH,MAAM,CAAC,GAAG,CAAC;gCACT,GAAG,KAAA;gCACH,MAAM,EAAE,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,MAAM;gCAC3B,KAAK,EAAE,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,KAAK;6BAC1B,CAAC,CACH,EAAA;;wBARM,IAAI,GAAI,CAAA,SAQd,CAAA,GARU;wBASL,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,OAAS,CAAC;wBAC3E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;4BAChB,OAAO,EAAE,gBAAgB;4BACzB,GAAG,EAAE,EAAE,GAAG,KAAA,EAAE,UAAU,YAAA,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE;yBAChD,CAAC,CAAC;wBACH,sBAAO,IAAI,CAAC,GAAG,CAAC,UAAC,GAAG,IAAK,OAAA,GAAG,CAAC,MAAM,EAAE,EAAZ,CAAY,CAAC,EAAC;;;wBAEjC,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,OAAS,CAAC;wBAC3E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;4BAChB,OAAO,EAAE,6BAA6B;4BACtC,GAAG,EAAE,EAAE,GAAG,KAAA,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,OAAK,CAAC,OAAO,EAAE,UAAU,YAAA,EAAE;yBAC3E,CAAC,CAAC;wBACH,aAAa,CAAC,gBAAgB,CAAC,WAAW,CAAC,OAAK,CAAC,CAAC;wBAClD,MAAM,OAAK,CAAC;;;;;KAEf;IAED;;;;OAIG;IACG,8BAAM,GAAZ,UACE,iBAAoE,EACpE,WAAyB;;;;;;6BAErB,WAAW,EAAX,wBAAW;wBACN,qBAAM,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,WAAW,CAAC,EAAA;4BAA5D,sBAAO,SAAqD,EAAC;4BAKxD,qBAAM,IAAI,CAAC,YAAY,CAC5B,yBAAyB,EACzB,uBAAuB,EACvB,IAAI,CAAC,YAAY,EAAE,CAAC,mBAAmB,CAAC,UAAO,WAAW;;;;;;wCAErC,qBAAM,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,WAAW,CAAC,EAAA;;wCAAhE,QAAQ,GAAG,SAAqD;wCACtE,qBAAM,WAAW,CAAC,MAAM,EAAE,EAAA;;wCAA1B,SAA0B,CAAC;wCAC3B,sBAAO,QAAQ,EAAC;;;wCAEhB,qBAAM,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,EAAA;;wCAAvC,SAAuC,CAAC;wCACxC,MAAM,OAAK,CAAC;;;;6BAEf,CAAC,CACH,EAAA;;oBAfD,yFAAyF;oBACzF,wEAAwE;oBACxE,sBAAO,SAaN,EAAC;;;;KACH;IAEa,kCAAU,GAAxB,UACE,iBAAoE,EACpE,MAAmB;;;;;;wBAEb,KAAuB,iBAAiB,CAAC;4BAC7C,SAAS,EAAE,IAAI;4BACf,cAAc,EAAE,IAAI;4BACpB,kBAAkB,EAAE,KAAK;4BACzB,mBAAmB,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;yBACnD,CAAC,EALM,GAAG,SAAA,EAAE,WAAW,iBAAA,CAKrB;wBAEG,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;;;;wBAGxC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,EAAE,GAAG,KAAA,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;wBAChE,qBAAM,IAAI,CAAC,YAAY,CACxC,aAAa,EACb,GAAG,EACH,MAAM,CAAC,SAAS,CAAC;gCACf,GAAG,KAAA;gCACH,MAAM,EAAE,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,MAAM;gCAC3B,KAAK,EAAE,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,KAAK;6BAC1B,CAAC,CACH,EAAA;;wBARM,QAAQ,GAAI,CAAA,SAQlB,CAAA,GARc;wBAST,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,OAAS,CAAC;wBAC3E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;4BAChB,OAAO,EAAE,cAAc;4BACvB,GAAG,EAAE,EAAE,GAAG,KAAA,EAAE,UAAU,YAAA,EAAE,QAAQ,UAAA,EAAE;yBACnC,CAAC,CAAC;wBACH,sBAAO,QAAQ,EAAC;;;wBAEV,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,OAAS,CAAC;wBAC3E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;4BAChB,OAAO,EAAE,2BAA2B;4BACpC,GAAG,EAAE,EAAE,GAAG,KAAA,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,OAAK,CAAC,OAAO,EAAE,UAAU,YAAA,EAAE;yBAC3E,CAAC,CAAC;wBACH,aAAa,CAAC,gBAAgB,CAAC,WAAW,CAAC,OAAK,CAAC,CAAC;wBAClD,MAAM,OAAK,CAAC;;;;;KAEf;IAED;;;;OAIG;IACG,sCAAc,GAApB,UAAwB,EAA4C;;;;;4BAC3D,qBAAM,IAAI,CAAC,YAAY,CAC5B,qBAAqB,EACrB,uBAAuB,EACvB,IAAI,CAAC,YAAY,EAAE,CAAC,mBAAmB,CAAC,UAAO,WAAW;;;;;;wCAEvC,qBAAM,EAAE,CAAC,WAAW,CAAC,EAAA;;wCAA9B,MAAM,GAAG,SAAqB;wCACpC,qBAAM,WAAW,CAAC,MAAM,EAAE,EAAA;;wCAA1B,SAA0B,CAAC;wCAC3B,sBAAO,MAAM,EAAC;;;wCAEd,qBAAM,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,EAAA;;wCAAvC,SAAuC,CAAC;wCACxC,MAAM,OAAK,CAAC;;;;6BAEf,CAAC,CACH,EAAA;4BAbD,sBAAO,SAaN,EAAC;;;;KACH;IAED;;;;;;;;;;OAUG;IACW,uCAAe,GAA7B,UAA8B,WAAwB;;;;;;;wBAElD,qBAAM,WAAW,CAAC,QAAQ,EAAE,EAAA;;wBAA5B,SAA4B,CAAC;;;;wBAE7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,yCAAyC,EAAE,GAAG,EAAE,EAAE,aAAa,iBAAA,EAAE,EAAE,CAAC,CAAC;;;;;;KAErG;IAED;;;;;;OAMG;IACK,oCAAY,GAApB,UAAwB,EAAU,EAAE,GAAW,EAAE,OAAuB,EAAE,SAAkB;QAA5F,iBAwBC;;QAxByE,0BAAA,EAAA,iBAAkB;QAC1F,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAM,QAAQ,GAAG,UAAC,OAAe;YAC/B,OAAA,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC;gBAChB,OAAO,EAAE,8BAAuB,EAAE,CAAE;gBACpC,GAAG,EAAE,EAAE,OAAO,SAAA,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;aACjD,CAAC;QAHF,CAGE,CAAC;QACL,IAAM,EAAE,GAAG,UAAU,CAAC;YACpB,IAAI,CAAC,OAAO,EAAE;gBACZ,QAAQ,CAAC,SAAS,CAAC,CAAC;aACrB;QACH,CAAC,EAAE,SAAS,CAAC,CAAC;QACd,IAAM,EAAE,GAAG,UAAU,CAAC;YACpB,IAAI,CAAC,OAAO,EAAE;gBACZ,QAAQ,CAAC,MAAO,CAAC,CAAC;aACnB;QACH,CAAC,EAAE,MAAO,CAAC,CAAC;QACZ,MAAA,EAAE,CAAC,KAAK,kDAAI,CAAC;QACb,MAAA,EAAE,CAAC,KAAK,kDAAI,CAAC;QACb,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;YACtC,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,EAAE,CAAC,CAAC;YACjB,YAAY,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACG,uCAAe,GAArB,UAAsB,GAAW;;;;;;wBACzB,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;;;;wBAExC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,yBAAyB,EAAE,GAAG,EAAE,EAAE,GAAG,KAAA,EAAE,EAAE,CAAC,CAAC;wBACpD,qBAAM,IAAI,CAAC,YAAY,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,EAAA;;wBAAxD,SAAS,GAAI,CAAA,SAA2C,CAAA,GAA/C;wBAChB,qBAAM,SAAS,CAAC,OAAO,EAAE,EAAA;;wBAAzB,SAAyB,CAAC;wBACpB,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,OAAS,CAAC;wBAC3E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE,GAAG,EAAE,EAAE,GAAG,KAAA,EAAE,UAAU,YAAA,EAAE,EAAE,CAAC,CAAC;;;;wBAE7E,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,OAAS,CAAC;wBAC3E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;4BAChB,OAAO,EAAE,qCAAqC;4BAC9C,GAAG,EAAE,EAAE,GAAG,KAAA,EAAE,YAAY,EAAE,OAAK,CAAC,OAAO,EAAE,UAAU,YAAA,EAAE;yBACtD,CAAC,CAAC;wBACH,MAAM,OAAK,CAAC;;;;;KAEf;IACH,oBAAC;AAAD,CAAC,AA5VD,IA4VC;AA5VY,sCAAa"}
|
|
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"}
|
|
@@ -54,27 +54,65 @@ var SpannerLivenessMonitor = /** @class */ (function () {
|
|
|
54
54
|
this.db = db;
|
|
55
55
|
this.logger = new logger_1.Logger({ name: this.constructor.name });
|
|
56
56
|
this.checkInFlight = false;
|
|
57
|
+
this.stopped = false;
|
|
58
|
+
this.lastPoolPressureWarnMs = Number.NEGATIVE_INFINITY;
|
|
57
59
|
}
|
|
58
60
|
/** Attach the single 'error' listener; called once when the Database singleton is created. */
|
|
59
61
|
SpannerLivenessMonitor.prototype.start = function () {
|
|
60
62
|
var _this = this;
|
|
61
63
|
this.db.on('error', function (error) {
|
|
62
64
|
var _a;
|
|
65
|
+
if (_this.stopped) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
63
68
|
_this.logger.warn({
|
|
64
69
|
message: "Spanner session pool emitted a background error; verifying db connectivity",
|
|
65
|
-
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() },
|
|
66
71
|
});
|
|
67
72
|
void _this.verifyLiveness();
|
|
68
73
|
});
|
|
69
74
|
return this;
|
|
70
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
|
+
};
|
|
71
84
|
/** Called from driver catch blocks; probes only for connectivity-shaped errors. */
|
|
72
85
|
SpannerLivenessMonitor.prototype.reportError = function (error) {
|
|
73
|
-
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)) {
|
|
74
87
|
return;
|
|
75
88
|
}
|
|
76
89
|
void this.verifyLiveness();
|
|
77
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
|
+
};
|
|
78
116
|
// --- helpers last ---
|
|
79
117
|
SpannerLivenessMonitor.prototype.verifyLiveness = function () {
|
|
80
118
|
var _a;
|
|
@@ -97,6 +135,9 @@ var SpannerLivenessMonitor = /** @class */ (function () {
|
|
|
97
135
|
return [4 /*yield*/, this.sleep(SpannerLivenessMonitor.PROBE_DELAYS_MS[attempt])];
|
|
98
136
|
case 3:
|
|
99
137
|
_b.sent();
|
|
138
|
+
if (this.stopped) {
|
|
139
|
+
return [2 /*return*/]; // client recycled mid-cycle — this channel's fate no longer matters
|
|
140
|
+
}
|
|
100
141
|
_b.label = 4;
|
|
101
142
|
case 4:
|
|
102
143
|
_b.trys.push([4, 6, , 7]);
|
|
@@ -116,6 +157,9 @@ var SpannerLivenessMonitor = /** @class */ (function () {
|
|
|
116
157
|
attempt++;
|
|
117
158
|
return [3 /*break*/, 2];
|
|
118
159
|
case 8:
|
|
160
|
+
if (this.stopped) {
|
|
161
|
+
return [2 /*return*/];
|
|
162
|
+
}
|
|
119
163
|
this.logger.error({
|
|
120
164
|
message: "Db unreachable after sustained probing; exiting restart-requested (code ".concat(RESTART_REQUEST_EXIT_CODE, ") so supervision respawns into a valid state"),
|
|
121
165
|
});
|
|
@@ -154,6 +198,8 @@ var SpannerLivenessMonitor = /** @class */ (function () {
|
|
|
154
198
|
SpannerLivenessMonitor.PROBE_TIMEOUT_MS = 10000;
|
|
155
199
|
/** delay before each attempt; 5 attempts spanning ~2 min (fast failures) to ~4.5 min (30s-deadline failures) */
|
|
156
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;
|
|
157
203
|
return SpannerLivenessMonitor;
|
|
158
204
|
}());
|
|
159
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;;;;;;;GAOG;AACH,IAAM,yBAAyB,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"SpannerLivenessMonitor.js","sourceRoot":"","sources":["../../src/SpannerLivenessMonitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionPoolExhaustion.test.d.ts","sourceRoot":"","sources":["../../test/SessionPoolExhaustion.test.ts"],"names":[],"mappings":"AAMA,OAAO,yBAAyB,CAAC"}
|