@tc-libs/retry-policy 5.9.2 → 5.9.4
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/package.json
CHANGED
|
@@ -7,6 +7,7 @@ export type TxRetryOptions = {
|
|
|
7
7
|
};
|
|
8
8
|
export declare class RetryPolicyMongoService {
|
|
9
9
|
runInTransactionWithRetry<T>(session: ClientSession, work: (session: ClientSession) => Promise<T>, opts?: TxRetryOptions): Promise<T>;
|
|
10
|
+
private _commitWithRetry;
|
|
10
11
|
private _isRetryableMongoError;
|
|
11
12
|
private computeDelay;
|
|
12
13
|
private sleep;
|
|
@@ -24,8 +24,9 @@ let RetryPolicyMongoService = class RetryPolicyMongoService {
|
|
|
24
24
|
await session.startTransaction();
|
|
25
25
|
}
|
|
26
26
|
const result = await work(session);
|
|
27
|
-
//
|
|
28
|
-
|
|
27
|
+
// BRG-37 (CONC-10): con UnknownTransactionCommitResult il commit può essere già avvenuto. Come
|
|
28
|
+
// session.withTransaction del driver si ritenta solo il commit: rieseguire work duplicherebbe le scritture
|
|
29
|
+
await this._commitWithRetry(session, maxRetries, baseDelayMs, maxDelayMs, jitter);
|
|
29
30
|
return result;
|
|
30
31
|
}
|
|
31
32
|
catch (err) {
|
|
@@ -49,6 +50,30 @@ let RetryPolicyMongoService = class RetryPolicyMongoService {
|
|
|
49
50
|
}
|
|
50
51
|
}
|
|
51
52
|
}
|
|
53
|
+
// Commit ritentato finché l'esito resta sconosciuto, tranne con MaxTimeMSExpired (code 50), come il driver
|
|
54
|
+
async _commitWithRetry(session, maxRetries, baseDelayMs, maxDelayMs, jitter) {
|
|
55
|
+
let attempt = 0;
|
|
56
|
+
while (true) {
|
|
57
|
+
try {
|
|
58
|
+
await session.commitTransaction();
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
const e = err;
|
|
63
|
+
const labels = Array.isArray(e?.errorLabels)
|
|
64
|
+
? e.errorLabels
|
|
65
|
+
: [];
|
|
66
|
+
if (!labels.includes('UnknownTransactionCommitResult') ||
|
|
67
|
+
e?.code === 50 ||
|
|
68
|
+
attempt >= maxRetries)
|
|
69
|
+
throw err;
|
|
70
|
+
attempt++;
|
|
71
|
+
await this.sleep(this.computeDelay(attempt, baseDelayMs, maxDelayMs, jitter));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Errori per cui si riesegue l'intera transazione. UnknownTransactionCommitResult non c'è: lo gestisce
|
|
76
|
+
// _commitWithRetry, e se resta dopo i tentativi l'errore si rilancia senza rieseguire work (BRG-37)
|
|
52
77
|
_isRetryableMongoError(err) {
|
|
53
78
|
const e = err;
|
|
54
79
|
// Driver/Session labels
|
|
@@ -57,8 +82,7 @@ let RetryPolicyMongoService = class RetryPolicyMongoService {
|
|
|
57
82
|
const msg = String(e?.message ?? '');
|
|
58
83
|
const looksLikeWriteConflict = msg.includes('Write conflict') || msg.includes('WriteConflict');
|
|
59
84
|
const transientTxn = labels.includes('TransientTransactionError');
|
|
60
|
-
|
|
61
|
-
return (isWriteConflict || looksLikeWriteConflict || transientTxn || unknownCommit);
|
|
85
|
+
return isWriteConflict || looksLikeWriteConflict || transientTxn;
|
|
62
86
|
}
|
|
63
87
|
computeDelay(attempt, base, max, jitter) {
|
|
64
88
|
const raw = Math.min(max, base * Math.pow(2, attempt - 1));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry-policy.mongo.service.js","sourceRoot":"","sources":["../../../../packages/retry-policy/src/retry-policy.mongo.service.ts"],"names":[],"mappings":";;;;AAAA,2CAA4C;AAE5C,qCAA2C;AAUpC,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAClC,KAAK,CAAC,yBAAyB,CAC7B,OAAsB,EACtB,IAA4C,EAC5C,OAAuB,EAAE;QAEzB;;;;;;;;WAQG;QACH,MAAM,EACJ,UAAU,GAAG,CAAC,EACd,WAAW,GAAG,EAAE,EAChB,UAAU,GAAG,IAAI,EACjB,MAAM,GAAG,IAAI,GACd,GAAG,IAAI,CAAC;QAET,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,yDAAyD;gBACzD,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;oBAC7B,MAAM,OAAO,CAAC,gBAAgB,EAAE,CAAC;gBACnC,CAAC;gBAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;gBAEnC,
|
|
1
|
+
{"version":3,"file":"retry-policy.mongo.service.js","sourceRoot":"","sources":["../../../../packages/retry-policy/src/retry-policy.mongo.service.ts"],"names":[],"mappings":"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"}
|