diff options
Diffstat (limited to 'src/mongo/db/s/resharding/resharding_donor_recipient_common.cpp')
-rw-r--r-- | src/mongo/db/s/resharding/resharding_donor_recipient_common.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/mongo/db/s/resharding/resharding_donor_recipient_common.cpp b/src/mongo/db/s/resharding/resharding_donor_recipient_common.cpp index 75521306201..0ae230e4d90 100644 --- a/src/mongo/db/s/resharding/resharding_donor_recipient_common.cpp +++ b/src/mongo/db/s/resharding/resharding_donor_recipient_common.cpp @@ -110,6 +110,15 @@ void processReshardingFieldsForDonorCollection(OperationContext* opCtx, ReshardingDonorDocument>( opCtx, reshardingFields.getReshardingUUID())) { donorStateMachine->get()->onReshardingFieldsChanges(opCtx, reshardingFields); + + const auto coordinatorState = reshardingFields.getState(); + if (coordinatorState == CoordinatorStateEnum::kBlockingWrites) { + (*donorStateMachine)->awaitCriticalSectionAcquired().wait(opCtx); + } else if (coordinatorState == CoordinatorStateEnum::kCommitting) { + (*donorStateMachine)->awaitCriticalSectionAcquired().wait(opCtx); + (*donorStateMachine)->awaitCriticalSectionPromoted().wait(opCtx); + } + return; } |