summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMoustafa Maher <m.maher@10gen.com>2021-09-16 21:59:20 +0000
committerMoustafa Maher <m.maher@10gen.com>2021-09-17 00:48:06 +0000
commit17be535d5fc870764626486bfa4de26376d5c00b (patch)
tree82d05fd6184ededcbc8ff86b1471cbdfd8f554df
parent0611b8afe4cf77899d9ca9a1fbda02498ce83ad3 (diff)
downloadmongo-17be535d5fc870764626486bfa4de26376d5c00b.tar.gz
Revert "SERVER-56800 Fail addShard if CWWC disagrees with existing CWWC on cluster"
This reverts commit f19b9b5fc2a0bc4eed0939542f18357f0b06555d.
-rw-r--r--jstests/sharding/cwwc_conflict_add_shard.js153
-rw-r--r--src/mongo/db/s/config/sharding_catalog_manager_shard_operations.cpp32
2 files changed, 0 insertions, 185 deletions
diff --git a/jstests/sharding/cwwc_conflict_add_shard.js b/jstests/sharding/cwwc_conflict_add_shard.js
deleted file mode 100644
index eb1e95f2b84..00000000000
--- a/jstests/sharding/cwwc_conflict_add_shard.js
+++ /dev/null
@@ -1,153 +0,0 @@
-/**
- * Tests adding shard to sharded cluster will fail if CWWC on shard disagrees with existing CWWC on
- * cluster.
- * @tags: [requires_fcv_50, requires_majority_read_concern, requires_persistence]
- */
-
-(function() {
-"use strict";
-
-const st = new ShardingTest({shards: 1, mongos: 1});
-const admin = st.getDB('admin');
-let shardServer;
-
-function createNewShard() {
- if (shardServer) {
- shardServer.stopSet();
- }
-
- shardServer = new ReplSetTest({name: "shardServer", nodes: 3, useHostName: true});
- shardServer.startSet();
- shardServer.initiate();
-}
-
-function convertShardToRS() {
- jsTestLog("Converting shard server to replicaSet.");
- shardServer.nodes.forEach(function(node) {
- delete node.fullOptions.shardsvr;
- });
-
- shardServer.restart(shardServer.nodes);
- shardServer.awaitNodesAgreeOnPrimary();
-}
-
-function convertRSToShard() {
- jsTestLog("Converting replicaSet server to shardServer.");
- shardServer.restart(shardServer.nodes, {shardsvr: ""});
- shardServer.awaitNodesAgreeOnPrimary();
-}
-
-function removeShardAndWait() {
- jsTestLog("Removing the shard from the cluster should succeed.");
- const removeShardCmd = {removeShard: shardServer.getURL()};
- const res = st.s.adminCommand(removeShardCmd);
-
- assert.commandWorked(res);
- assert(res.state === "started");
-
- assert.soon(function() {
- let res = st.s.adminCommand(removeShardCmd);
- if (res.state === "completed") {
- return true;
- } else {
- jsTestLog("Still waiting for shard removal to complete:");
- printjson(res);
- return false;
- }
- });
-
- jsTestLog("Shard removal completed.");
-}
-
-function testAddShard(cwwcOnShard, cwwcOnCluster, shouldSucceed, fixCWWCOnShard) {
- jsTestLog("Running addShard test with CWWCOnShard: " + tojson(cwwcOnShard) +
- " and CWWCOnCluster: " + tojson(cwwcOnCluster));
-
- let cwwcOnShardCmd, cwwcOnClusterCmd;
-
- if (cwwcOnShard) {
- jsTestLog("Setting the CWWC on shard before adding it.");
- cwwcOnShardCmd = {
- setDefaultRWConcern: 1,
- defaultWriteConcern: cwwcOnShard,
- writeConcern: {w: "majority"}
- };
- assert.commandWorked(shardServer.getPrimary().adminCommand(cwwcOnShardCmd));
- shardServer.awaitReplication();
- }
-
- if (cwwcOnCluster) {
- jsTestLog("Setting the CWWC on cluster before adding shard.");
- cwwcOnClusterCmd = {
- setDefaultRWConcern: 1,
- defaultWriteConcern: cwwcOnCluster,
- writeConcern: {w: "majority"}
- };
- assert.commandWorked(st.s.adminCommand(cwwcOnClusterCmd));
- }
-
- jsTestLog("Attempting to add shard to the cluster");
- convertRSToShard();
-
- if (!shouldSucceed) {
- jsTestLog("Adding shard to the cluster should fail.");
- assert.commandFailed(admin.runCommand({addshard: shardServer.getURL()}));
-
- if (fixCWWCOnShard) {
- convertShardToRS();
- jsTestLog("Setting the CWWC on shard to match CWWC on cluster.");
- assert.commandWorked(shardServer.getPrimary().adminCommand(cwwcOnClusterCmd));
- shardServer.awaitReplication();
- convertRSToShard();
- } else {
- jsTestLog("Setting the CWWC on cluster to match CWWC on shard.");
- assert.commandWorked(st.s.adminCommand(cwwcOnShardCmd));
- }
- }
-
- jsTestLog("Adding shard to the cluster should succeed.");
- assert.commandWorked(admin.runCommand({addshard: shardServer.getURL()}));
-
- // Cleanup.
- removeShardAndWait();
- convertShardToRS();
-}
-
-const cwwc = [
- {w: 1},
- {w: "majority"},
- {w: "majority", wtimeout: 0, j: false},
- {w: "majority", wtimeout: 0, j: true}
-];
-
-createNewShard();
-// No CWWC set neither on shard nor cluster should succeed.
-testAddShard(undefined /* cwwcOnShard */, undefined /* cwwcOnCluster */, true /* shouldSucceed */);
-
-// No CWWC set on cluster while shard has CWWC should fail.
-testAddShard(cwwc[0] /* cwwcOnShard */,
- undefined /* cwwcOnCluster */,
- false /* shouldSucceed */,
- false /* fixCWWCOnShard */);
-
-createNewShard();
-// No CWWC set on shard while cluster has CWWC should succeed.
-testAddShard(undefined /* cwwcOnShard */, cwwc[0] /* cwwcOnCluster */, true /* shouldSucceed */);
-
-for (var i = 0; i < cwwc.length; i++) {
- // Setting the same CWWC on shard and cluster should succeed.
- testAddShard(cwwc[i] /* cwwcOnShard */, cwwc[i] /* cwwcOnCluster */, true /* shouldSucceed */);
- for (var j = i + 1; j < cwwc.length; j++) {
- for (const fixCWWCOnShard of [true, false]) {
- // Setting different CWWC on shard and cluster should fail.
- testAddShard(cwwc[i] /* cwwcOnShard */,
- cwwc[j] /* cwwcOnCluster */,
- false /* shouldSucceed */,
- fixCWWCOnShard);
- }
- }
-}
-
-st.stop();
-shardServer.stopSet();
-})();
diff --git a/src/mongo/db/s/config/sharding_catalog_manager_shard_operations.cpp b/src/mongo/db/s/config/sharding_catalog_manager_shard_operations.cpp
index c4bdc685872..c6a59af44e7 100644
--- a/src/mongo/db/s/config/sharding_catalog_manager_shard_operations.cpp
+++ b/src/mongo/db/s/config/sharding_catalog_manager_shard_operations.cpp
@@ -38,7 +38,6 @@
#include <set>
#include "mongo/base/status_with.h"
-#include "mongo/bson/bsonobj_comparator.h"
#include "mongo/bson/util/bson_extract.h"
#include "mongo/client/connection_string.h"
#include "mongo/client/read_preference.h"
@@ -395,37 +394,6 @@ StatusWith<ShardType> ShardingCatalogManager::_validateHostAsShard(
<< " as a shard since it is a config server"};
}
- if (resIsMaster.hasField(HelloCommandReply::kCwwcFieldName)) {
- auto cwwcOnShard = WriteConcernOptions::parse(
- resIsMaster.getObjectField(HelloCommandReply::kCwwcFieldName))
- .getValue()
- .toBSON();
-
- auto cachedCWWC = ReadWriteConcernDefaults::get(opCtx).getCWWC(opCtx);
- if (!cachedCWWC) {
- return {ErrorCodes::OperationFailed,
- str::stream() << "Cannot add " << connectionString.toString()
- << " as a shard since the cluster-wide write concern is set on "
- "the shard and not set on the cluster. Set the CWWC on the "
- "cluster to the same CWWC as the shard and try again."
- << " The CWWC on the shard is (" << cwwcOnShard << ")."};
- }
-
- auto cwwcOnConfig = cachedCWWC.get().toBSON();
- BSONObjComparator comparator(
- BSONObj(), BSONObjComparator::FieldNamesMode::kConsider, nullptr);
- if (comparator.compare(cwwcOnShard, cwwcOnConfig) != 0) {
- return {
- ErrorCodes::OperationFailed,
- str::stream()
- << "Cannot add " << connectionString.toString()
- << " as a shard since the cluster-wide write concern set on the shard doesn't "
- "match the one set on the cluster. Make sure they match and try again."
- << " The CWWC on the shard is (" << cwwcOnShard
- << "), and the CWWC on the cluster is (" << cwwcOnConfig << ")."};
- }
- }
-
// If the shard is part of a replica set, make sure all the hosts mentioned in the connection
// string are part of the set. It is fine if not all members of the set are mentioned in the
// connection string, though.