diff options
-rw-r--r-- | src/mongo/db/s/create_collection_coordinator.cpp | 18 | ||||
-rw-r--r-- | src/mongo/db/s/create_collection_coordinator.h | 4 | ||||
-rw-r--r-- | src/mongo/db/s/drop_collection_coordinator.cpp | 18 | ||||
-rw-r--r-- | src/mongo/db/s/drop_collection_coordinator.h | 3 | ||||
-rw-r--r-- | src/mongo/db/s/drop_database_coordinator.cpp | 18 | ||||
-rw-r--r-- | src/mongo/db/s/drop_database_coordinator.h | 3 | ||||
-rw-r--r-- | src/mongo/db/s/rename_collection_coordinator.cpp | 32 | ||||
-rw-r--r-- | src/mongo/db/s/rename_collection_coordinator.h | 3 | ||||
-rw-r--r-- | src/mongo/db/s/sharding_ddl_coordinator.cpp | 15 | ||||
-rw-r--r-- | src/mongo/db/s/sharding_ddl_coordinator.h | 9 |
10 files changed, 45 insertions, 78 deletions
diff --git a/src/mongo/db/s/create_collection_coordinator.cpp b/src/mongo/db/s/create_collection_coordinator.cpp index 532f5d080c0..ad201f5caf4 100644 --- a/src/mongo/db/s/create_collection_coordinator.cpp +++ b/src/mongo/db/s/create_collection_coordinator.cpp @@ -447,7 +447,9 @@ ExecutorFuture<void> CreateCollectionCoordinator::_runImpl( // Perform a noop write on the participants in order to advance the txnNumber // for this coordinator's lsid so that requests with older txnNumbers can no // longer execute. - _performNoopRetryableWriteOnParticipants(opCtx, **executor); + _doc = _updateSession(opCtx, _doc); + _performNoopRetryableWriteOnAllShardsAndConfigsvr( + opCtx, getCurrentSession(_doc), **executor); } if (_recoveredFromDisk) { @@ -940,20 +942,6 @@ void CreateCollectionCoordinator::_logEndCreateCollection(OperationContext* opCt opCtx, "shardCollection.end", nss().ns(), collectionDetail.obj()); } -void CreateCollectionCoordinator::_performNoopRetryableWriteOnParticipants( - OperationContext* opCtx, const std::shared_ptr<executor::TaskExecutor>& executor) { - auto shardsAndConfigsvr = [&] { - const auto shardRegistry = Grid::get(opCtx)->shardRegistry(); - auto participants = shardRegistry->getAllShardIds(opCtx); - participants.emplace_back(shardRegistry->getConfigShard()->getId()); - return participants; - }(); - - _doc = _updateSession(opCtx, _doc); - sharding_ddl_util::performNoopRetryableWriteOnShards( - opCtx, shardsAndConfigsvr, getCurrentSession(_doc), executor); -} - // Phase change API. void CreateCollectionCoordinator::_enterPhase(Phase newPhase) { diff --git a/src/mongo/db/s/create_collection_coordinator.h b/src/mongo/db/s/create_collection_coordinator.h index 3ca202c1778..446f430b33f 100644 --- a/src/mongo/db/s/create_collection_coordinator.h +++ b/src/mongo/db/s/create_collection_coordinator.h @@ -141,10 +141,6 @@ private: */ void _logEndCreateCollection(OperationContext* opCtx); - void _performNoopRetryableWriteOnParticipants( - OperationContext* opCtx, const std::shared_ptr<executor::TaskExecutor>& executor); - - CreateCollectionCoordinatorDocument _doc; const BSONObj _critSecReason; diff --git a/src/mongo/db/s/drop_collection_coordinator.cpp b/src/mongo/db/s/drop_collection_coordinator.cpp index 5caf5edca7f..d2ca980dd9a 100644 --- a/src/mongo/db/s/drop_collection_coordinator.cpp +++ b/src/mongo/db/s/drop_collection_coordinator.cpp @@ -109,20 +109,6 @@ void DropCollectionCoordinator::_enterPhase(Phase newPhase) { _doc = _updateStateDocument(cc().makeOperationContext().get(), std::move(newDoc)); } -void DropCollectionCoordinator::_performNoopRetryableWriteOnParticipants( - OperationContext* opCtx, const std::shared_ptr<executor::TaskExecutor>& executor) { - auto shardsAndConfigsvr = [&] { - const auto shardRegistry = Grid::get(opCtx)->shardRegistry(); - auto participants = shardRegistry->getAllShardIds(opCtx); - participants.emplace_back(shardRegistry->getConfigShard()->getId()); - return participants; - }(); - - _doc = _updateSession(opCtx, _doc); - sharding_ddl_util::performNoopRetryableWriteOnShards( - opCtx, shardsAndConfigsvr, getCurrentSession(_doc), executor); -} - ExecutorFuture<void> DropCollectionCoordinator::_runImpl( std::shared_ptr<executor::ScopedTaskExecutor> executor, const CancellationToken& token) noexcept { @@ -171,7 +157,9 @@ ExecutorFuture<void> DropCollectionCoordinator::_runImpl( // Perform a noop write on the participants in order to advance the txnNumber // for this coordinator's lsid so that requests with older txnNumbers can no // longer execute. - _performNoopRetryableWriteOnParticipants(opCtx, **executor); + _doc = _updateSession(opCtx, _doc); + _performNoopRetryableWriteOnAllShardsAndConfigsvr( + opCtx, getCurrentSession(_doc), **executor); } const auto collIsSharded = bool(_doc.getCollInfo()); diff --git a/src/mongo/db/s/drop_collection_coordinator.h b/src/mongo/db/s/drop_collection_coordinator.h index b5c78f43134..373ba5d05ae 100644 --- a/src/mongo/db/s/drop_collection_coordinator.h +++ b/src/mongo/db/s/drop_collection_coordinator.h @@ -84,9 +84,6 @@ private: void _enterPhase(Phase newPhase); - void _performNoopRetryableWriteOnParticipants( - OperationContext* opCtx, const std::shared_ptr<executor::TaskExecutor>& executor); - DropCollectionCoordinatorDocument _doc; }; diff --git a/src/mongo/db/s/drop_database_coordinator.cpp b/src/mongo/db/s/drop_database_coordinator.cpp index 70a79970fe2..35c4c7374e7 100644 --- a/src/mongo/db/s/drop_database_coordinator.cpp +++ b/src/mongo/db/s/drop_database_coordinator.cpp @@ -103,20 +103,6 @@ private: } // namespace -void DropDatabaseCoordinator::_performNoopRetryableWriteOnParticipants( - OperationContext* opCtx, const std::shared_ptr<executor::TaskExecutor>& executor) { - auto shardsAndConfigsvr = [&] { - const auto shardRegistry = Grid::get(opCtx)->shardRegistry(); - auto participants = shardRegistry->getAllShardIds(opCtx); - participants.emplace_back(shardRegistry->getConfigShard()->getId()); - return participants; - }(); - - _doc = _updateSession(opCtx, _doc); - sharding_ddl_util::performNoopRetryableWriteOnShards( - opCtx, shardsAndConfigsvr, getCurrentSession(_doc), executor); -} - void DropDatabaseCoordinator::_dropShardedCollection( OperationContext* opCtx, const CollectionType& coll, @@ -237,7 +223,9 @@ ExecutorFuture<void> DropDatabaseCoordinator::_runImpl( // Perform a noop write on the participants in order to advance the txnNumber // for this coordinator's lsid so that requests with older txnNumbers can no // longer execute. - _performNoopRetryableWriteOnParticipants(opCtx, **executor); + _doc = _updateSession(opCtx, _doc); + _performNoopRetryableWriteOnAllShardsAndConfigsvr( + opCtx, getCurrentSession(_doc), **executor); } ShardingLogging::get(opCtx)->logChange(opCtx, "dropDatabase.start", _dbName); diff --git a/src/mongo/db/s/drop_database_coordinator.h b/src/mongo/db/s/drop_database_coordinator.h index 9f9f779c877..8e81f19b79c 100644 --- a/src/mongo/db/s/drop_database_coordinator.h +++ b/src/mongo/db/s/drop_database_coordinator.h @@ -79,9 +79,6 @@ private: const CollectionType& coll, std::shared_ptr<executor::ScopedTaskExecutor> executor); - void _performNoopRetryableWriteOnParticipants( - OperationContext* opCtx, const std::shared_ptr<executor::TaskExecutor>& executor); - void _clearDatabaseInfoOnPrimary(OperationContext* opCtx); void _clearDatabaseInfoOnSecondaries(OperationContext* opCtx); diff --git a/src/mongo/db/s/rename_collection_coordinator.cpp b/src/mongo/db/s/rename_collection_coordinator.cpp index 61a8365ee38..67c0e341789 100644 --- a/src/mongo/db/s/rename_collection_coordinator.cpp +++ b/src/mongo/db/s/rename_collection_coordinator.cpp @@ -150,20 +150,6 @@ void RenameCollectionCoordinator::_enterPhase(Phase newPhase) { _doc = _updateStateDocument(cc().makeOperationContext().get(), std::move(newDoc)); } -void RenameCollectionCoordinator::_performNoopRetryableWriteOnParticipants( - OperationContext* opCtx, const std::shared_ptr<executor::TaskExecutor>& executor) { - auto shardsAndConfigsvr = [&] { - const auto shardRegistry = Grid::get(opCtx)->shardRegistry(); - auto participants = shardRegistry->getAllShardIds(opCtx); - participants.emplace_back(shardRegistry->getConfigShard()->getId()); - return participants; - }(); - - _doc = _updateSession(opCtx, _doc); - sharding_ddl_util::performNoopRetryableWriteOnShards( - opCtx, shardsAndConfigsvr, getCurrentSession(_doc), executor); -} - ExecutorFuture<void> RenameCollectionCoordinator::_runImpl( std::shared_ptr<executor::ScopedTaskExecutor> executor, const CancellationToken& token) noexcept { @@ -253,8 +239,10 @@ ExecutorFuture<void> RenameCollectionCoordinator::_runImpl( auto* opCtx = opCtxHolder.get(); getForwardableOpMetadata().setOn(opCtx); - if (_recoveredFromDisk) { - _performNoopRetryableWriteOnParticipants(opCtx, **executor); + if (!_firstExecution) { + _doc = _updateSession(opCtx, _doc); + _performNoopRetryableWriteOnAllShardsAndConfigsvr( + opCtx, getCurrentSession(_doc), **executor); } const auto& fromNss = nss(); @@ -303,8 +291,10 @@ ExecutorFuture<void> RenameCollectionCoordinator::_runImpl( auto* opCtx = opCtxHolder.get(); getForwardableOpMetadata().setOn(opCtx); - if (_recoveredFromDisk) { - _performNoopRetryableWriteOnParticipants(opCtx, **executor); + if (!_firstExecution) { + _doc = _updateSession(opCtx, _doc); + _performNoopRetryableWriteOnAllShardsAndConfigsvr( + opCtx, getCurrentSession(_doc), **executor); } ConfigsvrRenameCollectionMetadata req(nss(), _doc.getTo()); @@ -342,8 +332,10 @@ ExecutorFuture<void> RenameCollectionCoordinator::_runImpl( auto* opCtx = opCtxHolder.get(); getForwardableOpMetadata().setOn(opCtx); - if (_recoveredFromDisk) { - _performNoopRetryableWriteOnParticipants(opCtx, **executor); + if (!_firstExecution) { + _doc = _updateSession(opCtx, _doc); + _performNoopRetryableWriteOnAllShardsAndConfigsvr( + opCtx, getCurrentSession(_doc), **executor); } const auto& fromNss = nss(); diff --git a/src/mongo/db/s/rename_collection_coordinator.h b/src/mongo/db/s/rename_collection_coordinator.h index bd132064964..0b1725f39e4 100644 --- a/src/mongo/db/s/rename_collection_coordinator.h +++ b/src/mongo/db/s/rename_collection_coordinator.h @@ -91,9 +91,6 @@ private: void _enterPhase(Phase newPhase); - void _performNoopRetryableWriteOnParticipants( - OperationContext* opCtx, const std::shared_ptr<executor::TaskExecutor>& executor); - RenameCollectionCoordinatorDocument _doc; boost::optional<RenameCollectionResponse> _response; diff --git a/src/mongo/db/s/sharding_ddl_coordinator.cpp b/src/mongo/db/s/sharding_ddl_coordinator.cpp index 57b745ebdbc..afa7a2dfcca 100644 --- a/src/mongo/db/s/sharding_ddl_coordinator.cpp +++ b/src/mongo/db/s/sharding_ddl_coordinator.cpp @@ -39,6 +39,7 @@ #include "mongo/db/s/database_sharding_state.h" #include "mongo/db/s/operation_sharding_state.h" #include "mongo/db/s/sharding_ddl_coordinator_gen.h" +#include "mongo/db/s/sharding_ddl_util.h" #include "mongo/db/vector_clock_mutable.h" #include "mongo/db/write_concern.h" #include "mongo/logv2/log.h" @@ -311,6 +312,20 @@ SemiFuture<void> ShardingDDLCoordinator::run(std::shared_ptr<executor::ScopedTas .semi(); } +void ShardingDDLCoordinator::_performNoopRetryableWriteOnAllShardsAndConfigsvr( + OperationContext* opCtx, + const OperationSessionInfo& osi, + const std::shared_ptr<executor::TaskExecutor>& executor) { + const auto shardsAndConfigsvr = [&] { + const auto shardRegistry = Grid::get(opCtx)->shardRegistry(); + auto participants = shardRegistry->getAllShardIds(opCtx); + participants.emplace_back(shardRegistry->getConfigShard()->getId()); + return participants; + }(); + + sharding_ddl_util::performNoopRetryableWriteOnShards(opCtx, shardsAndConfigsvr, osi, executor); +} + ShardingDDLCoordinator_NORESILIENT::ShardingDDLCoordinator_NORESILIENT(OperationContext* opCtx, const NamespaceString& ns) : _nss(ns), _forwardableOpMetadata(opCtx) {} diff --git a/src/mongo/db/s/sharding_ddl_coordinator.h b/src/mongo/db/s/sharding_ddl_coordinator.h index b2eec9b42fb..0b2d32e703a 100644 --- a/src/mongo/db/s/sharding_ddl_coordinator.h +++ b/src/mongo/db/s/sharding_ddl_coordinator.h @@ -160,6 +160,15 @@ protected: } /* + * Performs a noop write on all shards and the configsvr using the sessionId and txnNumber + * specified in 'osi'. + */ + void _performNoopRetryableWriteOnAllShardsAndConfigsvr( + OperationContext* opCtx, + const OperationSessionInfo& osi, + const std::shared_ptr<executor::TaskExecutor>& executor); + + /* * Specify if the coordinator must indefinitely be retried in case of exceptions. It is always * expected for a coordinator to make progress after performing intermediate operations that * can't be rollbacked. |