diff options
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" |