diff options
author | Pierlauro Sciarelli <pierlauro.sciarelli@mongodb.com> | 2021-12-24 08:50:15 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-12-24 15:04:28 +0000 |
commit | 75efc544765889b9b9e7aae6c31a6cb0753853f8 (patch) | |
tree | 56f90df403123aa4c5f4aa0667182cd3817ad375 | |
parent | 4197f4ef7aae6906bd8f14ba86035881b7e47b3f (diff) | |
download | mongo-75efc544765889b9b9e7aae6c31a6cb0753853f8.tar.gz |
SERVER-62243 Wait for vector clock document majority-commit without timeout
-rw-r--r-- | src/mongo/db/persistent_task_store.h | 28 | ||||
-rw-r--r-- | src/mongo/db/persistent_task_store_test.cpp | 21 | ||||
-rw-r--r-- | src/mongo/db/s/migration_coordinator.cpp | 2 | ||||
-rw-r--r-- | src/mongo/db/s/migration_destination_manager.cpp | 6 | ||||
-rw-r--r-- | src/mongo/db/s/migration_util.cpp | 2 | ||||
-rw-r--r-- | src/mongo/db/s/migration_util.h | 2 | ||||
-rw-r--r-- | src/mongo/db/s/rename_collection_participant_service.cpp | 6 | ||||
-rw-r--r-- | src/mongo/db/s/sharding_ddl_coordinator.h | 4 | ||||
-rw-r--r-- | src/mongo/db/vector_clock_mongod.cpp | 2 |
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 { |