mirror of https://github.com/mongodb/mongo
57 lines
2.2 KiB
JavaScript
57 lines
2.2 KiB
JavaScript
/**
|
|
* Provides helpers for configuring the balancer.
|
|
*
|
|
* Intended for use by workloads testing sharding (i.e., workloads starting with 'sharded_').
|
|
*/
|
|
|
|
export var BalancerHelper = (function () {
|
|
// Disables balancing for a given collection.
|
|
function disableBalancerForCollection(db, ns) {
|
|
assert.commandWorked(db.getSiblingDB("config").collections.update({_id: ns}, {$set: {"noBalance": true}}));
|
|
}
|
|
|
|
// Enables balancing for a given collection.
|
|
function enableBalancerForCollection(db, ns) {
|
|
assert.commandWorked(db.getSiblingDB("config").collections.update({_id: ns}, {$unset: {"noBalance": 1}}));
|
|
}
|
|
|
|
// Joins the ongoing balancer round (if enabled at all).
|
|
function joinBalancerRound(db, timeout) {
|
|
timeout = timeout || 60000;
|
|
|
|
let initialStatus = db.adminCommand({balancerStatus: 1});
|
|
let currentStatus;
|
|
assert.soon(
|
|
function () {
|
|
currentStatus = db.adminCommand({balancerStatus: 1});
|
|
if (currentStatus.mode === "off") {
|
|
// Balancer is disabled.
|
|
return true;
|
|
}
|
|
if (!friendlyEqual(currentStatus.term, initialStatus.term)) {
|
|
// A new primary of the csrs has been elected
|
|
initialStatus = currentStatus;
|
|
return false;
|
|
}
|
|
assert.gte(
|
|
currentStatus.numBalancerRounds,
|
|
initialStatus.numBalancerRounds,
|
|
"Number of balancer rounds moved back in time unexpectedly. Current status: " +
|
|
tojson(currentStatus) +
|
|
", initial status: " +
|
|
tojson(initialStatus),
|
|
);
|
|
return currentStatus.numBalancerRounds > initialStatus.numBalancerRounds;
|
|
},
|
|
"Latest balancer status: " + tojson(currentStatus),
|
|
timeout,
|
|
);
|
|
}
|
|
|
|
return {
|
|
disableBalancerForCollection: disableBalancerForCollection,
|
|
enableBalancerForCollection: enableBalancerForCollection,
|
|
joinBalancerRound: joinBalancerRound,
|
|
};
|
|
})();
|