diff options
author | Cheahuychou Mao <cheahuychou.mao@mongodb.com> | 2020-08-09 15:10:35 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-08-24 21:53:49 +0000 |
commit | 118c3fad1141230435881a92865025b863376697 (patch) | |
tree | dce663b347801c6cba807d9c0870378658c449e2 /src | |
parent | 9d94da72affe76ad20cd13d20c555676782145c6 (diff) | |
download | mongo-118c3fad1141230435881a92865025b863376697.tar.gz |
SERVER-50093 Test that donor supports running multiple tenant migrations concurrently
Diffstat (limited to 'src')
-rw-r--r-- | src/mongo/client/replica_set_monitor_manager.cpp | 3 | ||||
-rw-r--r-- | src/mongo/client/replica_set_monitor_manager.h | 2 | ||||
-rw-r--r-- | src/mongo/db/commands/tenant_migration_donor_cmds.cpp | 10 |
3 files changed, 15 insertions, 0 deletions
diff --git a/src/mongo/client/replica_set_monitor_manager.cpp b/src/mongo/client/replica_set_monitor_manager.cpp index 3f8bffe62dd..0a1b1818215 100644 --- a/src/mongo/client/replica_set_monitor_manager.cpp +++ b/src/mongo/client/replica_set_monitor_manager.cpp @@ -198,6 +198,7 @@ shared_ptr<ReplicaSetMonitor> ReplicaSetMonitorManager::getOrCreateMonitor(const newMonitor = StreamableReplicaSetMonitor::make(uri, getExecutor(), _getConnectionManager()); } _monitors[setName] = newMonitor; + _numMonitorsCreated++; return newMonitor; } @@ -287,6 +288,8 @@ void ReplicaSetMonitorManager::report(BSONObjBuilder* builder, bool forFTDC) { // potentially calling ShardRegistry::updateConfigServerConnectionString. auto setNames = getAllSetNames(); + builder->appendNumber("numReplicaSetMonitorsCreated", _numMonitorsCreated); + BSONObjBuilder setStats( builder->subobjStart(forFTDC ? "replicaSetPingTimesMillis" : "replicaSets")); diff --git a/src/mongo/client/replica_set_monitor_manager.h b/src/mongo/client/replica_set_monitor_manager.h index 07b5d4e3ba4..26118b6661a 100644 --- a/src/mongo/client/replica_set_monitor_manager.h +++ b/src/mongo/client/replica_set_monitor_manager.h @@ -174,6 +174,8 @@ private: // Needs to be after `_taskExecutor`, so that it will be destroyed before the `_taskExecutor`. ReplicaSetMonitorsMap _monitors; + int _numMonitorsCreated; + void _setupTaskExecutorInLock(); // set to true when shutdown has been called. diff --git a/src/mongo/db/commands/tenant_migration_donor_cmds.cpp b/src/mongo/db/commands/tenant_migration_donor_cmds.cpp index ec9c2a74946..c05d99514ad 100644 --- a/src/mongo/db/commands/tenant_migration_donor_cmds.cpp +++ b/src/mongo/db/commands/tenant_migration_donor_cmds.cpp @@ -30,6 +30,7 @@ #include "mongo/db/commands.h" #include "mongo/db/commands/tenant_migration_donor_cmds_gen.h" #include "mongo/db/repl/primary_only_service.h" +#include "mongo/db/repl/replication_coordinator.h" #include "mongo/db/repl/tenant_migration_donor_service.h" #include "mongo/db/repl/tenant_migration_donor_util.h" @@ -48,6 +49,15 @@ public: void typedRun(OperationContext* opCtx) { const RequestType& requestBody = request(); + // TODO (SERVER-50483): Make donorStartMigration command check that the donor's host + // is not present in 'recipientConnectionString' + const auto donorConnectionString = + repl::ReplicationCoordinator::get(opCtx)->getConfig().getConnectionString(); + uassert(ErrorCodes::InvalidOptions, + "recipient must be different from donor", + donorConnectionString.toString() != + requestBody.getRecipientConnectionString().toString()); + const auto donorStateDoc = TenantMigrationDonorDocument(requestBody.getMigrationId(), requestBody.getRecipientConnectionString().toString(), |