summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCheahuychou Mao <cheahuychou.mao@mongodb.com>2020-08-09 15:10:35 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-08-24 21:53:49 +0000
commit118c3fad1141230435881a92865025b863376697 (patch)
treedce663b347801c6cba807d9c0870378658c449e2 /src
parent9d94da72affe76ad20cd13d20c555676782145c6 (diff)
downloadmongo-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.cpp3
-rw-r--r--src/mongo/client/replica_set_monitor_manager.h2
-rw-r--r--src/mongo/db/commands/tenant_migration_donor_cmds.cpp10
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(),