summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierlauro Sciarelli <pierlauro.sciarelli@mongodb.com>2021-12-24 08:50:15 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-12-24 15:04:28 +0000
commit75efc544765889b9b9e7aae6c31a6cb0753853f8 (patch)
tree56f90df403123aa4c5f4aa0667182cd3817ad375
parent4197f4ef7aae6906bd8f14ba86035881b7e47b3f (diff)
downloadmongo-75efc544765889b9b9e7aae6c31a6cb0753853f8.tar.gz
SERVER-62243 Wait for vector clock document majority-commit without timeout
-rw-r--r--src/mongo/db/persistent_task_store.h28
-rw-r--r--src/mongo/db/persistent_task_store_test.cpp21
-rw-r--r--src/mongo/db/s/migration_coordinator.cpp2
-rw-r--r--src/mongo/db/s/migration_destination_manager.cpp6
-rw-r--r--src/mongo/db/s/migration_util.cpp2
-rw-r--r--src/mongo/db/s/migration_util.h2
-rw-r--r--src/mongo/db/s/rename_collection_participant_service.cpp6
-rw-r--r--src/mongo/db/s/sharding_ddl_coordinator.h4
-rw-r--r--src/mongo/db/vector_clock_mongod.cpp2
9 files changed, 45 insertions, 28 deletions
diff --git a/src/mongo/db/persistent_task_store.h b/src/mongo/db/persistent_task_store.h
index cef18c359c4..eb96a10ef39 100644
--- a/src/mongo/db/persistent_task_store.h
+++ b/src/mongo/db/persistent_task_store.h
@@ -45,11 +45,16 @@ using namespace fmt::literals;
namespace WriteConcerns {
-const WriteConcernOptions kMajorityWriteConcern{WriteConcernOptions::kMajority,
- WriteConcernOptions::SyncMode::UNSET,
- WriteConcernOptions::kWriteConcernTimeoutSharding};
+const WriteConcernOptions kMajorityWriteConcernShardingTimeout{
+ WriteConcernOptions::kMajority,
+ WriteConcernOptions::SyncMode::UNSET,
+ WriteConcernOptions::kWriteConcernTimeoutSharding};
-}
+const WriteConcernOptions kMajorityWriteConcernNoTimeout{WriteConcernOptions::kMajority,
+ WriteConcernOptions::SyncMode::UNSET,
+ WriteConcernOptions::kNoTimeout};
+
+} // namespace WriteConcerns
template <typename T>
class PersistentTaskStore {
@@ -61,7 +66,8 @@ public:
*/
void add(OperationContext* opCtx,
const T& task,
- const WriteConcernOptions& writeConcern = WriteConcerns::kMajorityWriteConcern) {
+ const WriteConcernOptions& writeConcern =
+ WriteConcerns::kMajorityWriteConcernShardingTimeout) {
DBDirectClient dbClient(opCtx);
const auto commandResponse = dbClient.runCommand([&] {
@@ -85,7 +91,8 @@ public:
void update(OperationContext* opCtx,
Query query,
const BSONObj& update,
- const WriteConcernOptions& writeConcern = WriteConcerns::kMajorityWriteConcern) {
+ const WriteConcernOptions& writeConcern =
+ WriteConcerns::kMajorityWriteConcernShardingTimeout) {
_update(opCtx, std::move(query), update, /* upsert */ false, writeConcern);
}
@@ -96,7 +103,8 @@ public:
void upsert(OperationContext* opCtx,
Query query,
const BSONObj& update,
- const WriteConcernOptions& writeConcern = WriteConcerns::kMajorityWriteConcern) {
+ const WriteConcernOptions& writeConcern =
+ WriteConcerns::kMajorityWriteConcernShardingTimeout) {
_update(opCtx, std::move(query), update, /* upsert */ true, writeConcern);
}
@@ -105,7 +113,8 @@ public:
*/
void remove(OperationContext* opCtx,
Query query,
- const WriteConcernOptions& writeConcern = WriteConcerns::kMajorityWriteConcern) {
+ const WriteConcernOptions& writeConcern =
+ WriteConcerns::kMajorityWriteConcernShardingTimeout) {
DBDirectClient dbClient(opCtx);
auto commandResponse = dbClient.runCommand([&] {
@@ -168,7 +177,8 @@ private:
Query query,
const BSONObj& update,
bool upsert,
- const WriteConcernOptions& writeConcern = WriteConcerns::kMajorityWriteConcern) {
+ const WriteConcernOptions& writeConcern =
+ WriteConcerns::kMajorityWriteConcernShardingTimeout) {
DBDirectClient dbClient(opCtx);
auto commandResponse = dbClient.runCommand([&] {
diff --git a/src/mongo/db/persistent_task_store_test.cpp b/src/mongo/db/persistent_task_store_test.cpp
index a8167ac9dbb..2fe0ec23271 100644
--- a/src/mongo/db/persistent_task_store_test.cpp
+++ b/src/mongo/db/persistent_task_store_test.cpp
@@ -233,12 +233,13 @@ TEST_F(PersistentTaskStoreTest, TestUpsert) {
ASSERT_EQ(store.count(opCtx, query), 0);
// Test that an attempt to upsert from the update command throws an error.
- ASSERT_THROWS_CODE(store.update(opCtx, query, taskBson, WriteConcerns::kMajorityWriteConcern),
- DBException,
- ErrorCodes::NoMatchingDocument);
+ ASSERT_THROWS_CODE(
+ store.update(opCtx, query, taskBson, WriteConcerns::kMajorityWriteConcernShardingTimeout),
+ DBException,
+ ErrorCodes::NoMatchingDocument);
// Test that the document is created when upserted.
- store.upsert(opCtx, query, taskBson, WriteConcerns::kMajorityWriteConcern);
+ store.upsert(opCtx, query, taskBson, WriteConcerns::kMajorityWriteConcernShardingTimeout);
ASSERT_EQ(store.count(opCtx, query), 1);
@@ -249,15 +250,19 @@ TEST_F(PersistentTaskStoreTest, TestUpsert) {
});
// Verify that updates happen as expected with upsert and update
- store.upsert(
- opCtx, query, BSON("$inc" << BSON("min" << 1)), WriteConcerns::kMajorityWriteConcern);
+ store.upsert(opCtx,
+ query,
+ BSON("$inc" << BSON("min" << 1)),
+ WriteConcerns::kMajorityWriteConcernShardingTimeout);
store.forEach(opCtx, query, [&](const TestTask& t) {
ASSERT_EQ(t.min, 1);
return true;
});
- store.update(
- opCtx, query, BSON("$inc" << BSON("min" << 1)), WriteConcerns::kMajorityWriteConcern);
+ store.update(opCtx,
+ query,
+ BSON("$inc" << BSON("min" << 1)),
+ WriteConcerns::kMajorityWriteConcernShardingTimeout);
store.forEach(opCtx, query, [&](const TestTask& t) {
ASSERT_EQ(t.min, 2);
return true;
diff --git a/src/mongo/db/s/migration_coordinator.cpp b/src/mongo/db/s/migration_coordinator.cpp
index 4cc266fa0e3..161fdabf407 100644
--- a/src/mongo/db/s/migration_coordinator.cpp
+++ b/src/mongo/db/s/migration_coordinator.cpp
@@ -122,7 +122,7 @@ void MigrationCoordinator::startMigration(OperationContext* opCtx) {
: CleanWhenEnum::kDelayed);
donorDeletionTask.setPending(true);
migrationutil::persistRangeDeletionTaskLocally(
- opCtx, donorDeletionTask, WriteConcerns::kMajorityWriteConcern);
+ opCtx, donorDeletionTask, WriteConcerns::kMajorityWriteConcernShardingTimeout);
}
void MigrationCoordinator::setMigrationDecision(DecisionEnum decision) {
diff --git a/src/mongo/db/s/migration_destination_manager.cpp b/src/mongo/db/s/migration_destination_manager.cpp
index 2c895d38c89..e01111db583 100644
--- a/src/mongo/db/s/migration_destination_manager.cpp
+++ b/src/mongo/db/s/migration_destination_manager.cpp
@@ -1068,8 +1068,10 @@ void MigrationDestinationManager::_migrateDriver(OperationContext* outerOpCtx) {
WriteConcernResult ignoreResult;
auto latestOpTime =
repl::ReplClientInfo::forClient(outerOpCtx->getClient()).getLastOp();
- uassertStatusOK(waitForWriteConcern(
- outerOpCtx, latestOpTime, WriteConcerns::kMajorityWriteConcern, &ignoreResult));
+ uassertStatusOK(waitForWriteConcern(outerOpCtx,
+ latestOpTime,
+ WriteConcerns::kMajorityWriteConcernShardingTimeout,
+ &ignoreResult));
});
timing.done(3);
diff --git a/src/mongo/db/s/migration_util.cpp b/src/mongo/db/s/migration_util.cpp
index ced6c1bc2a4..1e8d23c6941 100644
--- a/src/mongo/db/s/migration_util.cpp
+++ b/src/mongo/db/s/migration_util.cpp
@@ -515,7 +515,7 @@ void resubmitRangeDeletionsOnStepUp(ServiceContext* serviceContext) {
void dropRangeDeletionsCollection(OperationContext* opCtx) {
DBDirectClient client(opCtx);
client.dropCollection(NamespaceString::kRangeDeletionNamespace.toString(),
- WriteConcerns::kMajorityWriteConcern);
+ kMajorityWriteConcern);
}
template <typename Callable>
diff --git a/src/mongo/db/s/migration_util.h b/src/mongo/db/s/migration_util.h
index 865056b36a3..d779fd3779e 100644
--- a/src/mongo/db/s/migration_util.h
+++ b/src/mongo/db/s/migration_util.h
@@ -163,7 +163,7 @@ void persistAbortDecision(OperationContext* opCtx,
void deleteRangeDeletionTaskLocally(
OperationContext* opCtx,
const UUID& deletionTaskId,
- const WriteConcernOptions& writeConcern = WriteConcerns::kMajorityWriteConcern);
+ const WriteConcernOptions& writeConcern = WriteConcerns::kMajorityWriteConcernShardingTimeout);
/**
* Deletes the range deletion task document with the specified id from config.rangeDeletions on the
diff --git a/src/mongo/db/s/rename_collection_participant_service.cpp b/src/mongo/db/s/rename_collection_participant_service.cpp
index 568534c83cd..62da2326850 100644
--- a/src/mongo/db/s/rename_collection_participant_service.cpp
+++ b/src/mongo/db/s/rename_collection_participant_service.cpp
@@ -198,12 +198,12 @@ void RenameParticipantInstance::_enterPhase(Phase newPhase) {
PersistentTaskStore<StateDoc> store(NamespaceString::kShardingRenameParticipantsNamespace);
if (_doc.getPhase() == Phase::kUnset) {
- store.add(opCtx.get(), newDoc, WriteConcerns::kMajorityWriteConcern);
+ store.add(opCtx.get(), newDoc, WriteConcerns::kMajorityWriteConcernShardingTimeout);
} else {
store.update(opCtx.get(),
BSON(StateDoc::kFromNssFieldName << fromNss().ns()),
newDoc.toBSON(),
- WriteConcerns::kMajorityWriteConcern);
+ WriteConcerns::kMajorityWriteConcernShardingTimeout);
}
_doc = std::move(newDoc);
@@ -219,7 +219,7 @@ void RenameParticipantInstance::_removeStateDocument(OperationContext* opCtx) {
PersistentTaskStore<StateDoc> store(NamespaceString::kShardingRenameParticipantsNamespace);
store.remove(opCtx,
BSON(StateDoc::kFromNssFieldName << fromNss().ns()),
- WriteConcerns::kMajorityWriteConcern);
+ WriteConcerns::kMajorityWriteConcernShardingTimeout);
_doc = {};
}
diff --git a/src/mongo/db/s/sharding_ddl_coordinator.h b/src/mongo/db/s/sharding_ddl_coordinator.h
index 65aef665c81..d554baa0426 100644
--- a/src/mongo/db/s/sharding_ddl_coordinator.h
+++ b/src/mongo/db/s/sharding_ddl_coordinator.h
@@ -129,7 +129,7 @@ protected:
auto opCtx = cc().makeOperationContext();
PersistentTaskStore<StateDoc> store(NamespaceString::kShardingDDLCoordinatorsNamespace);
- store.add(opCtx.get(), newDoc, WriteConcerns::kMajorityWriteConcern);
+ store.add(opCtx.get(), newDoc, WriteConcerns::kMajorityWriteConcernShardingTimeout);
return std::move(newDoc);
}
@@ -141,7 +141,7 @@ protected:
store.update(opCtx,
BSON(StateDoc::kIdFieldName << newDoc.getId().toBSON()),
newDoc.toBSON(),
- WriteConcerns::kMajorityWriteConcern);
+ WriteConcerns::kMajorityWriteConcernShardingTimeout);
return std::move(newDoc);
}
diff --git a/src/mongo/db/vector_clock_mongod.cpp b/src/mongo/db/vector_clock_mongod.cpp
index 77fc8caa5a9..45b8a5ebb5a 100644
--- a/src/mongo/db/vector_clock_mongod.cpp
+++ b/src/mongo/db/vector_clock_mongod.cpp
@@ -350,7 +350,7 @@ Future<void> VectorClockMongoD::_doWhileQueueNotEmptyOrError(ServiceContext* ser
store.upsert(opCtx,
QUERY(VectorClockDocument::k_idFieldName << vcd.get_id()),
vcd.toBSON(),
- WriteConcerns::kMajorityWriteConcern);
+ WriteConcerns::kMajorityWriteConcernNoTimeout);
return vectorTime;
})
.getAsync([this, promise = std::move(p)](StatusWith<VectorTime> swResult) mutable {