summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory Wlodarek <gregory.wlodarek@mongodb.com>2021-11-04 23:02:33 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-11-04 23:32:41 +0000
commite47af06d2f144eab78746daac71005bbb73e69f4 (patch)
treecee5cf59b652b728a101aaabc6689644d2c22823
parent1a99933a489e6620a72899011054352f27e3282a (diff)
downloadmongo-e47af06d2f144eab78746daac71005bbb73e69f4.tar.gz
Revert "SERVER-59495 Donor and recipient tenant migration state machines will persist the migration protocol info and tenantId info will be an empty string for 'Merge' protocol."
This reverts commit bbc96fbba2deaac539165bcd86bbdaf6037f41dd.
-rw-r--r--buildscripts/idl/idl/generator.py21
-rw-r--r--jstests/multiVersion/genericSetFCVUsage/tenant_migration_save_fcv.js10
-rw-r--r--jstests/replsets/libs/tenant_migration_util.js2
-rw-r--r--jstests/replsets/shard_merge_enabled.js77
-rw-r--r--jstests/replsets/tenant_migration_invalid_inputs.js28
-rw-r--r--src/mongo/db/commands/SConscript4
-rw-r--r--src/mongo/db/commands/tenant_migration_donor_cmds.cpp25
-rw-r--r--src/mongo/db/commands/tenant_migration_donor_cmds.idl12
-rw-r--r--src/mongo/db/commands/tenant_migration_recipient_cmds.cpp27
-rw-r--r--src/mongo/db/commands/tenant_migration_recipient_cmds.idl8
-rw-r--r--src/mongo/db/repl/SConscript1
-rw-r--r--src/mongo/db/repl/tenant_migration_donor_service.cpp74
-rw-r--r--src/mongo/db/repl/tenant_migration_donor_service.h16
-rw-r--r--src/mongo/db/repl/tenant_migration_donor_service_test.cpp1
-rw-r--r--src/mongo/db/repl/tenant_migration_recipient_entry_helpers_test.cpp10
-rw-r--r--src/mongo/db/repl/tenant_migration_recipient_service.cpp59
-rw-r--r--src/mongo/db/repl/tenant_migration_recipient_service.h12
-rw-r--r--src/mongo/db/repl/tenant_migration_recipient_service_test.cpp52
-rw-r--r--src/mongo/db/repl/tenant_migration_state_machine.idl9
-rw-r--r--src/mongo/db/repl/tenant_migration_util.h46
-rw-r--r--src/mongo/db/serverless/SConscript12
-rw-r--r--src/mongo/db/serverless/serverless_types.idl40
22 files changed, 65 insertions, 481 deletions
diff --git a/buildscripts/idl/idl/generator.py b/buildscripts/idl/idl/generator.py
index 30a5f28bf79..00ea3113455 100644
--- a/buildscripts/idl/idl/generator.py
+++ b/buildscripts/idl/idl/generator.py
@@ -230,15 +230,24 @@ class _FastFieldUsageChecker(_FieldUsageCheckerBase):
with writer.IndentedScopedBlock(self._writer, 'if (MONGO_unlikely(!usedFields.all())) {',
'}'):
for field in self._fields:
- # If 'field.default' is true, the fields(members) gets initialized with the default
- # value in the class definition. So, it's ok to skip setting the field to
- # default value here.
- if (not field.optional) and (not field.ignore) and (not field.default):
+ if (not field.optional) and (not field.ignore):
with writer.IndentedScopedBlock(
self._writer,
'if (!usedFields[%s]) {' % (_gen_field_usage_constant(field)), '}'):
- self._writer.write_line(
- 'ctxt.throwMissingField(%s);' % (_get_field_constant_name(field)))
+ if field.default:
+ default_value = (field.type.cpp_type + "::" + field.default) \
+ if field.type.is_enum else field.default
+ if field.chained_struct_field:
+ self._writer.write_line(
+ '%s.%s(%s);' %
+ (_get_field_member_name(field.chained_struct_field),
+ _get_field_member_setter_name(field), default_value))
+ else:
+ self._writer.write_line(
+ '%s = %s;' % (_get_field_member_name(field), default_value))
+ else:
+ self._writer.write_line(
+ 'ctxt.throwMissingField(%s);' % (_get_field_constant_name(field)))
class _SlowFieldUsageChecker(_FastFieldUsageChecker):
diff --git a/jstests/multiVersion/genericSetFCVUsage/tenant_migration_save_fcv.js b/jstests/multiVersion/genericSetFCVUsage/tenant_migration_save_fcv.js
index 19a5e7eae83..a7881fef8aa 100644
--- a/jstests/multiVersion/genericSetFCVUsage/tenant_migration_save_fcv.js
+++ b/jstests/multiVersion/genericSetFCVUsage/tenant_migration_save_fcv.js
@@ -52,9 +52,6 @@ function runTest(downgradeFCV) {
migrationThread.start();
hangAfterSavingFCV.wait();
- const isRunningMergeProtocol =
- (TenantMigrationUtil.isShardMergeEnabled(recipientDb)) ? true : false;
-
// Downgrade the FCV for the recipient set.
assert.commandWorked(
recipientPrimary.adminCommand({setFeatureCompatibilityVersion: downgradeFCV}));
@@ -69,12 +66,7 @@ function runTest(downgradeFCV) {
// The migration will not be able to continue in the downgraded version.
TenantMigrationTest.assertAborted(migrationThread.returnData());
- // Change-of-FCV detection message.
- if (isRunningMergeProtocol) {
- checkLog.containsJson(newRecipientPrimary, 5949504);
- } else {
- checkLog.containsJson(newRecipientPrimary, 5356200);
- }
+ checkLog.containsJson(newRecipientPrimary, 5356200); // Change-of-FCV detection message.
tenantMigrationTest.stop();
recipientRst.stopSet();
diff --git a/jstests/replsets/libs/tenant_migration_util.js b/jstests/replsets/libs/tenant_migration_util.js
index 6a07a83065c..9d89ceee585 100644
--- a/jstests/replsets/libs/tenant_migration_util.js
+++ b/jstests/replsets/libs/tenant_migration_util.js
@@ -37,7 +37,7 @@ var TenantMigrationUtil = (function() {
*/
function donorStartMigrationWithProtocol(cmd, db) {
// If we don't pass "protocol", the server uses "multitenant migrations" by default.
- if (cmd['protocol'] === undefined && isShardMergeEnabled(db)) {
+ if (isShardMergeEnabled(db)) {
return Object.assign(Object.assign({}, cmd), {protocol: "shard merge"});
}
diff --git a/jstests/replsets/shard_merge_enabled.js b/jstests/replsets/shard_merge_enabled.js
index 0235f79ea00..8c02658fad0 100644
--- a/jstests/replsets/shard_merge_enabled.js
+++ b/jstests/replsets/shard_merge_enabled.js
@@ -1,13 +1,12 @@
/**
* Tests that the "shard merge" protocol is enabled only in the proper FCV.
- * @tags: [requires_fcv_52, featureFlagShardMerge]
+ * @tags: [requires_fcv_51, featureFlagShardMerge]
*/
(function() {
"use strict";
load("jstests/replsets/libs/tenant_migration_util.js");
-load("jstests/libs/fail_point_util.js");
function runTest(downgradeFCV) {
let rst = new ReplSetTest({nodes: 1});
@@ -17,87 +16,37 @@ function runTest(downgradeFCV) {
let primary = rst.getPrimary();
let adminDB = primary.getDB("admin");
const kDummyConnStr = "mongodb://localhost/?replicaSet=foo";
- const readPreference = {mode: 'primary'};
- const migrationCertificates = TenantMigrationUtil.makeMigrationCertificatesForTest();
-
// A function, not a constant, to ensure unique UUIDs.
function donorStartMigrationCmd() {
return {
donorStartMigration: 1,
protocol: "shard merge",
+ tenantId: "foo",
migrationId: UUID(),
recipientConnectionString: kDummyConnStr,
- readPreference: readPreference,
- donorCertificateForRecipient: migrationCertificates.donorCertificateForRecipient,
- recipientCertificateForDonor: migrationCertificates.recipientCertificateForDonor
- };
- }
-
- function recipientSyncDataCmd() {
- return {
- recipientSyncData: 1,
- protocol: "shard merge",
- migrationId: UUID(),
- donorConnectionString: kDummyConnStr,
- readPreference: readPreference,
- startMigrationDonorTimestamp: Timestamp(1, 1),
- recipientCertificateForDonor: migrationCertificates.recipientCertificateForDonor
- };
- }
-
- function recipientForgetMigrationCmd() {
- return {
- recipientForgetMigration: 1,
- protocol: "shard merge",
- migrationId: UUID(),
- donorConnectionString: kDummyConnStr,
- readPreference: readPreference,
- recipientCertificateForDonor: migrationCertificates.recipientCertificateForDonor
+ readPreference: {mode: "primary"},
};
}
- function func(cmd) {
- return eval(cmd + "Cmd()");
- }
-
- function upgradeTest(cmd) {
- let msg = cmd + " shouldn't reject 'shard merge' protocol when it's enabled";
- assert.commandWorked(adminDB.runCommand(func(cmd)), msg);
- }
-
- function downgradeTest(cmd) {
- let msg = cmd + " should reject 'shard merge' protocol when it's disabled";
- let expectedErrorMsg = "'protocol' field is not supported for FCV below 5.2'";
- let response = assert.commandFailedWithCode(
- adminDB.runCommand(func(cmd)), ErrorCodes.InvalidOptions, msg);
- assert.neq(-1,
- response.errmsg.indexOf(expectedErrorMsg),
- "Error message did not contain '" + expectedErrorMsg + "', found:\n" +
- tojson(response));
- }
-
- // Enable below fail points to prevent starting the donor/recipient POS instance.
- configureFailPoint(primary, "returnResponseCommittedForDonorStartMigrationCmd");
- configureFailPoint(primary, "returnResponseOkForRecipientSyncDataCmd");
- configureFailPoint(primary, "returnResponseOkForRecipientForgetMigrationCmd");
-
// Preconditions: the shard merge feature is enabled and our fresh RS is on the latest FCV.
assert(TenantMigrationUtil.isShardMergeEnabled(adminDB));
assert.eq(getFCVConstants().latest,
adminDB.system.version.findOne({_id: 'featureCompatibilityVersion'}).version);
- // Shard merge is enabled, so this call should work.
- let cmds = ["donorStartMigration", "recipientSyncData", "recipientForgetMigration"];
- cmds.forEach((cmd) => {
- upgradeTest(cmd);
- });
+ // Shard merge is enabled, so this call will fail for some *other* reason, e.g. no certificates,
+ // recipient is unavailable.
+ let res = adminDB.runCommand(donorStartMigrationCmd());
+ assert.neq(res.code,
+ 5949300,
+ "donorStartMigration shouldn't reject 'shard merge' protocol when it's enabled");
assert.commandWorked(adminDB.adminCommand({setFeatureCompatibilityVersion: downgradeFCV}));
// Now that FCV is downgraded, shard merge is automatically disabled.
- cmds.forEach((cmd) => {
- downgradeTest(cmd);
- });
+ assert.commandFailedWithCode(
+ adminDB.runCommand(donorStartMigrationCmd()),
+ 5949300,
+ "donorStartMigration should reject 'shard merge' protocol when it's disabled");
rst.stopSet();
}
diff --git a/jstests/replsets/tenant_migration_invalid_inputs.js b/jstests/replsets/tenant_migration_invalid_inputs.js
index 3ac39c57fe0..a680a7164d8 100644
--- a/jstests/replsets/tenant_migration_invalid_inputs.js
+++ b/jstests/replsets/tenant_migration_invalid_inputs.js
@@ -9,7 +9,6 @@
* incompatible_with_macos,
* incompatible_with_windows_tls,
* requires_persistence,
- * requires_fcv_51,
* ]
*/
@@ -33,21 +32,6 @@ const migrationCertificates = TenantMigrationUtil.makeMigrationCertificatesForTe
jsTestLog("Testing 'donorStartMigration' command provided with invalid options.");
-// Test missing tenantId field for protocol 'multitenant migrations'.
-assert.commandFailedWithCode(
- donorPrimary.adminCommand(
- TenantMigrationUtil.donorStartMigrationWithProtocol({
- donorStartMigration: 1,
- protocol: 'multitenant migrations',
- migrationId: UUID(),
- recipientConnectionString: tenantMigrationTest.getRecipientRst().getURL(),
- readPreference: readPreference,
- donorCertificateForRecipient: migrationCertificates.donorCertificateForRecipient,
- recipientCertificateForDonor: migrationCertificates.recipientCertificateForDonor,
- },
- donorPrimary.getDB("admin"))),
- ErrorCodes.InvalidOptions);
-
// Test unsupported database prefixes.
const unsupportedtenantIds = ['', 'admin', 'local', 'config'];
unsupportedtenantIds.forEach((invalidTenantId) => {
@@ -114,18 +98,6 @@ assert.commandFailedWithCode(
jsTestLog("Testing 'recipientSyncData' command provided with invalid options.");
-// Test missing tenantId field for protocol 'multitenant migrations'.
-assert.commandFailedWithCode(recipientPrimary.adminCommand({
- recipientSyncData: 1,
- protocol: 'multitenant migrations',
- migrationId: UUID(),
- donorConnectionString: tenantMigrationTest.getDonorRst().getURL(),
- startMigrationDonorTimestamp: Timestamp(1, 1),
- readPreference: readPreference,
- recipientCertificateForDonor: migrationCertificates.recipientCertificateForDonor,
-}),
- ErrorCodes.InvalidOptions);
-
// Test unsupported database prefixes.
unsupportedtenantIds.forEach((invalidTenantId) => {
assert.commandFailedWithCode(recipientPrimary.adminCommand({
diff --git a/src/mongo/db/commands/SConscript b/src/mongo/db/commands/SConscript
index 491be419999..a9281408827 100644
--- a/src/mongo/db/commands/SConscript
+++ b/src/mongo/db/commands/SConscript
@@ -624,11 +624,7 @@ env.Library(
'$BUILD_DIR/mongo/client/connection_string',
'$BUILD_DIR/mongo/client/read_preference',
'$BUILD_DIR/mongo/db/repl/repl_coordinator_interface',
- '$BUILD_DIR/mongo/db/repl/repl_server_parameters',
'$BUILD_DIR/mongo/db/repl/tenant_migration_state_machine_idl',
- '$BUILD_DIR/mongo/db/server_options_core',
- '$BUILD_DIR/mongo/db/serverless/serverless_types_idl',
- '$BUILD_DIR/mongo/idl/feature_flag',
'$BUILD_DIR/mongo/idl/idl_parser',
]
)
diff --git a/src/mongo/db/commands/tenant_migration_donor_cmds.cpp b/src/mongo/db/commands/tenant_migration_donor_cmds.cpp
index 4e37821036f..63c62bcd47d 100644
--- a/src/mongo/db/commands/tenant_migration_donor_cmds.cpp
+++ b/src/mongo/db/commands/tenant_migration_donor_cmds.cpp
@@ -26,7 +26,6 @@
* exception statement from all source files in the program, then also delete
* it in the license file.
*/
-#define MONGO_LOGV2_DEFAULT_COMPONENT ::mongo::logv2::LogComponent::kCommand
#include "mongo/db/auth/authorization_session.h"
#include "mongo/db/commands.h"
@@ -37,13 +36,10 @@
#include "mongo/db/repl/replication_coordinator.h"
#include "mongo/db/repl/tenant_migration_access_blocker_util.h"
#include "mongo/db/repl/tenant_migration_donor_service.h"
-#include "mongo/logv2/log.h"
namespace mongo {
namespace {
-MONGO_FAIL_POINT_DEFINE(returnResponseCommittedForDonorStartMigrationCmd);
-
class DonorStartMigrationCmd : public TypedCommand<DonorStartMigrationCmd> {
public:
using Request = DonorStartMigration;
@@ -72,11 +68,16 @@ public:
!serverGlobalParams.featureCompatibility.isUpgradingOrDowngrading());
const auto& cmd = request();
- const auto migrationProtocol = cmd.getProtocol().value_or(kDefaulMigrationProtocol);
- tenant_migration_util::protocolTenantIdCompatibilityCheck(migrationProtocol,
- cmd.getTenantId().toString());
+ if (cmd.getProtocol().value_or(MigrationProtocolEnum::kMultitenantMigrations) ==
+ MigrationProtocolEnum::kShardMerge) {
+ uassert(5949300,
+ "protocol \"shard merge\" not supported",
+ repl::feature_flags::gShardMerge.isEnabled(
+ serverGlobalParams.featureCompatibility));
+ }
+ // TODO (SERVER-59494): tenantId should be optional in the state doc. Include protocol.
TenantMigrationDonorDocument stateDoc(cmd.getMigrationId(),
cmd.getRecipientConnectionString().toString(),
cmd.getReadPreference(),
@@ -95,18 +96,8 @@ public:
stateDoc.setRecipientCertificateForDonor(cmd.getRecipientCertificateForDonor());
}
- stateDoc.setProtocol(migrationProtocol);
-
const auto stateDocBson = stateDoc.toBSON();
- if (MONGO_unlikely(returnResponseCommittedForDonorStartMigrationCmd.shouldFail())) {
- LOGV2(5949401,
- "Immediately returning committed because "
- "'returnResponseCommittedForDonorStartMigrationCmd' failpoint is enabled",
- "tenantMigrationDonorInstance"_attr = stateDoc.toBSON());
- return Response(TenantMigrationDonorStateEnum::kCommitted);
- }
-
auto donorService =
repl::PrimaryOnlyServiceRegistry::get(opCtx->getServiceContext())
->lookupServiceByName(TenantMigrationDonorService::kServiceName);
diff --git a/src/mongo/db/commands/tenant_migration_donor_cmds.idl b/src/mongo/db/commands/tenant_migration_donor_cmds.idl
index 3117ef7a9ba..750504590f9 100644
--- a/src/mongo/db/commands/tenant_migration_donor_cmds.idl
+++ b/src/mongo/db/commands/tenant_migration_donor_cmds.idl
@@ -35,10 +35,17 @@ global:
imports:
- "mongo/client/read_preference_setting.idl"
- "mongo/db/repl/tenant_migration_state_machine.idl"
- - "mongo/db/serverless/serverless_types.idl"
- "mongo/idl/basic_types.idl"
- "mongo/s/sharding_types.idl"
+enums:
+ MigrationProtocol:
+ description: "Determines which tenant migration protocol to use."
+ type: string
+ values:
+ kMultitenantMigrations: "multitenant migrations"
+ kShardMerge: "shard merge"
+
structs:
DonorStartMigrationResponse:
description: "Response of the donorStartMigration command"
@@ -71,7 +78,6 @@ commands:
tenantId:
description: "The prefix from which the migrating database will be matched. The prefixes 'admin', 'local', 'config', the empty string, are not allowed."
type: string
- default: '""'
validator:
callback: "tenant_migration_util::validateDatabasePrefix"
readPreference:
@@ -95,8 +101,6 @@ commands:
description: "Which migration protocol to use, default 'multitenant migrations'."
type: MigrationProtocol
optional: true
- validator:
- callback: "tenant_migration_util::validateProtocolFCVCompatibility"
donorForgetMigration:
description: "Parser for the 'donorForgetMigration' command."
diff --git a/src/mongo/db/commands/tenant_migration_recipient_cmds.cpp b/src/mongo/db/commands/tenant_migration_recipient_cmds.cpp
index 6120097c424..b854b45924e 100644
--- a/src/mongo/db/commands/tenant_migration_recipient_cmds.cpp
+++ b/src/mongo/db/commands/tenant_migration_recipient_cmds.cpp
@@ -34,6 +34,7 @@
#include "mongo/db/commands/tenant_migration_donor_cmds_gen.h"
#include "mongo/db/commands/tenant_migration_recipient_cmds_gen.h"
#include "mongo/db/repl/primary_only_service.h"
+#include "mongo/db/repl/repl_server_parameters_gen.h"
#include "mongo/db/repl/tenant_migration_recipient_service.h"
#include "mongo/logv2/log.h"
@@ -41,7 +42,6 @@ namespace mongo {
namespace {
MONGO_FAIL_POINT_DEFINE(returnResponseOkForRecipientSyncDataCmd);
-MONGO_FAIL_POINT_DEFINE(returnResponseOkForRecipientForgetMigrationCmd);
class RecipientSyncDataCmd : public TypedCommand<RecipientSyncDataCmd> {
public:
@@ -70,10 +70,6 @@ public:
!serverGlobalParams.featureCompatibility.isUpgradingOrDowngrading());
const auto& cmd = request();
- const auto migrationProtocol = cmd.getProtocol().value_or(kDefaulMigrationProtocol);
-
- tenant_migration_util::protocolTenantIdCompatibilityCheck(migrationProtocol,
- cmd.getTenantId().toString());
TenantMigrationRecipientDocument stateDoc(cmd.getMigrationId(),
cmd.getDonorConnectionString().toString(),
@@ -81,7 +77,6 @@ public:
cmd.getStartMigrationDonorTimestamp(),
cmd.getReadPreference());
-
if (!repl::tenantMigrationDisableX509Auth) {
uassert(ErrorCodes::InvalidOptions,
str::stream() << "'" << Request::kRecipientCertificateForDonorFieldName
@@ -90,14 +85,11 @@ public:
stateDoc.setRecipientCertificateForDonor(cmd.getRecipientCertificateForDonor());
}
- stateDoc.setProtocol(migrationProtocol);
-
const auto stateDocBson = stateDoc.toBSON();
if (MONGO_unlikely(returnResponseOkForRecipientSyncDataCmd.shouldFail())) {
LOGV2(4879608,
- "Immediately returning OK because 'returnResponseOkForRecipientSyncDataCmd' "
- "failpoint is enabled.",
+ "'returnResponseOkForRecipientSyncDataCmd' failpoint enabled.",
"tenantMigrationRecipientInstance"_attr = stateDoc.toBSON());
return Response(repl::OpTime());
}
@@ -189,10 +181,6 @@ public:
serverGlobalParams.clusterRole == ClusterRole::ShardServer);
const auto& cmd = request();
- const auto migrationProtocol = cmd.getProtocol().value_or(kDefaulMigrationProtocol);
-
- tenant_migration_util::protocolTenantIdCompatibilityCheck(migrationProtocol,
- cmd.getTenantId().toString());
opCtx->setAlwaysInterruptAtStepDownOrUp();
auto recipientService =
@@ -217,21 +205,12 @@ public:
cmd.getRecipientCertificateForDonor());
stateDoc.setRecipientCertificateForDonor(cmd.getRecipientCertificateForDonor());
}
- stateDoc.setProtocol(migrationProtocol);
+
// Set the state to 'kDone' so that we don't create a recipient access blocker
// unnecessarily if this recipientForgetMigration command is received before a
// recipientSyncData command or after the state doc is garbage collected.
stateDoc.setState(TenantMigrationRecipientStateEnum::kDone);
-
- if (MONGO_unlikely(returnResponseOkForRecipientForgetMigrationCmd.shouldFail())) {
- LOGV2(5949502,
- "Immediately returning ok because "
- "'returnResponseOkForRecipientForgetMigrationCmd' failpoint is enabled",
- "tenantMigrationRecipientInstance"_attr = stateDoc.toBSON());
- return;
- }
-
auto recipientInstance = repl::TenantMigrationRecipientService::Instance::getOrCreate(
opCtx, recipientService, stateDoc.toBSON());
diff --git a/src/mongo/db/commands/tenant_migration_recipient_cmds.idl b/src/mongo/db/commands/tenant_migration_recipient_cmds.idl
index f6e4f4531e6..6a4b44c9752 100644
--- a/src/mongo/db/commands/tenant_migration_recipient_cmds.idl
+++ b/src/mongo/db/commands/tenant_migration_recipient_cmds.idl
@@ -36,7 +36,6 @@ global:
imports:
- "mongo/client/read_preference_setting.idl"
- "mongo/db/repl/tenant_migration_pem_payload.idl"
- - "mongo/db/serverless/serverless_types.idl"
- "mongo/idl/basic_types.idl"
- "mongo/s/sharding_types.idl"
- "mongo/db/repl/replication_types.idl"
@@ -69,7 +68,6 @@ structs:
The prefix from which the migrating database will be matched. The prefixes 'admin',
'local', 'config', the empty string, are not allowed.
type: string
- default: '""'
validator:
callback: "tenant_migration_util::validateDatabasePrefix"
readPreference:
@@ -83,12 +81,6 @@ structs:
type: TenantMigrationPEMPayload
# TODO (SERVER-54085): Remove server parameter tenantMigrationDisableX509Auth.
optional: true
- protocol:
- description: "Which migration protocol to use, default 'multitenant migrations'."
- type: MigrationProtocol
- optional: true
- validator:
- callback: "tenant_migration_util::validateProtocolFCVCompatibility"
commands:
recipientSyncData:
diff --git a/src/mongo/db/repl/SConscript b/src/mongo/db/repl/SConscript
index dbc111fd53c..b9a222f5706 100644
--- a/src/mongo/db/repl/SConscript
+++ b/src/mongo/db/repl/SConscript
@@ -1292,7 +1292,6 @@ env.Library(
'$BUILD_DIR/mongo/client/connection_string',
'$BUILD_DIR/mongo/client/read_preference',
'$BUILD_DIR/mongo/db/commands/mongod_fcv',
- '$BUILD_DIR/mongo/db/serverless/serverless_types_idl',
'$BUILD_DIR/mongo/idl/idl_parser',
'$BUILD_DIR/mongo/util/net/ssl_manager',
'optime',
diff --git a/src/mongo/db/repl/tenant_migration_donor_service.cpp b/src/mongo/db/repl/tenant_migration_donor_service.cpp
index 98863193b10..7cf45761185 100644
--- a/src/mongo/db/repl/tenant_migration_donor_service.cpp
+++ b/src/mongo/db/repl/tenant_migration_donor_service.cpp
@@ -249,11 +249,10 @@ TenantMigrationDonorService::Instance::Instance(ServiceContext* const serviceCon
_serviceContext(serviceContext),
_donorService(donorService),
_stateDoc(tenant_migration_access_blocker::parseDonorStateDocument(initialState)),
- _instanceName(kServiceName + "-" + _stateDoc.getId().toString()),
+ _instanceName(kServiceName + "-" + _stateDoc.getTenantId()),
_recipientUri(
uassertStatusOK(MongoURI::parse(_stateDoc.getRecipientConnectionString().toString()))),
_tenantId(_stateDoc.getTenantId()),
- _protocol(_stateDoc.getProtocol().value_or(MigrationProtocolEnum::kMultitenantMigrations)),
_recipientConnectionString(_stateDoc.getRecipientConnectionString()),
_readPreference(_stateDoc.getReadPreference()),
_migrationUuid(_stateDoc.getId()),
@@ -261,7 +260,6 @@ TenantMigrationDonorService::Instance::Instance(ServiceContext* const serviceCon
_recipientCertificateForDonor(_stateDoc.getRecipientCertificateForDonor()),
_sslMode(repl::tenantMigrationDisableX509Auth ? transport::kGlobalSSLMode
: transport::kEnableSSL) {
-
_recipientCmdExecutor = _makeRecipientCmdExecutor();
_recipientCmdExecutor->startup();
@@ -399,9 +397,8 @@ Status TenantMigrationDonorService::Instance::checkIfOptionsConflict(
const TenantMigrationDonorDocument& stateDoc) {
stdx::lock_guard<Latch> lg(_mutex);
invariant(stateDoc.getId() == _migrationUuid);
- invariant(stateDoc.getProtocol());
- if (stateDoc.getProtocol().value() == _protocol && stateDoc.getTenantId() == _tenantId &&
+ if (stateDoc.getTenantId() == _tenantId &&
stateDoc.getRecipientConnectionString() == _recipientConnectionString &&
stateDoc.getReadPreference().equals(_readPreference) &&
stateDoc.getDonorCertificateForRecipient() == _donorCertificateForRecipient &&
@@ -734,15 +731,8 @@ ExecutorFuture<void> TenantMigrationDonorService::Instance::_sendRecipientSyncDa
request.setDbName(NamespaceString::kAdminDb);
MigrationRecipientCommonData commonData(
- _migrationUuid, donorConnString.toString(), _readPreference);
+ _migrationUuid, donorConnString.toString(), _tenantId, _readPreference);
commonData.setRecipientCertificateForDonor(_recipientCertificateForDonor);
-
- if (_isAtleastFCV52AtStart) {
- commonData.setProtocol(_protocol);
- }
-
- // TODO SERVER-59794: Pass tenantId only for 'kMultitenantMigrations' protocol.
- commonData.setTenantId(_tenantId);
request.setMigrationRecipientCommonData(commonData);
stdx::lock_guard<Latch> lg(_mutex);
@@ -768,15 +758,8 @@ ExecutorFuture<void> TenantMigrationDonorService::Instance::_sendRecipientForget
request.setDbName(NamespaceString::kAdminDb);
MigrationRecipientCommonData commonData(
- _migrationUuid, donorConnString.toString(), _readPreference);
+ _migrationUuid, donorConnString.toString(), _tenantId, _readPreference);
commonData.setRecipientCertificateForDonor(_recipientCertificateForDonor);
-
- if (_isAtleastFCV52AtStart) {
- commonData.setProtocol(_protocol);
- }
-
- // TODO SERVER-59794: Pass tenantId only for 'kMultitenantMigrations' protocol.
- commonData.setTenantId(_tenantId);
request.setMigrationRecipientCommonData(commonData);
return _sendCommandToRecipient(executor, recipientTargeterRS, request.toBSON(BSONObj()), token);
@@ -796,33 +779,6 @@ CancellationToken TenantMigrationDonorService::Instance::_initAbortMigrationSour
return _abortMigrationSource->token();
}
-bool TenantMigrationDonorService::Instance::_checkifProtocolRemainsFCVCompatible() {
- stdx::lock_guard<Latch> lg(_mutex);
-
- // Ensure that the on-disk protocol and cached value remains the same.
- invariant(!_stateDoc.getProtocol() || _stateDoc.getProtocol().value() == getProtocol());
-
- _isAtleastFCV52AtStart = serverGlobalParams.featureCompatibility.isGreaterThanOrEqualTo(
- multiversion::FeatureCompatibilityVersion::kVersion_5_2);
- if (_isAtleastFCV52AtStart) {
- // When the instance is started using state doc < 5.2 FCV format, _stateDoc._protocol field
- // won't be set. In that case, the cached value Instance::_protocol will be set to
- // "kMultitenantMigrations".
- return true;
- }
-
- if (getProtocol() == MigrationProtocolEnum::kShardMerge) {
- LOGV2(5949503,
- "Must abort tenant migration as 'Merge' protocol is not supported for FCV "
- "below 5.2");
- return false;
- }
- // For backward compatibility, ensure that the 'protocol' field is not set in the
- // document.
- _stateDoc.setProtocol(boost::none);
- return true;
-}
-
SemiFuture<void> TenantMigrationDonorService::Instance::run(
std::shared_ptr<executor::ScopedTaskExecutor> executor,
const CancellationToken& token) noexcept {
@@ -835,27 +791,13 @@ SemiFuture<void> TenantMigrationDonorService::Instance::run(
}
}
- auto isFCVUpgradingOrDowngrading = [&]() -> bool {
- // We must abort the migration if we try to start or resume while upgrading or downgrading.
- // (Generic FCV reference): This FCV check should exist across LTS binary versions.
- if (serverGlobalParams.featureCompatibility.isUpgradingOrDowngrading()) {
- LOGV2(5356302, "Must abort tenant migration as donor is upgrading or downgrading");
- return true;
- }
- return false;
- };
-
-
- // Tenant migrations gets aborted on FCV upgrading or downgrading state. But,
- // due to race between between Instance::getOrCreate() and
- // SetFeatureCompatibilityVersionCommand::_cancelTenantMigrations(), we might miss aborting this
- // tenant migration and FCV might have updated or downgraded at this point. So, need to ensure
- // that the protocol is still compatible with FCV.
- if (isFCVUpgradingOrDowngrading() || !_checkifProtocolRemainsFCVCompatible()) {
+ // We must abort the migration if we try to start or resume while upgrading or downgrading.
+ // (Generic FCV reference): This FCV check should exist across LTS binary versions.
+ if (serverGlobalParams.featureCompatibility.isUpgradingOrDowngrading()) {
+ LOGV2(5356302, "Must abort tenant migration as donor is upgrading or downgrading");
onReceiveDonorAbortMigration();
}
- // Any FCV changes after this point will abort this migration.
auto abortToken = _initAbortMigrationSource(token);
auto recipientTargeterRS = std::make_shared<RemoteCommandTargeterRS>(
diff --git a/src/mongo/db/repl/tenant_migration_donor_service.h b/src/mongo/db/repl/tenant_migration_donor_service.h
index 3a50bc72c56..9663b63d006 100644
--- a/src/mongo/db/repl/tenant_migration_donor_service.h
+++ b/src/mongo/db/repl/tenant_migration_donor_service.h
@@ -33,6 +33,7 @@
#include "mongo/client/fetcher.h"
#include "mongo/client/remote_command_targeter_rs.h"
#include "mongo/db/repl/primary_only_service.h"
+#include "mongo/db/repl/repl_server_parameters_gen.h"
#include "mongo/db/repl/tenant_migration_access_blocker_util.h"
#include "mongo/executor/thread_pool_task_executor.h"
#include "mongo/util/cancellation.h"
@@ -143,10 +144,6 @@ public:
return _stateDoc.getRecipientConnectionString();
}
- const MigrationProtocolEnum& getProtocol() const {
- return _protocol;
- }
-
private:
const NamespaceString _stateDocumentsNS = NamespaceString::kTenantMigrationDonorsNamespace;
@@ -267,12 +264,6 @@ public:
*/
CancellationToken _initAbortMigrationSource(const CancellationToken& token);
- /*
- * Returns false if the protocol is FCV incompatible. Also, resets the 'protocol' field in
- * the _stateDoc to boost::none for FCV < 5.2.
- */
- bool _checkifProtocolRemainsFCVCompatible();
-
ServiceContext* const _serviceContext;
const TenantMigrationDonorService* const _donorService;
@@ -283,7 +274,6 @@ public:
// This data is provided in the initial state doc and never changes. We keep copies to
// avoid having to obtain the mutex to access them.
const std::string _tenantId;
- const MigrationProtocolEnum _protocol;
const std::string _recipientConnectionString;
const ReadPreferenceSetting _readPreference;
const UUID _migrationUuid;
@@ -331,10 +321,6 @@ public:
// interrupting the instance, e.g. receiving donorAbortMigration. Initialized in
// _initAbortMigrationSource().
boost::optional<CancellationSource> _abortMigrationSource;
-
- // Value is set at the beginning of run() method. Mainly used to determine if the 'protocol'
- // field needs to be added to recipient migration commands and state document.
- bool _isAtleastFCV52AtStart;
};
private:
diff --git a/src/mongo/db/repl/tenant_migration_donor_service_test.cpp b/src/mongo/db/repl/tenant_migration_donor_service_test.cpp
index 3210b8038a6..53588c3c158 100644
--- a/src/mongo/db/repl/tenant_migration_donor_service_test.cpp
+++ b/src/mongo/db/repl/tenant_migration_donor_service_test.cpp
@@ -187,7 +187,6 @@ TEST_F(TenantMigrationDonorServiceTest, CheckSettingMigrationStartDate) {
"donor-rs/localhost:12345",
ReadPreferenceSetting(ReadPreference::PrimaryOnly, TagSet::primaryOnly()),
"tenantA");
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setDonorCertificateForRecipient(kDonorPEMPayload);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
diff --git a/src/mongo/db/repl/tenant_migration_recipient_entry_helpers_test.cpp b/src/mongo/db/repl/tenant_migration_recipient_entry_helpers_test.cpp
index 9a916aa8a16..980f5243591 100644
--- a/src/mongo/db/repl/tenant_migration_recipient_entry_helpers_test.cpp
+++ b/src/mongo/db/repl/tenant_migration_recipient_entry_helpers_test.cpp
@@ -117,7 +117,6 @@ TEST_F(TenantMigrationRecipientEntryHelpersTest, AddTenantMigrationRecipientStat
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- activeTenantAStateDoc.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
activeTenantAStateDoc.setRecipientCertificateForDonor(kRecipientPEMPayload);
ASSERT_OK(insertStateDoc(opCtx.get(), activeTenantAStateDoc));
ASSERT_TRUE(checkStateDocPersisted(opCtx.get(), activeTenantAStateDoc));
@@ -128,7 +127,6 @@ TEST_F(TenantMigrationRecipientEntryHelpersTest, AddTenantMigrationRecipientStat
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- stateDoc1.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
stateDoc1.setRecipientCertificateForDonor(kRecipientPEMPayload);
auto status = insertStateDoc(opCtx.get(), stateDoc1);
ASSERT_EQUALS(ErrorCodes::ConflictingOperationInProgress, status.code());
@@ -140,7 +138,6 @@ TEST_F(TenantMigrationRecipientEntryHelpersTest, AddTenantMigrationRecipientStat
"tenantB",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- stateDoc2.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
stateDoc2.setRecipientCertificateForDonor(kRecipientPEMPayload);
ASSERT_THROWS_CODE(
insertStateDoc(opCtx.get(), stateDoc2), DBException, ErrorCodes::DuplicateKey);
@@ -152,7 +149,6 @@ TEST_F(TenantMigrationRecipientEntryHelpersTest, AddTenantMigrationRecipientStat
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- stateDoc3.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
stateDoc3.setRecipientCertificateForDonor(kRecipientPEMPayload);
status = insertStateDoc(opCtx.get(), stateDoc3);
ASSERT_EQUALS(ErrorCodes::ConflictingOperationInProgress, status.code());
@@ -164,7 +160,6 @@ TEST_F(TenantMigrationRecipientEntryHelpersTest, AddTenantMigrationRecipientStat
"tenantB",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- stateDoc4.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
stateDoc4.setRecipientCertificateForDonor(kRecipientPEMPayload);
ASSERT_OK(insertStateDoc(opCtx.get(), stateDoc4));
ASSERT_TRUE(checkStateDocPersisted(opCtx.get(), stateDoc4));
@@ -181,7 +176,6 @@ TEST_F(TenantMigrationRecipientEntryHelpersTest,
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- inactiveTenantAStateDoc.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
inactiveTenantAStateDoc.setRecipientCertificateForDonor(kRecipientPEMPayload);
inactiveTenantAStateDoc.setExpireAt(Date_t::now());
ASSERT_OK(insertStateDoc(opCtx.get(), inactiveTenantAStateDoc));
@@ -193,7 +187,6 @@ TEST_F(TenantMigrationRecipientEntryHelpersTest,
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- stateDoc1.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
stateDoc1.setRecipientCertificateForDonor(kRecipientPEMPayload);
ASSERT_THROWS_CODE(
insertStateDoc(opCtx.get(), stateDoc1), DBException, ErrorCodes::DuplicateKey);
@@ -205,7 +198,6 @@ TEST_F(TenantMigrationRecipientEntryHelpersTest,
"tenantB",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- stateDoc2.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
stateDoc2.setRecipientCertificateForDonor(kRecipientPEMPayload);
ASSERT_THROWS_CODE(
insertStateDoc(opCtx.get(), stateDoc2), DBException, ErrorCodes::DuplicateKey);
@@ -217,7 +209,6 @@ TEST_F(TenantMigrationRecipientEntryHelpersTest,
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- stateDoc3.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
stateDoc3.setRecipientCertificateForDonor(kRecipientPEMPayload);
ASSERT_OK(insertStateDoc(opCtx.get(), stateDoc3));
ASSERT_TRUE(checkStateDocPersisted(opCtx.get(), stateDoc3));
@@ -228,7 +219,6 @@ TEST_F(TenantMigrationRecipientEntryHelpersTest,
"tenantC",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- stateDoc4.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
stateDoc4.setRecipientCertificateForDonor(kRecipientPEMPayload);
ASSERT_OK(insertStateDoc(opCtx.get(), stateDoc4));
ASSERT_TRUE(checkStateDocPersisted(opCtx.get(), stateDoc4));
diff --git a/src/mongo/db/repl/tenant_migration_recipient_service.cpp b/src/mongo/db/repl/tenant_migration_recipient_service.cpp
index 6f35ce0d0cb..30c98b48af7 100644
--- a/src/mongo/db/repl/tenant_migration_recipient_service.cpp
+++ b/src/mongo/db/repl/tenant_migration_recipient_service.cpp
@@ -313,7 +313,6 @@ TenantMigrationRecipientService::Instance::Instance(
_stateDoc(TenantMigrationRecipientDocument::parse(IDLParserErrorContext("recipientStateDoc"),
stateDoc)),
_tenantId(_stateDoc.getTenantId().toString()),
- _protocol(_stateDoc.getProtocol().value_or(MigrationProtocolEnum::kMultitenantMigrations)),
_migrationUuid(_stateDoc.getId()),
_donorConnectionString(_stateDoc.getDonorConnectionString().toString()),
_donorUri(uassertStatusOK(MongoURI::parse(_stateDoc.getDonorConnectionString().toString()))),
@@ -416,7 +415,7 @@ Status TenantMigrationRecipientService::Instance::checkIfOptionsConflict(
stdx::lock_guard<Latch> lg(_mutex);
invariant(stateDoc.getId() == _migrationUuid);
- if (stateDoc.getProtocol() == _protocol && stateDoc.getTenantId() == _tenantId &&
+ if (stateDoc.getTenantId() == _tenantId &&
stateDoc.getDonorConnectionString() == _donorConnectionString &&
stateDoc.getReadPreference().equals(_readPreference) &&
stateDoc.getRecipientCertificateForDonor() == _recipientCertificateForDonor) {
@@ -1952,33 +1951,6 @@ void TenantMigrationRecipientService::Instance::_compareRecipientAndDonorFCV() c
}
}
-bool TenantMigrationRecipientService::Instance::_checkifProtocolRemainsFCVCompatible() {
- stdx::lock_guard<Latch> lg(_mutex);
-
- // Ensure that the on-disk protocol and cached value remains the same.
- invariant(!_stateDoc.getProtocol() || _stateDoc.getProtocol().value() == getProtocol());
-
- auto isAtleastFCV52AtStart = serverGlobalParams.featureCompatibility.isGreaterThanOrEqualTo(
- multiversion::FeatureCompatibilityVersion::kVersion_5_2);
- if (isAtleastFCV52AtStart) {
- // When the instance is started using state doc < 5.2 FCV format, _stateDoc._protocol field
- // won't be set. In that case, the cached value Instance::_protocol will be set to
- // "kMultitenantMigrations".
- return true;
- }
-
- if (getProtocol() == MigrationProtocolEnum::kShardMerge) {
- LOGV2(5949504,
- "Must abort tenant migration as 'Merge' protocol is not supported for FCV "
- "below 5.2");
- return false;
- }
- // For backward compatibility, ensure that the 'protocol' field is not set in the
- // document.
- _stateDoc.setProtocol(boost::none);
- return true;
-}
-
SemiFuture<void> TenantMigrationRecipientService::Instance::run(
std::shared_ptr<executor::ScopedTaskExecutor> executor,
const CancellationToken& token) noexcept {
@@ -1996,29 +1968,16 @@ SemiFuture<void> TenantMigrationRecipientService::Instance::run(
pauseBeforeRunTenantMigrationRecipientInstance.pauseWhileSet();
bool cancelWhenDurable = false;
- auto isFCVUpgradingOrDowngrading = [&]() -> bool {
- // We must abort the migration if we try to start or resume while upgrading or downgrading.
- // We defer this until after the state doc is persisted in a started so as to make sure it
- // it safe to abort and forget the migration. (Generic FCV reference): This FCV check should
- // exist across LTS binary versions.
- if (serverGlobalParams.featureCompatibility.isUpgradingOrDowngrading()) {
- LOGV2(5356304, "Must abort tenant migration as recipient is upgrading or downgrading");
- return true;
- }
- return false;
- };
- // Tenant migrations gets aborted on FCV upgrading or downgrading state. But,
- // due to race between between Instance::getOrCreate() and
- // SetFeatureCompatibilityVersionCommand::_cancelTenantMigrations(), we might miss aborting this
- // tenant migration and FCV might have updated or downgraded at this point. So, need to ensure
- // that the protocol is still compatible with FCV.
- if (isFCVUpgradingOrDowngrading() || !_checkifProtocolRemainsFCVCompatible()) {
+ // We must abort the migration if we try to start or resume while upgrading or downgrading.
+ // We defer this until after the state doc is persisted in a started so as to make sure it it
+ // safe to abort and forget the migration.
+ // (Generic FCV reference): This FCV check should exist across LTS binary versions.
+ if (serverGlobalParams.featureCompatibility.isUpgradingOrDowngrading()) {
+ LOGV2(5356304, "Must abort tenant migration as recipient is upgrading or downgrading");
cancelWhenDurable = true;
}
- // Any FCV changes after this point will abort this migration.
- //
// The 'AsyncTry' is run on the cleanup executor as opposed to the scoped executor as we rely
// on the 'PrimaryService' to interrupt the operation contexts based on thread pool and not the
// executor.
@@ -2516,9 +2475,5 @@ const std::string& TenantMigrationRecipientService::Instance::getTenantId() cons
return _tenantId;
}
-const MigrationProtocolEnum& TenantMigrationRecipientService::Instance::getProtocol() const {
- return _protocol;
-}
-
} // namespace repl
} // namespace mongo
diff --git a/src/mongo/db/repl/tenant_migration_recipient_service.h b/src/mongo/db/repl/tenant_migration_recipient_service.h
index 98a6f7d96f2..7f7889542af 100644
--- a/src/mongo/db/repl/tenant_migration_recipient_service.h
+++ b/src/mongo/db/repl/tenant_migration_recipient_service.h
@@ -141,11 +141,6 @@ public:
*/
const std::string& getTenantId() const;
- /*
- * Returns the migration protocol.
- */
- const MigrationProtocolEnum& getProtocol() const;
-
/**
* To be called on the instance returned by PrimaryOnlyService::getOrCreate(). Returns an
* error if the options this Instance was created with are incompatible with the options
@@ -310,12 +305,6 @@ public:
};
/*
- * Returns false if the protocol is FCV incompatible. Also, resets the 'protocol' field in
- * the _stateDoc to boost::none for FCV < 5.2.
- */
- bool _checkifProtocolRemainsFCVCompatible();
-
- /*
* Helper for interrupt().
* The _receivedForgetMigrationPromise is resolved when skipWaitingForForgetMigration is
* set (e.g. stepDown/shutDown). And we use skipWaitingForForgetMigration=false for
@@ -522,7 +511,6 @@ public:
// This data is provided in the initial state doc and never changes. We keep copies to
// avoid having to obtain the mutex to access them.
const std::string _tenantId; // (R)
- const MigrationProtocolEnum _protocol; // (R)
const UUID _migrationUuid; // (R)
const std::string _donorConnectionString; // (R)
const MongoURI _donorUri; // (R)
diff --git a/src/mongo/db/repl/tenant_migration_recipient_service_test.cpp b/src/mongo/db/repl/tenant_migration_recipient_service_test.cpp
index cb55a6cbaf7..b30dee191a0 100644
--- a/src/mongo/db/repl/tenant_migration_recipient_service_test.cpp
+++ b/src/mongo/db/repl/tenant_migration_recipient_service_test.cpp
@@ -480,7 +480,6 @@ TEST_F(TenantMigrationRecipientServiceTest, BasicTenantMigrationRecipientService
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly, TagSet::primaryOnly()));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Create and start the instance.
@@ -506,7 +505,6 @@ TEST_F(TenantMigrationRecipientServiceTest, InstanceReportsErrorOnFailureWhilePe
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly, TagSet::primaryOnly()));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Create and start the instance.
@@ -542,7 +540,6 @@ TEST_F(TenantMigrationRecipientServiceTest, TenantMigrationRecipientConnection_P
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Create and start the instance.
@@ -594,7 +591,6 @@ TEST_F(TenantMigrationRecipientServiceTest, TenantMigrationRecipientConnection_S
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::SecondaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Create and start the instance.
@@ -647,7 +643,6 @@ TEST_F(TenantMigrationRecipientServiceTest,
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Hang the migration before attempting to connect to clients.
@@ -706,7 +701,6 @@ TEST_F(TenantMigrationRecipientServiceTest,
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Hang the migration before attempting to connect to clients.
@@ -779,7 +773,6 @@ TEST_F(TenantMigrationRecipientServiceTest,
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::Nearest));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Hang the migration before attempting to connect to clients.
@@ -841,7 +834,6 @@ TEST_F(TenantMigrationRecipientServiceTest,
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryPreferred));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Hang the migration before attempting to connect to clients.
@@ -911,7 +903,6 @@ TEST_F(TenantMigrationRecipientServiceTest,
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryPreferred));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Hang the migration before attempting to connect to clients.
@@ -984,7 +975,6 @@ TEST_F(TenantMigrationRecipientServiceTest,
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::SecondaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Hang the migration before attempting to connect to clients.
@@ -1046,7 +1036,6 @@ TEST_F(TenantMigrationRecipientServiceTest,
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::SecondaryPreferred));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Hang the migration before attempting to connect to clients.
@@ -1126,7 +1115,6 @@ TEST_F(TenantMigrationRecipientServiceTest,
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryPreferred));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
initialStateDocument.setStartApplyingDonorOpTime(startApplyingOpTime);
@@ -1185,7 +1173,6 @@ TEST_F(TenantMigrationRecipientServiceTest,
"tenantA",
startMigrationDonorTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryPreferred));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Create and start the instance.
@@ -1247,7 +1234,6 @@ TEST_F(TenantMigrationRecipientServiceTest, TenantMigrationRecipientConnection_P
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryPreferred));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Create and start the instance.
@@ -1292,7 +1278,6 @@ TEST_F(TenantMigrationRecipientServiceTest, TenantMigrationRecipientConnection_B
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Create and start the instance.
@@ -1315,7 +1300,6 @@ TEST_F(TenantMigrationRecipientServiceTest,
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Create and start the instance.
@@ -1342,7 +1326,6 @@ TEST_F(TenantMigrationRecipientServiceTest, TenantMigrationRecipientGetStartOpTi
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Create and start the instance.
@@ -1382,7 +1365,6 @@ TEST_F(TenantMigrationRecipientServiceTest,
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Create and start the instance.
@@ -1428,7 +1410,6 @@ TEST_F(TenantMigrationRecipientServiceTest, TenantMigrationRecipientGetStartOpTi
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Create and start the instance.
@@ -1476,7 +1457,6 @@ TEST_F(TenantMigrationRecipientServiceTest,
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Create and start the instance.
@@ -1513,7 +1493,6 @@ TEST_F(TenantMigrationRecipientServiceTest,
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Create and start the instance. Fail to populate the remote oplog mock.
@@ -1549,7 +1528,6 @@ TEST_F(TenantMigrationRecipientServiceTest, TenantMigrationRecipientStartOplogFe
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
auto opCtx = makeOperationContext();
@@ -1605,7 +1583,6 @@ TEST_F(TenantMigrationRecipientServiceTest, TenantMigrationRecipientStartsCloner
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
auto opCtx = makeOperationContext();
@@ -1661,7 +1638,6 @@ TEST_F(TenantMigrationRecipientServiceTest, OplogFetcherFailsDuringOplogApplicat
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Skip the cloners in this test, so we provide an empty list of databases.
@@ -1718,7 +1694,6 @@ TEST_F(TenantMigrationRecipientServiceTest, OplogFetcherResumesFromTopOfOplogBuf
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// We skip cloning here as a way to simulate that the recipient service has detected an existing
@@ -1826,7 +1801,6 @@ TEST_F(TenantMigrationRecipientServiceTest, OplogFetcherNoDocInBufferToResumeFro
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// We skip cloning here as a way to simulate that the recipient service has detected an existing
@@ -1936,7 +1910,6 @@ TEST_F(TenantMigrationRecipientServiceTest, OplogApplierResumesFromLastNoOpOplog
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// We skip cloning here as a way to simulate that the recipient service has detected an existing
@@ -2062,7 +2035,6 @@ TEST_F(TenantMigrationRecipientServiceTest,
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// We skip cloning here as a way to simulate that the recipient service has detected an existing
@@ -2236,7 +2208,6 @@ TEST_F(TenantMigrationRecipientServiceTest, OplogApplierResumesFromStartDonorApp
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// We skip cloning here as a way to simulate that the recipient service has detected an existing
@@ -2382,7 +2353,6 @@ TEST_F(TenantMigrationRecipientServiceTest,
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// We skip cloning here as a way to simulate that the recipient service has detected an existing
@@ -2489,7 +2459,6 @@ TEST_F(TenantMigrationRecipientServiceTest, OplogApplierFails) {
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Skip the cloners in this test, so we provide an empty list of databases.
@@ -2556,7 +2525,6 @@ TEST_F(TenantMigrationRecipientServiceTest, StoppingApplierAllowsCompletion) {
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Skip the cloners in this test, so we provide an empty list of databases.
@@ -2612,7 +2580,6 @@ TEST_F(TenantMigrationRecipientServiceTest, TenantMigrationRecipientAddResumeTok
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Skip the cloners in this test, so we provide an empty list of databases.
@@ -2716,7 +2683,6 @@ TEST_F(TenantMigrationRecipientServiceTest, RecipientForgetMigration_BeforeRun)
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
auto fp = globalFailPointRegistry().find("pauseBeforeRunTenantMigrationRecipientInstance");
@@ -2755,7 +2721,6 @@ TEST_F(TenantMigrationRecipientServiceTest, RecipientForgetMigration_FailToIniti
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
auto opCtx = makeOperationContext();
@@ -2790,7 +2755,6 @@ TEST_F(TenantMigrationRecipientServiceTest, RecipientForgetMigration_WaitUntilSt
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
auto fp = globalFailPointRegistry().find("pauseAfterRunTenantMigrationRecipientInstance");
@@ -2875,7 +2839,6 @@ TEST_F(TenantMigrationRecipientServiceTest, RecipientForgetMigration_AfterStartO
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Create and start the instance.
@@ -2939,7 +2902,6 @@ TEST_F(TenantMigrationRecipientServiceTest, RecipientForgetMigration_AfterConsis
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Skip the cloners in this test, so we provide an empty list of databases.
@@ -3028,7 +2990,6 @@ TEST_F(TenantMigrationRecipientServiceTest, RecipientForgetMigration_AfterFail)
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Skip the cloners in this test, so we provide an empty list of databases.
@@ -3111,7 +3072,6 @@ TEST_F(TenantMigrationRecipientServiceTest, RecipientForgetMigration_FailToMarkG
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Create and start the instance.
@@ -3164,7 +3124,6 @@ TEST_F(TenantMigrationRecipientServiceTest, TenantMigrationRecipientServiceRecor
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Create and start the instance.
@@ -3200,7 +3159,6 @@ TEST_F(TenantMigrationRecipientServiceTest,
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Add an FCV value as if it was from a previous attempt.
@@ -3240,7 +3198,6 @@ TEST_F(TenantMigrationRecipientServiceTest,
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Add an FCV value as if it was from a previous attempt, making sure we set a different
@@ -3288,7 +3245,6 @@ TEST_F(TenantMigrationRecipientServiceTest,
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Create and start the instance.
@@ -3324,7 +3280,6 @@ TEST_F(TenantMigrationRecipientServiceTest, WaitUntilMigrationReachesReturnAfter
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Skip the cloners in this test, so we provide an empty list of databases.
@@ -3385,7 +3340,6 @@ TEST_F(TenantMigrationRecipientServiceTest, RecipientReceivesRetriableFetcherErr
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Create and start the instance.
@@ -3450,7 +3404,6 @@ TEST_F(TenantMigrationRecipientServiceTest, RecipientReceivesNonRetriableFetcher
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Create and start the instance.
@@ -3510,7 +3463,6 @@ TEST_F(TenantMigrationRecipientServiceTest, RecipientWillNotRetryOnExternalInter
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Create and start the instance.
@@ -3569,7 +3521,6 @@ TEST_F(TenantMigrationRecipientServiceTest, RecipientReceivesRetriableClonerErro
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Create and start the instance.
@@ -3642,7 +3593,6 @@ TEST_F(TenantMigrationRecipientServiceTest, RecipientReceivesNonRetriableClonerE
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Create and start the instance.
@@ -3697,7 +3647,6 @@ TEST_F(TenantMigrationRecipientServiceTest, IncrementNumRestartsDueToRecipientFa
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Starting a migration where the state is not 'kUninitialized' indicates that we are restarting
// from failover.
@@ -3749,7 +3698,6 @@ TEST_F(TenantMigrationRecipientServiceTest,
"tenantA",
kDefaultStartMigrationTimestamp,
ReadPreferenceSetting(ReadPreference::PrimaryOnly));
- initialStateDocument.setProtocol(MigrationProtocolEnum::kMultitenantMigrations);
initialStateDocument.setRecipientCertificateForDonor(kRecipientPEMPayload);
// Starting a migration where the state is not 'kUninitialized' indicates that we are restarting
// from failover.
diff --git a/src/mongo/db/repl/tenant_migration_state_machine.idl b/src/mongo/db/repl/tenant_migration_state_machine.idl
index c39dc376418..f8a6291d5a6 100644
--- a/src/mongo/db/repl/tenant_migration_state_machine.idl
+++ b/src/mongo/db/repl/tenant_migration_state_machine.idl
@@ -36,7 +36,6 @@ imports:
- "mongo/client/read_preference_setting.idl"
- "mongo/db/repl/replication_types.idl"
- "mongo/db/repl/tenant_migration_pem_payload.idl"
- - "mongo/db/serverless/serverless_types.idl"
- "mongo/idl/basic_types.idl"
enums:
@@ -138,10 +137,6 @@ structs:
description: >-
The wall-clock time at which the migration has started.
optional: true
- protocol:
- description: "Which migration protocol to use."
- type: MigrationProtocol
- optional: true
tenantMigrationRecipientDocument:
description: "Represents an in-progress tenant migration on the migration recipient."
@@ -176,10 +171,6 @@ structs:
description: >-
The read preference setting that the recipient will use to determine
which node in the donor replica set to clone from.
- protocol:
- description: "Which migration protocol to use."
- type: MigrationProtocol
- optional: true
state:
type: TenantMigrationRecipientState
description: "The state of the tenant migration."
diff --git a/src/mongo/db/repl/tenant_migration_util.h b/src/mongo/db/repl/tenant_migration_util.h
index 0e3f8284ff8..18d303d6984 100644
--- a/src/mongo/db/repl/tenant_migration_util.h
+++ b/src/mongo/db/repl/tenant_migration_util.h
@@ -38,17 +38,13 @@
#include "mongo/db/catalog/database.h"
#include "mongo/db/keys_collection_document_gen.h"
#include "mongo/db/pipeline/pipeline.h"
-#include "mongo/db/repl/repl_server_parameters_gen.h"
#include "mongo/db/repl/replication_coordinator.h"
-#include "mongo/db/serverless/serverless_types_gen.h"
#include "mongo/executor/scoped_task_executor.h"
#include "mongo/util/net/ssl_util.h"
#include "mongo/util/str.h"
namespace mongo {
-constexpr auto kDefaulMigrationProtocol = MigrationProtocolEnum::kMultitenantMigrations;
-
namespace {
const std::set<std::string> kUnsupportedTenantIds{"", "admin", "local", "config"};
@@ -67,26 +63,6 @@ inline Status validateDatabasePrefix(const std::string& tenantId) {
str::stream() << "cannot migrate databases for tenant \'" << tenantId << "'");
}
-inline Status validateProtocolFCVCompatibility(
- const boost::optional<MigrationProtocolEnum>& protocol) {
- if (!protocol)
- return Status::OK();
-
- if (!serverGlobalParams.featureCompatibility.isGreaterThanOrEqualTo(
- multiversion::FeatureCompatibilityVersion::kVersion_5_2)) {
- return Status(ErrorCodes::InvalidOptions,
- str::stream() << "'protocol' field is not supported for FCV below 5.2'");
- }
-
- if (*protocol == MigrationProtocolEnum::kShardMerge &&
- !repl::feature_flags::gShardMerge.isEnabled(serverGlobalParams.featureCompatibility)) {
- return Status(ErrorCodes::IllegalOperation,
- str::stream() << "protocol '" << MigrationProtocol_serializer(*protocol)
- << "' not supported");
- }
- return Status::OK();
-}
-
inline Status validateTimestampNotNull(const Timestamp& ts) {
return (!ts.isNull())
? Status::OK()
@@ -152,28 +128,6 @@ inline Status validatePrivateKeyPEMPayload(const StringData& payload) {
#endif
}
-inline void protocolTenantIdCompatibilityCheck(const MigrationProtocolEnum& protocol,
- const std::string& tenantId) {
- switch (protocol) {
- case MigrationProtocolEnum::kShardMerge: {
- // TODO SERVER-59794: Add a check to ensure tenantId is not provided for 'Merge'
- // protocol.
- break;
- }
- case MigrationProtocolEnum::kMultitenantMigrations: {
- uassert(ErrorCodes::InvalidOptions,
- str::stream() << "'tenantId' is required for protocol '"
- << MigrationProtocol_serializer(protocol) << "'",
- !tenantId.empty());
-
-
- break;
- }
- default:
- MONGO_UNREACHABLE;
- }
-}
-
/*
* Creates an ExternalKeysCollectionDocument representing an config.external_validation_keys
* document from the given the admin.system.keys document BSONObj.
diff --git a/src/mongo/db/serverless/SConscript b/src/mongo/db/serverless/SConscript
index b2ebb792ae7..0f3259271f6 100644
--- a/src/mongo/db/serverless/SConscript
+++ b/src/mongo/db/serverless/SConscript
@@ -4,18 +4,6 @@ Import("env")
env = env.Clone()
env.Library(
- target='serverless_types_idl',
- source=[
- 'serverless_types.idl',
- ],
- LIBDEPS=[
- '$BUILD_DIR/mongo/base',
- '$BUILD_DIR/mongo/idl/basic_types',
- '$BUILD_DIR/mongo/idl/idl_parser'
- ],
-)
-
-env.Library(
target='tenant_split_state_machine',
source=[
'tenant_split_state_machine.idl',
diff --git a/src/mongo/db/serverless/serverless_types.idl b/src/mongo/db/serverless/serverless_types.idl
deleted file mode 100644
index e906e7a52c3..00000000000
--- a/src/mongo/db/serverless/serverless_types.idl
+++ /dev/null
@@ -1,40 +0,0 @@
-# Copyright (C) 2021-present MongoDB, Inc.
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the Server Side Public License, version 1,
-# as published by MongoDB, Inc.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# Server Side Public License for more details.
-#
-# You should have received a copy of the Server Side Public License
-# along with this program. If not, see
-# <http://www.mongodb.com/licensing/server-side-public-license>.
-#
-# As a special exception, the copyright holders give permission to link the
-# code of portions of this program with the OpenSSL library under certain
-# conditions as described in each individual source file and distribute
-# linked combinations including the program with the OpenSSL library. You
-# must comply with the Server Side Public License in all respects for
-# all of the code used other than as permitted herein. If you modify file(s)
-# with this exception, you may extend this exception to your version of the
-# file(s), but you are not obligated to do so. If you do not wish to do so,
-# delete this exception statement from your version. If you delete this
-# exception statement from all source files in the program, then also delete
-# it in the license file.
-#
-global:
- cpp_namespace: "mongo"
-
-imports:
- - "mongo/idl/basic_types.idl"
-
-enums:
- MigrationProtocol:
- description: "Determines which tenant migration protocol to use."
- type: string
- values:
- kMultitenantMigrations: "multitenant migrations"
- kShardMerge: "shard merge"