summaryrefslogtreecommitdiff
path: root/jstests/replsets
diff options
context:
space:
mode:
authorSpencer T Brody <spencer@mongodb.com>2016-01-06 15:21:55 -0500
committerSpencer T Brody <spencer@mongodb.com>2016-01-07 14:45:07 -0500
commit43209263a40af233dd1fae25aa719c7b2b304480 (patch)
tree74e1502e3bb2b3388b2c76a783d39f829ff0aa31 /jstests/replsets
parent7f6f5f4248e22857749382b72527581346d6b6fc (diff)
downloadmongo-43209263a40af233dd1fae25aa719c7b2b304480.tar.gz
SERVER-20580 Re-enable csrs_upgrade_during_migrate.js test
Diffstat (limited to 'jstests/replsets')
-rw-r--r--jstests/replsets/rslib.js33
1 files changed, 33 insertions, 0 deletions
diff --git a/jstests/replsets/rslib.js b/jstests/replsets/rslib.js
index bff0a04182d..6635c4be14b 100644
--- a/jstests/replsets/rslib.js
+++ b/jstests/replsets/rslib.js
@@ -1,4 +1,6 @@
var wait, occasionally, reconnect, getLatestOp, waitForAllMembers, reconfig, awaitOpTime;
+var waitUntilAllNodesCaughtUp;
+
(function () {
"use strict";
var count = 0;
@@ -148,4 +150,35 @@ awaitOpTime = function (node, opTime) {
});
};
+/**
+ * Uses the results of running replSetGetStatus against an arbitrary replset node to wait until
+ * all nodes in the set are replicated through the same optime.
+ */
+waitUntilAllNodesCaughtUp = function(rs) {
+ var rsStatus;
+ var firstConflictingIndex;
+ var ot;
+ var otherOt;
+ assert.soon(function () {
+ rsStatus = rs[0].adminCommand('replSetGetStatus');
+ if (rsStatus.ok != 1) {
+ return false;
+ }
+ assert.eq(rs.length, rsStatus.members.length, tojson(rsStatus));
+ ot = rsStatus.members[0].optime;
+ for (var i = 1; i < rsStatus.members.length; ++i) {
+ otherOt = rsStatus.members[i].optime;
+ if (bsonWoCompare({ts: otherOt.ts}, {ts: ot.ts}) ||
+ bsonWoCompare({t: otherOt.t}, {t: ot.t})) {
+ firstConflictingIndex = i;
+ return false;
+ }
+ }
+ return true;
+ }, function () {
+ return "Optimes of members 0 (" + tojson(ot) + ") and " + firstConflictingIndex + " (" +
+ tojson(otherOt) + ") are different in " + tojson(rsStatus);
+ });
+};
+
}());