summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mongo/db/s/create_collection_coordinator.cpp18
-rw-r--r--src/mongo/db/s/create_collection_coordinator.h4
-rw-r--r--src/mongo/db/s/drop_collection_coordinator.cpp18
-rw-r--r--src/mongo/db/s/drop_collection_coordinator.h3
-rw-r--r--src/mongo/db/s/drop_database_coordinator.cpp18
-rw-r--r--src/mongo/db/s/drop_database_coordinator.h3
-rw-r--r--src/mongo/db/s/rename_collection_coordinator.cpp32
-rw-r--r--src/mongo/db/s/rename_collection_coordinator.h3
-rw-r--r--src/mongo/db/s/sharding_ddl_coordinator.cpp15
-rw-r--r--src/mongo/db/s/sharding_ddl_coordinator.h9
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.