Skip to content

Commit bb3e5ba

Browse files
committed
fix(NODE-3688): remove wire version check
1 parent 52d9cf1 commit bb3e5ba

File tree

6 files changed

+11
-22
lines changed

6 files changed

+11
-22
lines changed

src/cmap/connect.ts

+1-4
Original file line numberDiff line numberDiff line change
@@ -186,10 +186,7 @@ function performInitialHandshake(
186186
}
187187
provider.auth(authContext, err => {
188188
if (err) {
189-
if (
190-
err instanceof MongoError &&
191-
needsRetryableWriteLabel(err, response.maxWireVersion)
192-
) {
189+
if (err instanceof MongoError && needsRetryableWriteLabel(err)) {
193190
err.addErrorLabel(MongoErrorLabel.RetryableWriteError);
194191
}
195192
return callback(err);

src/error.ts

+4-8
Original file line numberDiff line numberDiff line change
@@ -743,18 +743,14 @@ const RETRYABLE_WRITE_ERROR_CODES = new Set<number>([
743743
MONGODB_ERROR_CODES.ExceededTimeLimit
744744
]);
745745

746-
export function needsRetryableWriteLabel(error: Error, maxWireVersion: number): boolean {
747-
// pre-4.4 server, then the driver adds an error label for every valid case
748-
// execute operation will only inspect the label, code/message logic is handled here
746+
export function needsRetryableWriteLabel(error: Error): boolean {
747+
// Network errors are always retryable.
749748
if (error instanceof MongoNetworkError) {
750749
return true;
751750
}
752751

753-
if (
754-
maxWireVersion >= 9 ||
755-
(error instanceof MongoError && error.hasErrorLabel(MongoErrorLabel.RetryableWriteError))
756-
) {
757-
// If we already have the error label no need to add it again. 4.4+ servers add the label.
752+
// We don't need to apply the label if it's already there.
753+
if (error instanceof MongoError && error.hasErrorLabel(MongoErrorLabel.RetryableWriteError)) {
758754
return false;
759755
}
760756

src/sdam/server.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -554,7 +554,7 @@ function makeOperationHandler(
554554
} else {
555555
if (
556556
(isRetryableWritesEnabled(server.s.topology) || isTransactionCommand(cmd)) &&
557-
needsRetryableWriteLabel(error, maxWireVersion(server)) &&
557+
needsRetryableWriteLabel(error) &&
558558
!inActiveTransaction(session, cmd)
559559
) {
560560
error.addErrorLabel(MongoErrorLabel.RetryableWriteError);

test/spec/retryable-writes/unified/handshakeError.json

+1-4
Original file line numberDiff line numberDiff line change
@@ -181,10 +181,7 @@
181181
"saslContinue",
182182
"ping"
183183
],
184-
"errorCode": 91,
185-
"errorLabels": [
186-
"RetryableWriteError"
187-
]
184+
"errorCode": 91
188185
}
189186
}
190187
}

test/spec/retryable-writes/unified/handshakeError.yml

-1
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,6 @@ tests:
9494
data:
9595
failCommands: [saslContinue, ping]
9696
errorCode: 91 # ShutdownInProgress
97-
errorLabels: ["RetryableWriteError"]
9897
- name: runCommand
9998
object: *database0
10099
arguments:

test/unit/error.test.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -449,8 +449,8 @@ describe('MongoErrors', () => {
449449
maxWireVersion: BELOW_4_4
450450
},
451451
{
452-
description: 'a MongoWriteConcernError with a retryable code above server 4.4',
453-
result: false,
452+
description: 'a MongoWriteConcernError with a retryable code but no label above 4.4',
453+
result: true,
454454
error: new MongoWriteConcernError({}, { code: 262 }),
455455
maxWireVersion: ABOVE_4_4
456456
},
@@ -485,9 +485,9 @@ describe('MongoErrors', () => {
485485
maxWireVersion: ABOVE_4_4
486486
}
487487
];
488-
for (const { description, result, error, maxWireVersion } of tests) {
488+
for (const { description, result, error } of tests) {
489489
it(`${description} ${result ? 'needs' : 'does not need'} a retryable write label`, () => {
490-
expect(needsRetryableWriteLabel(error, maxWireVersion)).to.be.equal(result);
490+
expect(needsRetryableWriteLabel(error)).to.be.equal(result);
491491
});
492492
}
493493
});

0 commit comments

Comments
 (0)