summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHaley Connelly <haley.connelly@mongodb.com>2021-07-19 21:33:49 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-08-17 21:00:21 +0000
commitab120562f17f1ff040933ecd77088f78ac6fdc83 (patch)
tree6898ee206aa8b10057f6c76bcccdeb6d0a61c4ec
parent7758ae1a0a21c662f028a687ff6b25506a52c33c (diff)
downloadmongo-ab120562f17f1ff040933ecd77088f78ac6fdc83.tar.gz
SERVER-58342 Allow specifying of reshardCollection zones to be empty
(cherry picked from commit 68f6c01d0f0452a9aef96e2da6289ce40fac2e41)
-rw-r--r--jstests/sharding/reshard_collection_basic.js11
-rw-r--r--src/mongo/db/s/resharding/resharding_coordinator_service.cpp3
2 files changed, 13 insertions, 1 deletions
diff --git a/jstests/sharding/reshard_collection_basic.js b/jstests/sharding/reshard_collection_basic.js
index bae99efdaba..94cb2e7052c 100644
--- a/jstests/sharding/reshard_collection_basic.js
+++ b/jstests/sharding/reshard_collection_basic.js
@@ -339,6 +339,17 @@ assertReshardCollOk({
},
1);
+jsTest.log("Succeed if zones are empty");
+assertReshardCollOk({
+ reshardCollection: ns,
+ key: {newKey: 1},
+ unique: false,
+ numInitialChunks: 1,
+ collation: {locale: 'simple'},
+ zones: []
+},
+ 1);
+
jsTest.log("Succeed with hashed shard key that provides enough cardinality.");
assert.commandWorked(
mongos.adminCommand({shardCollection: ns, key: {a: "hashed"}, numInitialChunks: 5}));
diff --git a/src/mongo/db/s/resharding/resharding_coordinator_service.cpp b/src/mongo/db/s/resharding/resharding_coordinator_service.cpp
index eb419000180..acfa9b205cc 100644
--- a/src/mongo/db/s/resharding/resharding_coordinator_service.cpp
+++ b/src/mongo/db/s/resharding/resharding_coordinator_service.cpp
@@ -861,7 +861,8 @@ ReshardingCoordinatorExternalStateImpl::calculateParticipantShardsAndChunks(
const auto tempNs = coordinatorDoc.getTempReshardingNss();
boost::optional<std::vector<mongo::TagsType>> parsedZones;
- if (auto rawBSONZones = coordinatorDoc.getZones()) {
+ auto rawBSONZones = coordinatorDoc.getZones();
+ if (rawBSONZones && rawBSONZones->size() != 0) {
parsedZones.emplace();
parsedZones->reserve(rawBSONZones->size());