summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormatt dannenberg <matt.dannenberg@10gen.com>2015-11-02 09:01:02 -0500
committermatt dannenberg <matt.dannenberg@10gen.com>2015-11-02 14:29:21 -0500
commit42d0577042dbc4b63e54eb40765c052baafed555 (patch)
tree935d545c3f6f89bdeee2adfa732570a426b41b33
parent70c5435a48b5a8e8c6559371b1136ecdca0d49ae (diff)
downloadmongo-42d0577042dbc4b63e54eb40765c052baafed555.tar.gz
SERVER-21237 fix ReplSetTest.prototype.awaitReplication to use getReplSetStatus rather than query the oplog directly
-rw-r--r--jstests/replsets/remove1.js3
-rw-r--r--src/mongo/shell/replsettest.js78
2 files changed, 36 insertions, 45 deletions
diff --git a/jstests/replsets/remove1.js b/jstests/replsets/remove1.js
index b70de7c257d..745cf3de7f0 100644
--- a/jstests/replsets/remove1.js
+++ b/jstests/replsets/remove1.js
@@ -82,8 +82,7 @@ wait(function() {
// master will likely step down (and close all connections) sometime after the reconfig if it
// thinks the newly re-added secondary is down. So wait for that then reconnect the connection
// we are using.
- replTest.awaitReplication();
- reconnect(master);
+ master = replTest.getMaster();
printjson(master.getDB("admin").runCommand({replSetGetStatus:1}));
master.setSlaveOk();
diff --git a/src/mongo/shell/replsettest.js b/src/mongo/shell/replsettest.js
index 88fae5c84e9..8a844f105e9 100644
--- a/src/mongo/shell/replsettest.js
+++ b/src/mongo/shell/replsettest.js
@@ -514,13 +514,18 @@ ReplSetTest.prototype.reInitiate = function() {
}
}
+ReplSetTest.prototype.getLastOpTime = function(conn) {
+ var replStatus = conn.getDB("admin").runCommand("replSetGetStatus");
+ var myOpTime = replStatus.members.filter(m=>m.self)[0].optime;
+ return myOpTime.ts ? myOpTime.ts : myOpTime;
+}
+
ReplSetTest.prototype.getLastOpTimeWritten = function() {
- this.getMaster();
+ var master = this.getMaster();
var self = this;
assert.soon(function() {
try {
- var cursor = self.liveNodes.master.getDB("local")['oplog.rs'].find({});
- self.latest = cursor.sort({'$natural': -1}).limit(1).next()['ts'];
+ self.latest = self.getLastOpTime(master);
}
catch(e) {
print("ReplSetTest caught exception " + e);
@@ -589,24 +594,24 @@ ReplSetTest.prototype.awaitReplication = function(timeout) {
// get the latest config version from master. if there is a problem, grab master and try again
var configVersion;
- var newestOplogEntry;
+ var masterOpTime;
var masterName;
try {
var master = this.getMaster();
- configVersion = master.getDB("local")['system.replset'].findOne().version;
- newestOplogEntry = master.getDB("local")['oplog.rs'].findOne();
+ configVersion = this.conf().version;
+ masterOpTime = this.getLastOpTime(master);
masterName = master.toString().substr(14); // strip "connection to "
}
catch (e) {
var master = this.getMaster();
- configVersion = master.getDB("local")['system.replset'].findOne().version;
- newestOplogEntry = master.getDB("local")['oplog.rs'].findOne();
+ configVersion = this.conf().version;
+ masterOpTime = this.getLastOpTime(master);
masterName = master.toString().substr(14); // strip "connection to "
}
print("ReplSetTest awaitReplication: starting: timestamp for primary, " + masterName +
", is " + tojson(this.latest) +
- ", last oplog entry is " + tojsononeline(newestOplogEntry));
+ ", last oplog entry is " + tojsononeline(masterOpTime));
var self = this;
assert.soon(function() {
@@ -629,12 +634,12 @@ ReplSetTest.prototype.awaitReplication = function(timeout) {
if (slaveConfigVersion > configVersion) {
var master = this.getMaster();
configVersion = master.getDB("local")['system.replset'].findOne().version;
- newestOplogEntry = master.getDB("local")['oplog.rs'].findOne();
+ masterOpTime = self.getLastOpTime(master);
masterName = master.toString().substr(14); // strip "connection to "
print("ReplSetTest awaitReplication: timestamp for primary, " + masterName
+ ", is " + tojson(this.latest)
- + ", last oplog entry is " + tojsononeline(newestOplogEntry));
+ + ", last oplog entry is " + tojsononeline(masterOpTime));
}
return false;
@@ -653,42 +658,29 @@ ReplSetTest.prototype.awaitReplication = function(timeout) {
slave.getDB("admin").getMongo().setSlaveOk();
- var log = slave.getDB("local")['oplog.rs'];
- if (log.find({}).sort({'$natural': -1}).limit(1).hasNext()) {
- var entry = log.find({}).sort({'$natural': -1}).limit(1).next();
- var ts = entry['ts'];
- if (self.latest.t < ts.t ||
- (self.latest.t == ts.t && self.latest.i < ts.i)) {
- self.latest = self.liveNodes.master.getDB("local")['oplog.rs'].
- find({}).
- sort({'$natural': -1}).
- limit(1).
- next()['ts'];
- print("ReplSetTest awaitReplication: timestamp for " + slaveName +
- " is newer, resetting latest to " + tojson(self.latest));
- return false;
- }
-
- if (!friendlyEqual(self.latest, ts)) {
- print("ReplSetTest awaitReplication: timestamp for secondary #" +
- secondaryCount + ", " + slaveName + ", is " + tojson(ts) +
- " but latest is " + tojson(self.latest));
- print("ReplSetTest awaitReplication: last oplog entry (of " +
- log.count() + ") for secondary #" + secondaryCount +
- ", " + slaveName + ", is " + tojsononeline(entry));
- print("ReplSetTest awaitReplication: secondary #" +
- secondaryCount + ", " + slaveName + ", is NOT synced");
- return false;
- }
+ var ts = self.getLastOpTime(slave);
+ if (self.latest.t < ts.t ||
+ (self.latest.t == ts.t && self.latest.i < ts.i)) {
+ self.latest = self.getLastOpTime(master);
+ print("ReplSetTest awaitReplication: timestamp for " + slaveName +
+ " is newer, resetting latest to " + tojson(self.latest));
+ return false;
+ }
+ if (!friendlyEqual(self.latest, ts)) {
+ print("ReplSetTest awaitReplication: timestamp for secondary #" +
+ secondaryCount + ", " + slaveName + ", is " + tojson(ts) +
+ " but latest is " + tojson(self.latest));
+ print("ReplSetTest awaitReplication: last oplog entry (of " +
+ log.count() + ") for secondary #" + secondaryCount +
+ ", " + slaveName + ", is " + tojsononeline(entry));
print("ReplSetTest awaitReplication: secondary #" +
- secondaryCount + ", " + slaveName + ", is synced");
- }
- else {
- print("ReplSetTest awaitReplication: waiting for secondary #" +
- secondaryCount + ", " + slaveName + ", to have an oplog built");
+ secondaryCount + ", " + slaveName + ", is NOT synced");
return false;
}
+
+ print("ReplSetTest awaitReplication: secondary #" +
+ secondaryCount + ", " + slaveName + ", is synced");
}
print("ReplSetTest awaitReplication: finished: all " + secondaryCount +