diff options
author | Randolph Tan <randolph@10gen.com> | 2020-02-27 13:25:56 -0500 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-03-02 22:29:50 +0000 |
commit | 3a537be6918cff310e2a3041e7400918adeb9601 (patch) | |
tree | ce440f607987b967147a1cedef668253c7b8d44b /src | |
parent | fa5f8749a13d5af153b0259a445abb57bdfcc538 (diff) | |
download | mongo-3a537be6918cff310e2a3041e7400918adeb9601.tar.gz |
SERVER-46383 wrap remote call in advanceTransactionOnRecipient with retryIdempotentWorkUntilSuccess
Diffstat (limited to 'src')
-rw-r--r-- | src/mongo/db/s/migration_util.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/mongo/db/s/migration_util.cpp b/src/mongo/db/s/migration_util.cpp index 97638def3e7..09ebea38a8f 100644 --- a/src/mongo/db/s/migration_util.cpp +++ b/src/mongo/db/s/migration_util.cpp @@ -87,6 +87,8 @@ MONGO_FAIL_POINT_DEFINE(hangInReadyRangeDeletionOnRecipientInterruptible); MONGO_FAIL_POINT_DEFINE(hangInReadyRangeDeletionOnRecipientThenSimulateErrorUninterruptible); MONGO_FAIL_POINT_DEFINE(hangInReadyRangeDeletionLocallyInterruptible); MONGO_FAIL_POINT_DEFINE(hangInReadyRangeDeletionLocallyThenSimulateErrorUninterruptible); +MONGO_FAIL_POINT_DEFINE(hangInAdvanceTxnNumInterruptible); +MONGO_FAIL_POINT_DEFINE(hangInAdvanceTxnNumThenSimulateErrorUninterruptible); const char kSourceShard[] = "source"; const char kDestinationShard[] = "destination"; @@ -622,7 +624,18 @@ void advanceTransactionOnRecipient(OperationContext* opCtx, auto passthroughFields = BSON(WriteConcernOptions::kWriteConcernField << WriteConcernOptions::Majority << "lsid" << lsid.toBSON() << "txnNumber" << currentTxnNumber + 1); - sendToRecipient(opCtx, recipientId, updateOp, passthroughFields); + + retryIdempotentWorkUntilSuccess( + opCtx, "advance migration txn number", [&](OperationContext* newOpCtx) { + hangInAdvanceTxnNumInterruptible.pauseWhileSet(newOpCtx); + sendToRecipient(newOpCtx, recipientId, updateOp, passthroughFields); + + if (hangInAdvanceTxnNumThenSimulateErrorUninterruptible.shouldFail()) { + hangInAdvanceTxnNumThenSimulateErrorUninterruptible.pauseWhileSet(newOpCtx); + uasserted(ErrorCodes::InternalError, + "simulate an error response when initiating range deletion locally"); + } + }); } void markAsReadyRangeDeletionTaskLocally(OperationContext* opCtx, const UUID& migrationId) { |