@tc-libs/retry-policy 5.9.3 → 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tc-libs/retry-policy",
3
- "version": "5.9.3",
3
+ "version": "5.9.4",
4
4
  "dependencies": {
5
5
  "mongodb": "6.15.0",
6
6
  "tslib": "^2.8.1"
@@ -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
- // Commit: può fallire con UnknownTransactionCommitResult → retry
28
- await session.commitTransaction();
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
- const unknownCommit = labels.includes('UnknownTransactionCommitResult');
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":"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"}
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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"}