summaryrefslogtreecommitdiff
path: root/src/mongo/db/s/resharding/resharding_donor_recipient_common.cpp
diff options
context:
space:
mode:
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.cpp9
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;
}