summaryrefslogtreecommitdiff
path: root/src/mongo/s
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/s')
-rw-r--r--src/mongo/s/catalog/sharding_catalog_client_impl.cpp23
-rw-r--r--src/mongo/s/commands/cluster_rwc_defaults_commands.cpp2
-rw-r--r--src/mongo/s/request_types/balance_chunk_request_test.cpp4
-rw-r--r--src/mongo/s/request_types/migration_secondary_throttle_options.cpp3
-rw-r--r--src/mongo/s/request_types/migration_secondary_throttle_options_test.cpp28
-rw-r--r--src/mongo/s/transaction_router_test.cpp21
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(