diff options
author | Moustafa Maher <m.maher@10gen.com> | 2021-09-16 21:59:20 +0000 |
---|---|---|
committer | Moustafa Maher <m.maher@10gen.com> | 2021-09-17 00:48:06 +0000 |
commit | 17be535d5fc870764626486bfa4de26376d5c00b (patch) | |
tree | 82d05fd6184ededcbc8ff86b1471cbdfd8f554df | |
parent | 0611b8afe4cf77899d9ca9a1fbda02498ce83ad3 (diff) | |
download | mongo-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.js | 153 | ||||
-rw-r--r-- | src/mongo/db/s/config/sharding_catalog_manager_shard_operations.cpp | 32 |
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. |