diff options
Diffstat (limited to 'src/mongo/s')
6 files changed, 52 insertions, 29 deletions
diff --git a/src/mongo/s/catalog/sharding_catalog_client_impl.cpp b/src/mongo/s/catalog/sharding_catalog_client_impl.cpp index 80a826bfbc9..bf1bd427744 100644 --- a/src/mongo/s/catalog/sharding_catalog_client_impl.cpp +++ b/src/mongo/s/catalog/sharding_catalog_client_impl.cpp @@ -811,8 +811,18 @@ Status ShardingCatalogClientImpl::runUserManagementWriteCommand(OperationContext } writeConcern = sw.getValue(); - if ((writeConcern.wNumNodes != 1) && - (writeConcern.wMode != WriteConcernOptions::kMajority)) { + auto isValidUserManagementWriteConcern = stdx::visit( + [](auto&& arg) { + using T = std::decay_t<decltype(arg)>; + if constexpr (std::is_same_v<T, std::string>) + return arg == WriteConcernOptions::kMajority; + else if constexpr (std::is_same_v<T, int64_t>) + return arg == 1; + return false; + }, + writeConcern.w); + + if (!isValidUserManagementWriteConcern) { return {ErrorCodes::InvalidOptions, str::stream() << "Invalid replication write concern. User management write " "commands may only use w:1 or w:'majority', got: " @@ -820,8 +830,7 @@ Status ShardingCatalogClientImpl::runUserManagementWriteCommand(OperationContext } } - writeConcern.wMode = WriteConcernOptions::kMajority; - writeConcern.wNumNodes = 0; + writeConcern.w = WriteConcernOptions::kMajority; BSONObjBuilder modifiedCmd; if (!initialCmdHadWriteConcern) { @@ -895,9 +904,9 @@ Status ShardingCatalogClientImpl::applyChunkOpsDeprecated(OperationContext* opCt const ChunkVersion& lastChunkVersion, const WriteConcernOptions& writeConcern, repl::ReadConcernLevel readConcern) { - invariant(serverGlobalParams.clusterRole == ClusterRole::ConfigServer || - (readConcern == repl::ReadConcernLevel::kMajorityReadConcern && - writeConcern.wMode == WriteConcernOptions::kMajority)); + invariant( + serverGlobalParams.clusterRole == ClusterRole::ConfigServer || + (readConcern == repl::ReadConcernLevel::kMajorityReadConcern && writeConcern.isMajority())); BSONObj cmd = BSON("applyOps" << updateOps << "preCondition" << preCondition << WriteConcernOptions::kWriteConcernField << writeConcern.toBSON()); diff --git a/src/mongo/s/commands/cluster_rwc_defaults_commands.cpp b/src/mongo/s/commands/cluster_rwc_defaults_commands.cpp index 4ff2186adfa..606608cc914 100644 --- a/src/mongo/s/commands/cluster_rwc_defaults_commands.cpp +++ b/src/mongo/s/commands/cluster_rwc_defaults_commands.cpp @@ -78,7 +78,7 @@ public: "A custom write concern is being set as the default write concern in a sharded " "cluster. This set is unchecked, but if the custom write concern does not " "exist on all shards in the cluster, errors will occur upon writes", - "customWriteConcern"_attr = optWC->wMode); + "customWriteConcern"_attr = stdx::get<std::string>(optWC->w)); } } ReadWriteConcernDefaults::get(opCtx).setDefault(opCtx, std::move(newDefaults)); diff --git a/src/mongo/s/request_types/balance_chunk_request_test.cpp b/src/mongo/s/request_types/balance_chunk_request_test.cpp index fbffcc9da77..a9e3d133519 100644 --- a/src/mongo/s/request_types/balance_chunk_request_test.cpp +++ b/src/mongo/s/request_types/balance_chunk_request_test.cpp @@ -114,7 +114,9 @@ TEST(BalanceChunkRequest, ParseFromConfigCommandWithSecondaryThrottle) { const auto& secondaryThrottle = request.getSecondaryThrottle(); ASSERT_EQ(MigrationSecondaryThrottleOptions::kOn, secondaryThrottle.getSecondaryThrottle()); - ASSERT_EQ(2, secondaryThrottle.getWriteConcern().wNumNodes); + + auto writeConcern = secondaryThrottle.getWriteConcern(); + ASSERT_EQ(2, stdx::get<int64_t>(writeConcern.w)); } } // namespace diff --git a/src/mongo/s/request_types/migration_secondary_throttle_options.cpp b/src/mongo/s/request_types/migration_secondary_throttle_options.cpp index c143fc9ea60..6142cff16d2 100644 --- a/src/mongo/s/request_types/migration_secondary_throttle_options.cpp +++ b/src/mongo/s/request_types/migration_secondary_throttle_options.cpp @@ -56,7 +56,8 @@ MigrationSecondaryThrottleOptions MigrationSecondaryThrottleOptions::create( MigrationSecondaryThrottleOptions MigrationSecondaryThrottleOptions::createWithWriteConcern( const WriteConcernOptions& writeConcern) { // Optimize on write concern, which makes no difference - if (writeConcern.wNumNodes <= 1 && writeConcern.wMode.empty()) { + if (stdx::holds_alternative<int64_t>(writeConcern.w) && + stdx::get<int64_t>(writeConcern.w) <= 1) { return MigrationSecondaryThrottleOptions(kOff, boost::none); } diff --git a/src/mongo/s/request_types/migration_secondary_throttle_options_test.cpp b/src/mongo/s/request_types/migration_secondary_throttle_options_test.cpp index 59c3fb130bd..4d42b3cc8d5 100644 --- a/src/mongo/s/request_types/migration_secondary_throttle_options_test.cpp +++ b/src/mongo/s/request_types/migration_secondary_throttle_options_test.cpp @@ -89,7 +89,8 @@ TEST(MigrationSecondaryThrottleOptions, EnabledInCommandBSONWithSimpleWriteConce ASSERT(options.isWriteConcernSpecified()); WriteConcernOptions writeConcern = options.getWriteConcern(); - ASSERT_EQ(2, writeConcern.wNumNodes); + ASSERT(stdx::holds_alternative<int64_t>(writeConcern.w)); + ASSERT_EQ(2, stdx::get<int64_t>(writeConcern.w)); ASSERT_EQ(static_cast<int>(WriteConcernOptions::SyncMode::UNSET), static_cast<int>(writeConcern.syncMode)); ASSERT_EQ(WriteConcernOptions::kNoTimeout, writeConcern.wTimeout); @@ -104,7 +105,8 @@ TEST(MigrationSecondaryThrottleOptions, EnabledInCommandBSONWithCompleteWriteCon ASSERT(options.isWriteConcernSpecified()); WriteConcernOptions writeConcern = options.getWriteConcern(); - ASSERT_EQ(3, writeConcern.wNumNodes); + ASSERT(stdx::holds_alternative<int64_t>(writeConcern.w)); + ASSERT_EQ(3, stdx::get<int64_t>(writeConcern.w)); ASSERT_EQ(static_cast<int>(WriteConcernOptions::SyncMode::JOURNAL), static_cast<int>(writeConcern.syncMode)); ASSERT_EQ(WriteConcernOptions::kNoTimeout, writeConcern.wTimeout); @@ -141,7 +143,8 @@ TEST(MigrationSecondaryThrottleOptions, EnabledInBalancerConfigWithSimpleWriteCo ASSERT(options.isWriteConcernSpecified()); WriteConcernOptions writeConcern = options.getWriteConcern(); - ASSERT_EQ(2, writeConcern.wNumNodes); + ASSERT(stdx::holds_alternative<int64_t>(writeConcern.w)); + ASSERT_EQ(2, stdx::get<int64_t>(writeConcern.w)); ASSERT_EQ(static_cast<int>(WriteConcernOptions::SyncMode::UNSET), static_cast<int>(writeConcern.syncMode)); ASSERT_EQ(WriteConcernOptions::kNoTimeout, writeConcern.wTimeout); @@ -155,7 +158,8 @@ TEST(MigrationSecondaryThrottleOptions, EnabledInBalancerConfigWithCompleteWrite ASSERT(options.isWriteConcernSpecified()); WriteConcernOptions writeConcern = options.getWriteConcern(); - ASSERT_EQ(3, writeConcern.wNumNodes); + ASSERT(stdx::holds_alternative<int64_t>(writeConcern.w)); + ASSERT_EQ(3, stdx::get<int64_t>(writeConcern.w)); ASSERT_EQ(static_cast<int>(WriteConcernOptions::SyncMode::JOURNAL), static_cast<int>(writeConcern.syncMode)); ASSERT_EQ(WriteConcernOptions::kNoTimeout, writeConcern.wTimeout); @@ -189,19 +193,19 @@ TEST(MigrationSecondaryThrottleOptions, IgnoreWriteConcernWhenSecondaryThrottleA } TEST(MigrationSecondaryThrottleOptions, EqualityOperatorSameValue) { - auto value1 = MigrationSecondaryThrottleOptions::createWithWriteConcern( - WriteConcernOptions("majority", WriteConcernOptions::SyncMode::JOURNAL, 30000)); - auto value2 = MigrationSecondaryThrottleOptions::createWithWriteConcern( - WriteConcernOptions("majority", WriteConcernOptions::SyncMode::JOURNAL, 30000)); + auto value1 = MigrationSecondaryThrottleOptions::createWithWriteConcern(WriteConcernOptions{ + "majority", WriteConcernOptions::SyncMode::JOURNAL, Milliseconds{30000}}); + auto value2 = MigrationSecondaryThrottleOptions::createWithWriteConcern(WriteConcernOptions{ + "majority", WriteConcernOptions::SyncMode::JOURNAL, Milliseconds{30000}}); ASSERT(value1 == value2); } TEST(MigrationSecondaryThrottleOptions, EqualityOperatorDifferentValues) { - auto value1 = MigrationSecondaryThrottleOptions::createWithWriteConcern( - WriteConcernOptions("majority", WriteConcernOptions::SyncMode::JOURNAL, 30000)); - auto value2 = MigrationSecondaryThrottleOptions::createWithWriteConcern( - WriteConcernOptions("majority", WriteConcernOptions::SyncMode::JOURNAL, 60000)); + auto value1 = MigrationSecondaryThrottleOptions::createWithWriteConcern(WriteConcernOptions{ + "majority", WriteConcernOptions::SyncMode::JOURNAL, Milliseconds{30000}}); + auto value2 = MigrationSecondaryThrottleOptions::createWithWriteConcern(WriteConcernOptions{ + "majority", WriteConcernOptions::SyncMode::JOURNAL, Milliseconds{60000}}); ASSERT(!(value1 == value2)); } diff --git a/src/mongo/s/transaction_router_test.cpp b/src/mongo/s/transaction_router_test.cpp index 7c4c0c20cda..6d27a481839 100644 --- a/src/mongo/s/transaction_router_test.cpp +++ b/src/mongo/s/transaction_router_test.cpp @@ -1598,7 +1598,8 @@ TEST_F(TransactionRouterTest, CommitWithRecoveryTokenWithNoParticipants) { opCtx->setLogicalSessionId(lsid); opCtx->setTxnNumber(txnNum); - WriteConcernOptions writeConcern(10, WriteConcernOptions::SyncMode::NONE, 0); + WriteConcernOptions writeConcern( + 10, WriteConcernOptions::SyncMode::NONE, WriteConcernOptions::kNoTimeout); opCtx->setWriteConcern(writeConcern); RouterOperationContextSession scopedSession(opCtx); @@ -1669,7 +1670,8 @@ TEST_F(TransactionRouterTestWithDefaultSession, auto opCtx = operationContext(); opCtx->setTxnNumber(txnNum); - WriteConcernOptions writeConcern(10, WriteConcernOptions::SyncMode::NONE, 0); + WriteConcernOptions writeConcern( + 10, WriteConcernOptions::SyncMode::NONE, WriteConcernOptions::kNoTimeout); opCtx->setWriteConcern(writeConcern); auto txnRouter = TransactionRouter::get(opCtx); @@ -1764,7 +1766,8 @@ TEST_F(TransactionRouterTestWithDefaultSession, auto opCtx = operationContext(); opCtx->setTxnNumber(txnNum); - WriteConcernOptions writeConcern(10, WriteConcernOptions::SyncMode::NONE, 0); + WriteConcernOptions writeConcern( + 10, WriteConcernOptions::SyncMode::NONE, WriteConcernOptions::kNoTimeout); opCtx->setWriteConcern(writeConcern); auto txnRouter = TransactionRouter::get(opCtx); @@ -1861,7 +1864,8 @@ TEST_F(TransactionRouterTest, CommitWithEmptyRecoveryToken) { opCtx->setLogicalSessionId(lsid); opCtx->setTxnNumber(txnNum); - WriteConcernOptions writeConcern(10, WriteConcernOptions::SyncMode::NONE, 0); + WriteConcernOptions writeConcern( + 10, WriteConcernOptions::SyncMode::NONE, WriteConcernOptions::kNoTimeout); opCtx->setWriteConcern(writeConcern); RouterOperationContextSession scopedSession(opCtx); @@ -1883,7 +1887,8 @@ TEST_F(TransactionRouterTest, CommitWithRecoveryTokenWithUnknownShard) { opCtx->setLogicalSessionId(lsid); opCtx->setTxnNumber(txnNum); - WriteConcernOptions writeConcern(10, WriteConcernOptions::SyncMode::NONE, 0); + WriteConcernOptions writeConcern( + 10, WriteConcernOptions::SyncMode::NONE, WriteConcernOptions::kNoTimeout); opCtx->setWriteConcern(writeConcern); RouterOperationContextSession scopedSession(opCtx); @@ -1913,7 +1918,8 @@ TEST_F(TransactionRouterTestWithDefaultSession, CommitWithRecoveryTokenAndTxnRet operationContext()->setTxnNumber(txnNum); - WriteConcernOptions writeConcern(10, WriteConcernOptions::SyncMode::NONE, 0); + WriteConcernOptions writeConcern( + 10, WriteConcernOptions::SyncMode::NONE, WriteConcernOptions::kNoTimeout); operationContext()->setWriteConcern(writeConcern); auto txnRouter = TransactionRouter::get(operationContext()); @@ -2779,7 +2785,8 @@ TEST_F(TransactionRouterTestWithDefaultSession, AbortPropagatesWriteConcern) { auto opCtx = operationContext(); auto txnRouter = TransactionRouter::get(opCtx); - WriteConcernOptions writeConcern(10, WriteConcernOptions::SyncMode::NONE, 0); + WriteConcernOptions writeConcern( + 10, WriteConcernOptions::SyncMode::NONE, WriteConcernOptions::kNoTimeout); opCtx->setWriteConcern(writeConcern); txnRouter.beginOrContinueTxn( |