diff options
author | Gregory Wlodarek <gregory.wlodarek@mongodb.com> | 2021-11-04 23:02:33 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-11-04 23:32:41 +0000 |
commit | e47af06d2f144eab78746daac71005bbb73e69f4 (patch) | |
tree | cee5cf59b652b728a101aaabc6689644d2c22823 | |
parent | 1a99933a489e6620a72899011054352f27e3282a (diff) | |
download | mongo-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.
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" |