summaryrefslogtreecommitdiff
path: root/jstests/repl
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/repl')
-rw-r--r--jstests/repl/basic1.js19
-rw-r--r--jstests/repl/dbcase.js95
-rw-r--r--jstests/repl/drop_dups.js68
-rw-r--r--jstests/repl/mastermaster1.js23
-rw-r--r--jstests/repl/mod_move.js69
-rw-r--r--jstests/repl/pair1.js100
-rw-r--r--jstests/repl/pair2.js71
-rw-r--r--jstests/repl/pair3.js245
-rw-r--r--jstests/repl/pair4.js160
-rw-r--r--jstests/repl/pair5.js95
-rw-r--r--jstests/repl/pair6.js115
-rw-r--r--jstests/repl/pair7.js85
-rw-r--r--jstests/repl/repl2.js29
-rw-r--r--jstests/repl/repl3.js58
-rw-r--r--jstests/repl/replacePeer1.js82
-rw-r--r--jstests/repl/replacePeer2.js86
-rw-r--r--jstests/repl/snapshot2.js72
-rw-r--r--jstests/repl/snapshot3.js53
18 files changed, 318 insertions, 1207 deletions
diff --git a/jstests/repl/basic1.js b/jstests/repl/basic1.js
index 15fc983..4a6091d 100644
--- a/jstests/repl/basic1.js
+++ b/jstests/repl/basic1.js
@@ -60,7 +60,7 @@ r = function( key , v ){
correct = { a : 2 , b : 1 };
function checkMR( t ){
- var res = t.mapReduce( m , r , "basic1_out" );
+ var res = t.mapReduce( m , r , { out : { inline : 1 } } )
assert.eq( correct , res.convertToSingleObject() , "checkMR: " + tojson( t ) );
}
@@ -148,6 +148,23 @@ x = { _id : 1 , x : 1 }
assert.eq( x , am.mu1.findOne() , "mu1" );
assert.soon( function(){ z = as.mu1.findOne(); printjson( z ); return friendlyEqual( x , z ); } , "mu2" )
+// profiling - this sould be last
+
+am.setProfilingLevel( 2 )
+am.foo.insert( { x : 1 } )
+am.foo.findOne()
+block();
+assert.eq( 2 , am.system.profile.count() , "P1" )
+assert.eq( 0 , as.system.profile.count() , "P2" )
+
+assert.eq( 1 , as.foo.findOne().x , "P3" );
+assert.eq( 0 , as.system.profile.count() , "P4" )
+
+assert( as.getCollectionNames().indexOf( "system.profile" ) < 0 , "P4.5" )
+
+as.setProfilingLevel(2)
+as.foo.findOne();
+assert.eq( 1 , as.system.profile.count() , "P5" )
rt.stop();
diff --git a/jstests/repl/dbcase.js b/jstests/repl/dbcase.js
new file mode 100644
index 0000000..10a5a61
--- /dev/null
+++ b/jstests/repl/dbcase.js
@@ -0,0 +1,95 @@
+// Test db case checking with replication SERVER-2111
+
+baseName = "jstests_repl_dbcase";
+
+rt = new ReplTest( baseName );
+
+m = rt.start( true );
+s = rt.start( false );
+
+n1 = "dbname";
+n2 = "dbNAme";
+
+/**
+ * The value of n should be n1 or n2. Check that n is soon present while its
+ * opposite is not present.
+ */
+function check( n ) {
+ assert.soon( function() {
+ try {
+ // Our db name changes may trigger an exception - SERVER-3189.
+ names = s.getDBNames();
+ } catch (e) {
+ return false;
+ }
+ n1Idx = names.indexOf( n1 );
+ n2Idx = names.indexOf( n2 );
+ if ( n1Idx != -1 && n2Idx != -1 ) {
+ // n1 and n2 may both be reported as present transiently.
+ return false;
+ }
+ // Return true if we matched expected n.
+ return -1 != names.indexOf( n );
+ } );
+}
+
+/** Allow some time for additional operations to be processed by the slave. */
+function checkTwice( n ) {
+ check( n );
+ // zzz is expected to be cloned after n1 and n2 because of its position in the alphabet.
+ m.getDB( "zzz" ).c.save( {} );
+ assert.soon( function() { return s.getDB( "zzz" ).c.count(); } )
+ check( n );
+ m.getDB( "zzz" ).dropDatabase();
+}
+
+/**
+ * The slave may create in memory db names on the master matching old dbs it is
+ * attempting to clone. This function forces operation 'cmd' by deleting those
+ * in memory dbs if necessary. This function should only be called in cases where
+ * 'cmd' would succeed if not for the in memory dbs on master created by the slave.
+ */
+function force( cmd ) {
+ print( "cmd: " + cmd );
+ eval( cmd );
+ while( m1.getLastError() ) {
+ sleep( 100 );
+ m1.dropDatabase();
+ m2.dropDatabase();
+ eval( cmd );
+ }
+}
+
+m1 = m.getDB( n1 );
+m2 = m.getDB( n2 );
+
+m1.c.save( {} );
+m2.c.save( {} ); // will fail due to conflict
+check( n1 );
+
+m1.dropDatabase();
+force( "m2.c.save( {} );" ); // will now succeed
+check( n2 );
+
+m2.dropDatabase();
+force( "m1.c.save( {} );" );
+check( n1 );
+
+for( i = 0; i < 5; ++i ) {
+ m1.dropDatabase();
+ force( "m2.c.save( {} );" );
+ m2.dropDatabase();
+ force( "m1.c.save( {} );" );
+}
+checkTwice( n1 );
+
+m1.dropDatabase();
+force( "m2.c.save( {} );" );
+
+for( i = 0; i < 5; ++i ) {
+ m2.dropDatabase();
+ force( "m1.c.save( {} );" );
+ m1.dropDatabase();
+ force( "m2.c.save( {} );" );
+}
+checkTwice( n2 );
diff --git a/jstests/repl/drop_dups.js b/jstests/repl/drop_dups.js
new file mode 100644
index 0000000..100f469
--- /dev/null
+++ b/jstests/repl/drop_dups.js
@@ -0,0 +1,68 @@
+
+var rt = new ReplTest( "drop_dups" );
+
+m = rt.start( true );
+s = rt.start( false );
+
+function block(){
+ am.runCommand( { getlasterror : 1 , w : 2 , wtimeout : 3000 } )
+}
+
+am = m.getDB( "foo" );
+as = s.getDB( "foo" );
+
+function run( createInBackground ) {
+
+ collName = "foo" + ( createInBackground ? "B" : "F" );
+
+ am[collName].drop();
+ am.blah.insert( { x : 1 } )
+ assert.soon( function(){
+ block();
+ return as.blah.findOne();
+ }
+ );
+
+
+ for ( i=0; i<10; i++ ) {
+ am[collName].insert( { _id : i , x : Math.floor( i / 2 ) } )
+ }
+
+ block();
+
+ am.runCommand( { "godinsert" : collName , obj : { _id : 100 , x : 20 } } );
+ am.runCommand( { "godinsert" : collName , obj : { _id : 101 , x : 20 } } );
+
+ as.runCommand( { "godinsert" : collName , obj : { _id : 101 , x : 20 } } );
+ as.runCommand( { "godinsert" : collName , obj : { _id : 100 , x : 20 } } );
+
+ assert.eq( as[collName].count() , am[collName].count() );
+
+ function mymap(z) {
+ return z._id + ":" + z.x + ",";
+ }
+
+
+ if ( am.serverStatus().mem.bits == 64 ) {
+ assert.neq( tojson(am[collName].find().map(mymap)) ,
+ tojson(as[collName].find().map(mymap)) , "order is not supposed to be same on master and slave but it is" );
+ }
+
+
+ am[collName].ensureIndex( { x : 1 } , { unique : true , dropDups : true , background : createInBackground } );
+ am.blah.insert( { x : 1 } )
+ block();
+
+ assert.eq( 2 , am[collName].getIndexKeys().length , "A1 : " + createInBackground )
+ assert.eq( 2 , as[collName].getIndexKeys().length , "A2 : " + createInBackground )
+
+ assert.eq( am[collName].find().sort( { _id : 1 } ).map(mymap) ,
+ as[collName].find().sort( { _id : 1 } ).map(mymap) , "different things dropped on master and slave" );
+
+
+}
+
+run( false )
+run( true )
+
+rt.stop()
diff --git a/jstests/repl/mastermaster1.js b/jstests/repl/mastermaster1.js
index 4932d5a..97fdc14 100644
--- a/jstests/repl/mastermaster1.js
+++ b/jstests/repl/mastermaster1.js
@@ -4,32 +4,45 @@
ports = allocatePorts( 2 )
left = startMongodTest( ports[0] , "mastermaster1left" , false , { master : "" , slave : "" , source : "127.0.0.1:" + ports[1] } )
-right = startMongodTest( ports[1] , "mastermaster1left" , false , { master : "" , slave : "" , source : "127.0.0.1:" + ports[0] } )
-
-print( "check 1" )
x = left.getDB( "admin" ).runCommand( "ismaster" )
assert( x.ismaster , "left: " + tojson( x ) )
+right = startMongodTest( ports[1] , "mastermaster1right" , false , { master : "" , slave : "" , source : "127.0.0.1:" + ports[0] } )
+
x = right.getDB( "admin" ).runCommand( "ismaster" )
assert( x.ismaster , "right: " + tojson( x ) )
+print( "check 1" )
+
+
ldb = left.getDB( "test" )
rdb = right.getDB( "test" )
print( "check 2" )
ldb.foo.insert( { _id : 1 , x : "eliot" } )
-var result = ldb.runCommand( { getlasterror : 1 , w : 2 , wtimeout : 20000 } );
+result = ldb.runCommand( { getlasterror : 1 , w : 2 , wtimeout : 40000 } );
printjson(result);
rdb.foo.insert( { _id : 2 , x : "sara" } )
-result = rdb.runCommand( { getlasterror : 1 , w : 2 , wtimeout : 20000 } )
+result = rdb.runCommand( { getlasterror : 1 , w : 2 , wtimeout : 40000 } )
printjson(result);
print( "check 3" )
+print( "left" )
+ldb.foo.find().forEach( printjsononeline )
+print( "right" )
+rdb.foo.find().forEach( printjsononeline )
+
+print( "oplog" )
+
+rdb.getSisterDB( "local" ).getCollection( "oplog.$main" ).find().forEach( printjsononeline )
+
+/*
assert.eq( 2 , ldb.foo.count() , "B1" )
assert.eq( 2 , rdb.foo.count() , "B2" )
+*/
print( "going to stop everything" )
diff --git a/jstests/repl/mod_move.js b/jstests/repl/mod_move.js
new file mode 100644
index 0000000..d39e747
--- /dev/null
+++ b/jstests/repl/mod_move.js
@@ -0,0 +1,69 @@
+
+// test repl basics
+// data on master/slave is the same
+
+var rt = new ReplTest( "mod_move" );
+
+m = rt.start( true , { oplogSize : 50 } );
+
+function block(){
+ am.runCommand( { getlasterror : 1 , w : 2 , wtimeout : 3000 } )
+}
+
+am = m.getDB( "foo" );
+
+function check( note ){
+ var start = new Date();
+ var x,y;
+ while ( (new Date()).getTime() - start.getTime() < 5 * 60 * 1000 ){
+ x = am.runCommand( "dbhash" );
+ y = as.runCommand( "dbhash" );
+ if ( x.md5 == y.md5 )
+ return;
+ sleep( 200 );
+ }
+ assert.eq( x.md5 , y.md5 , note );
+}
+
+// insert a lot of 'big' docs
+// so when we delete them the small docs move here
+
+BIG = 100000;
+N = BIG * 2;
+
+s : "asdasdasdasdasdasdasdadasdadasdadasdasdas"
+
+for ( i=0; i<BIG; i++ ) {
+ am.a.insert( { _id : i , s : 1 , x : 1 } )
+}
+for ( ; i<N; i++ ) {
+ am.a.insert( { _id : i , s : 1 } )
+}
+for ( i=0; i<BIG; i++ ) {
+ am.a.remove( { _id : i } )
+}
+am.getLastError();
+assert.eq( BIG , am.a.count() )
+
+assert.eq( 1 , am.a.stats().paddingFactor , "A2" )
+
+
+// start slave
+s = rt.start( false );
+as = s.getDB( "foo" );
+for ( i=N-1; i>=BIG; i-- ) {
+ am.a.update( { _id : i } , { $set : { x : 1 } } )
+ if ( i == N ) {
+ am.getLastError()
+ assert.lt( as.a.count() , BIG , "B1" )
+ print( "NOW : " + as.a.count() )
+ }
+}
+
+check( "B" )
+
+rt.stop();
+
+
+
+
diff --git a/jstests/repl/pair1.js b/jstests/repl/pair1.js
deleted file mode 100644
index 84dd7b7..0000000
--- a/jstests/repl/pair1.js
+++ /dev/null
@@ -1,100 +0,0 @@
-// Basic pairing test
-
-var baseName = "jstests_pair1test";
-
-debug = function( p ) {
-// print( p );
-}
-
-ismaster = function( n ) {
- var im = n.getDB( "admin" ).runCommand( { "ismaster" : 1 } );
-// print( "ismaster: " + tojson( im ) );
- assert( im, "command ismaster failed" );
- return im.ismaster;
-}
-
-var writeOneIdx = 0;
-
-writeOne = function( n ) {
- n.getDB( baseName ).z.save( { _id: new ObjectId(), i: ++writeOneIdx } );
-}
-
-getCount = function( n ) {
- return n.getDB( baseName ).z.find( { i: writeOneIdx } ).toArray().length;
-}
-
-checkWrite = function( m, s ) {
- writeOne( m );
- assert.eq( 1, getCount( m ) );
- check( s );
-}
-
-check = function( s ) {
- s.setSlaveOk();
- assert.soon( function() {
- return 1 == getCount( s );
- } );
- sleep( 500 ); // wait for sync clone to finish up
-}
-
-// check that slave reads and writes are guarded
-checkSlaveGuard = function( s ) {
- var t = s.getDB( baseName + "-temp" ).temp;
- assert.throws( t.find().count, [], "not master" );
- assert.throws( t.find(), [], "not master", "find did not assert" );
-
- checkError = function() {
- assert.eq( "not master", s.getDB( "admin" ).getLastError() );
- s.getDB( "admin" ).resetError();
- }
- s.getDB( "admin" ).resetError();
- t.save( {x:1} );
- checkError();
- t.update( {}, {x:2}, true );
- checkError();
- t.remove( {x:0} );
- checkError();
-}
-
-doTest = function( signal ) {
-
- ports = allocatePorts( 3 );
-
- a = new MongodRunner( ports[ 0 ], "/data/db/" + baseName + "-arbiter" );
- l = new MongodRunner( ports[ 1 ], "/data/db/" + baseName + "-left", "127.0.0.1:" + ports[ 2 ], "127.0.0.1:" + ports[ 0 ] );
- r = new MongodRunner( ports[ 2 ], "/data/db/" + baseName + "-right", "127.0.0.1:" + ports[ 1 ], "127.0.0.1:" + ports[ 0 ] );
-
- rp = new ReplPair( l, r, a );
- rp.start();
- rp.waitForSteadyState();
-
- checkSlaveGuard( rp.slave() );
-
- checkWrite( rp.master(), rp.slave() );
-
- debug( "kill first" );
- rp.killNode( rp.master(), signal );
- rp.waitForSteadyState( [ 1, null ], rp.slave().host );
- writeOne( rp.master() );
-
- debug( "restart first" );
- rp.start( true );
- rp.waitForSteadyState();
- check( rp.slave() );
- checkWrite( rp.master(), rp.slave() );
-
- debug( "kill second" );
- rp.killNode( rp.master(), signal );
- rp.waitForSteadyState( [ 1, null ], rp.slave().host );
-
- debug( "restart second" );
- rp.start( true );
- rp.waitForSteadyState( [ 1, 0 ], rp.master().host );
- checkWrite( rp.master(), rp.slave() );
-
- ports.forEach( function( x ) { stopMongod( x ); } );
-
-}
-
-doTest( 15 ); // SIGTERM
-doTest( 9 ); // SIGKILL
diff --git a/jstests/repl/pair2.js b/jstests/repl/pair2.js
deleted file mode 100644
index 2491fb2..0000000
--- a/jstests/repl/pair2.js
+++ /dev/null
@@ -1,71 +0,0 @@
-// Pairing resync
-
-var baseName = "jstests_pair2test";
-
-ismaster = function( n ) {
- im = n.getDB( "admin" ).runCommand( { "ismaster" : 1 } );
- assert( im );
- return im.ismaster;
-}
-
-soonCount = function( m, count ) {
- assert.soon( function() {
-// print( "counting" );
-//// print( "counted: " + l.getDB( baseName ).z.find().count() );
- return m.getDB( baseName ).z.find().count() == count;
- } );
-}
-
-doTest = function( signal ) {
-
- ports = allocatePorts( 3 );
-
- a = new MongodRunner( ports[ 0 ], "/data/db/" + baseName + "-arbiter" );
- l = new MongodRunner( ports[ 1 ], "/data/db/" + baseName + "-left", "127.0.0.1:" + ports[ 2 ], "127.0.0.1:" + ports[ 0 ] );
- r = new MongodRunner( ports[ 2 ], "/data/db/" + baseName + "-right", "127.0.0.1:" + ports[ 1 ], "127.0.0.1:" + ports[ 0 ] );
-
- rp = new ReplPair( l, r, a );
- rp.start();
- rp.waitForSteadyState();
-
- rp.slave().setSlaveOk();
- mz = rp.master().getDB( baseName ).z;
-
- mz.save( { _id: new ObjectId() } );
- soonCount( rp.slave(), 1 );
- assert.eq( 0, rp.slave().getDB( "admin" ).runCommand( { "resync" : 1 } ).ok );
-
- sleep( 3000 ); // allow time to finish clone and save ReplSource
- rp.killNode( rp.slave(), signal );
- rp.waitForSteadyState( [ 1, null ], rp.master().host );
-
- big = new Array( 2000 ).toString();
- for( i = 0; i < 1000; ++i )
- mz.save( { _id: new ObjectId(), i: i, b: big } );
-
- rp.start( true );
- rp.waitForSteadyState( [ 1, 0 ], rp.master().host );
-
- sleep( 15000 );
-
- rp.slave().setSlaveOk();
- assert.soon( function() {
- ret = rp.slave().getDB( "admin" ).runCommand( { "resync" : 1 } );
-// printjson( ret );
- return 1 == ret.ok;
- } );
-
- sleep( 8000 );
- soonCount( rp.slave(), 1001 );
- sz = rp.slave().getDB( baseName ).z
- assert.eq( 1, sz.find( { i: 0 } ).count() );
- assert.eq( 1, sz.find( { i: 999 } ).count() );
-
- assert.eq( 0, rp.slave().getDB( "admin" ).runCommand( { "resync" : 1 } ).ok );
-
- ports.forEach( function( x ) { stopMongod( x ); } );
-
-}
-
-doTest( 15 ); // SIGTERM
-doTest( 9 ); // SIGKILL
diff --git a/jstests/repl/pair3.js b/jstests/repl/pair3.js
deleted file mode 100644
index d5fdf7e..0000000
--- a/jstests/repl/pair3.js
+++ /dev/null
@@ -1,245 +0,0 @@
-// test arbitration
-
-var baseName = "jstests_pair3test";
-
-ismaster = function( n ) {
- var im = n.getDB( "admin" ).runCommand( { "ismaster" : 1 } );
- print( "ismaster: " + tojson( im ) );
- assert( im, "command ismaster failed" );
- return im.ismaster;
-}
-
-// bring up node connections before arbiter connections so that arb can forward to node when expected
-connect = function() {
- if ( lp == null ) {
- print("connecting lp");
- lp = startMongoProgram( "mongobridge", "--port", lpPort, "--dest", "localhost:" + lPort );
- }
- if ( rp == null ) {
- print("connecting rp");
- rp = startMongoProgram( "mongobridge", "--port", rpPort, "--dest", "localhost:" + rPort );
- }
- if ( al == null ) {
- print("connecting al");
- al = startMongoProgram( "mongobridge", "--port", alPort, "--dest", "localhost:" + aPort );
- }
- if ( ar == null ) {
- print("connecting ar");
- ar = startMongoProgram( "mongobridge", "--port", arPort, "--dest", "localhost:" + aPort );
- }
-}
-
-disconnectNode = function( mongo ) {
- if ( lp ) {
- print("disconnecting lp: "+lpPort);
- stopMongoProgram( lpPort );
- lp = null;
- }
- if ( rp ) {
- print("disconnecting rp: "+rpPort);
- stopMongoProgram( rpPort );
- rp = null;
- }
- if ( mongo.host.match( new RegExp( "^127.0.0.1:" + lPort + "$" ) ) ) {
- print("disconnecting al: "+alPort);
- stopMongoProgram( alPort );
- al = null;
- } else if ( mongo.host.match( new RegExp( "^127.0.0.1:" + rPort + "$" ) ) ) {
- print("disconnecting ar: "+arPort);
- stopMongoProgram( arPort );
- ar = null;
- } else {
- assert( false, "don't know how to disconnect node: " + mongo );
- }
-}
-
-doTest1 = function() {
- al = ar = lp = rp = null;
- ports = allocatePorts( 7 );
- aPort = ports[ 0 ];
- alPort = ports[ 1 ];
- arPort = ports[ 2 ];
- lPort = ports[ 3 ];
- lpPort = ports[ 4 ];
- rPort = ports[ 5 ];
- rpPort = ports[ 6 ];
-
- connect();
-
- a = new MongodRunner( aPort, "/data/db/" + baseName + "-arbiter" );
- l = new MongodRunner( lPort, "/data/db/" + baseName + "-left", "127.0.0.1:" + rpPort, "127.0.0.1:" + alPort );
- r = new MongodRunner( rPort, "/data/db/" + baseName + "-right", "127.0.0.1:" + lpPort, "127.0.0.1:" + arPort );
-
- pair = new ReplPair( l, r, a );
-
- print("normal startup");
- pair.start();
- pair.waitForSteadyState();
-
- print("disconnect slave");
- disconnectNode( pair.slave() );
- pair.waitForSteadyState( [ 1, -3 ], pair.master().host );
-
- print("disconnect master");
- disconnectNode( pair.master() );
- pair.waitForSteadyState( [ -3, -3 ] );
-
- print("reconnect");
- connect();
- pair.waitForSteadyState();
-
- print("disconnect master");
- disconnectNode( pair.master() );
- pair.waitForSteadyState( [ 1, -3 ], pair.slave().host, true );
-
- print("disconnect new master");
- disconnectNode( pair.master() );
- pair.waitForSteadyState( [ -3, -3 ] );
-
- print("reconnect");
- connect();
- pair.waitForSteadyState();
-
- print("disconnect slave");
- disconnectNode( pair.slave() );
- pair.waitForSteadyState( [ 1, -3 ], pair.master().host );
-
- print("reconnect slave");
- connect();
- pair.waitForSteadyState( [ 1, 0 ], pair.master().host );
-
- print("disconnect master");
- disconnectNode( pair.master() );
- pair.waitForSteadyState( [ 1, -3 ], pair.slave().host, true );
-
- print("reconnect old master");
- connect();
- pair.waitForSteadyState( [ 1, 0 ], pair.master().host );
-
- ports.forEach( function( x ) { stopMongoProgram( x ); } );
-}
-
-// this time don't start connected
-doTest2 = function() {
- al = ar = lp = rp = null;
- ports = allocatePorts( 7 );
- aPort = ports[ 0 ];
- alPort = ports[ 1 ];
- arPort = ports[ 2 ];
- lPort = ports[ 3 ];
- lpPort = ports[ 4 ];
- rPort = ports[ 5 ];
- rpPort = ports[ 6 ];
-
- a = new MongodRunner( aPort, "/data/db/" + baseName + "-arbiter" );
- l = new MongodRunner( lPort, "/data/db/" + baseName + "-left", "127.0.0.1:" + rpPort, "127.0.0.1:" + alPort );
- r = new MongodRunner( rPort, "/data/db/" + baseName + "-right", "127.0.0.1:" + lpPort, "127.0.0.1:" + arPort );
-
- pair = new ReplPair( l, r, a );
- pair.start();
- pair.waitForSteadyState( [ -3, -3 ] );
-
- startMongoProgram( "mongobridge", "--port", arPort, "--dest", "localhost:" + aPort );
-
- // there hasn't been an initial sync, no no node will become master
-
- for( i = 0; i < 10; ++i ) {
- assert( pair.isMaster( pair.right() ) == -3 && pair.isMaster( pair.left() ) == -3 );
- sleep( 500 );
- }
-
- stopMongoProgram( arPort );
-
- startMongoProgram( "mongobridge", "--port", alPort, "--dest", "localhost:" + aPort );
-
- for( i = 0; i < 10; ++i ) {
- assert( pair.isMaster( pair.right() ) == -3 && pair.isMaster( pair.left() ) == -3 );
- sleep( 500 );
- }
-
- stopMongoProgram( alPort );
-
- // connect l and r without a
-
- startMongoProgram( "mongobridge", "--port", lpPort, "--dest", "localhost:" + lPort );
- startMongoProgram( "mongobridge", "--port", rpPort, "--dest", "localhost:" + rPort );
-
- pair.waitForSteadyState( [ 1, 0 ] );
-
- ports.forEach( function( x ) { stopMongoProgram( x ); } );
-}
-
-// recover from master - master setup
-doTest3 = function() {
- al = ar = lp = rp = null;
- ports = allocatePorts( 7 );
- aPort = ports[ 0 ];
- alPort = ports[ 1 ];
- arPort = ports[ 2 ];
- lPort = ports[ 3 ];
- lpPort = ports[ 4 ];
- rPort = ports[ 5 ];
- rpPort = ports[ 6 ];
-
- connect();
-
- a = new MongodRunner( aPort, "/data/db/" + baseName + "-arbiter" );
- l = new MongodRunner( lPort, "/data/db/" + baseName + "-left", "127.0.0.1:" + rpPort, "127.0.0.1:" + alPort );
- r = new MongodRunner( rPort, "/data/db/" + baseName + "-right", "127.0.0.1:" + lpPort, "127.0.0.1:" + arPort );
-
- pair = new ReplPair( l, r, a );
- pair.start();
- pair.waitForSteadyState();
-
- // now can only talk to arbiter
- stopMongoProgram( lpPort );
- stopMongoProgram( rpPort );
- pair.waitForSteadyState( [ 1, 1 ], null, true );
-
- // recover
- startMongoProgram( "mongobridge", "--port", lpPort, "--dest", "localhost:" + lPort );
- startMongoProgram( "mongobridge", "--port", rpPort, "--dest", "localhost:" + rPort );
- pair.waitForSteadyState( [ 1, 0 ], null, true );
-
- ports.forEach( function( x ) { stopMongoProgram( x ); } );
-}
-
-// check that initial sync is persistent
-doTest4 = function( signal ) {
- al = ar = lp = rp = null;
- ports = allocatePorts( 7 );
- aPort = ports[ 0 ];
- alPort = ports[ 1 ];
- arPort = ports[ 2 ];
- lPort = ports[ 3 ];
- lpPort = ports[ 4 ];
- rPort = ports[ 5 ];
- rpPort = ports[ 6 ];
-
- connect();
-
- a = new MongodRunner( aPort, "/data/db/" + baseName + "-arbiter" );
- l = new MongodRunner( lPort, "/data/db/" + baseName + "-left", "127.0.0.1:" + rpPort, "127.0.0.1:" + alPort );
- r = new MongodRunner( rPort, "/data/db/" + baseName + "-right", "127.0.0.1:" + lpPort, "127.0.0.1:" + arPort );
-
- pair = new ReplPair( l, r, a );
- pair.start();
- pair.waitForSteadyState();
-
- pair.killNode( pair.left(), signal );
- pair.killNode( pair.right(), signal );
- stopMongoProgram( rpPort );
- stopMongoProgram( lpPort );
-
- // now can only talk to arbiter
- pair.start( true );
- pair.waitForSteadyState( [ 1, 1 ], null, true );
-
- ports.forEach( function( x ) { stopMongoProgram( x ); } );
-}
-
-doTest1();
-doTest2();
-doTest3();
-doTest4( 15 );
-doTest4( 9 );
diff --git a/jstests/repl/pair4.js b/jstests/repl/pair4.js
deleted file mode 100644
index c04433e..0000000
--- a/jstests/repl/pair4.js
+++ /dev/null
@@ -1,160 +0,0 @@
-// data consistency after master-master
-
-var baseName = "jstests_pair4test";
-
-debug = function( o ) {
- printjson( o );
-}
-
-ismaster = function( n ) {
- var im = n.getDB( "admin" ).runCommand( { "ismaster" : 1 } );
- print( "ismaster: " + tojson( im ) );
- assert( im, "command ismaster failed" );
- return im.ismaster;
-}
-
-connect = function() {
- startMongoProgram( "mongobridge", "--port", lpPort, "--dest", "localhost:" + lPort );
- startMongoProgram( "mongobridge", "--port", rpPort, "--dest", "localhost:" + rPort );
-}
-
-disconnect = function() {
- stopMongoProgram( lpPort );
- stopMongoProgram( rpPort );
-}
-
-write = function( m, n, id ) {
- if ( id ) {
- save = { _id:id, n:n };
- } else {
- save = { n:n };
- }
- m.getDB( baseName ).getCollection( baseName ).save( save );
-}
-
-check = function( m, n, id ) {
- m.setSlaveOk();
- if ( id ) {
- find = { _id:id, n:n };
- } else {
- find = { n:n };
- }
- assert.soon( function() { return m.getDB( baseName ).getCollection( baseName ).find( find ).count() > 0; },
- "failed waiting for " + m + " value of n to be " + n );
-}
-
-checkCount = function( m, c ) {
- m.setSlaveOk();
- assert.soon( function() {
- actual = m.getDB( baseName ).getCollection( baseName ).find().count();
- print( actual );
- return c == actual; },
- "count failed for " + m );
-}
-
-coll = function( m ) {
- return m.getDB( baseName ).getCollection( baseName );
-}
-
-db2Coll = function( m ) {
- return m.getDB( baseName + "_second" ).getCollection( baseName );
-}
-
-doTest = function( recover, newMaster, newSlave ) {
- ports = allocatePorts( 5 );
- aPort = ports[ 0 ];
- lPort = ports[ 1 ];
- lpPort = ports[ 2 ];
- rPort = ports[ 3 ];
- rpPort = ports[ 4 ];
-
- // start normally
- connect();
- a = new MongodRunner( aPort, "/data/db/" + baseName + "-arbiter" );
- l = new MongodRunner( lPort, "/data/db/" + baseName + "-left", "127.0.0.1:" + rpPort, "127.0.0.1:" + aPort );
- r = new MongodRunner( rPort, "/data/db/" + baseName + "-right", "127.0.0.1:" + lpPort, "127.0.0.1:" + aPort );
- pair = new ReplPair( l, r, a );
- pair.start();
- pair.waitForSteadyState();
-
- firstMaster = pair.master();
- firstSlave = pair.slave();
-
- write( pair.master(), 0 );
- write( pair.master(), 1 );
- check( pair.slave(), 0 );
- check( pair.slave(), 1 );
-
- // now each can only talk to arbiter
- disconnect();
- pair.waitForSteadyState( [ 1, 1 ], null, true );
-
- m = newMaster();
- write( m, 10 );
- write( m, 100, "a" );
- coll( m ).update( {n:1}, {$set:{n:2}} );
- db2Coll( m ).save( {n:500} );
- db2Coll( m ).findOne();
-
- s = newSlave();
- write( s, 20 );
- write( s, 200, "a" );
- coll( s ).update( {n:1}, {n:1,m:3} );
- db2Coll( s ).save( {_id:"a",n:600} );
- db2Coll( s ).findOne();
-
- // recover
- recover();
-
- nodes = [ pair.right(), pair.left() ];
-
- nodes.forEach( function( x ) { checkCount( x, 5 ); } );
- nodes.forEach( function( x ) { [ 0, 10, 20, 100 ].forEach( function( y ) { check( x, y ); } ); } );
-
- checkM = function( c ) {
- assert.soon( function() {
- obj = coll( c ).findOne( {n:2} );
- printjson( obj );
- return obj.m == undefined;
- }, "n:2 test for " + c + " failed" );
- };
- nodes.forEach( function( x ) { checkM( x ); } );
-
- // check separate database
- nodes.forEach( function( x ) { assert.soon( function() {
- r = db2Coll( x ).findOne( {_id:"a"} );
- debug( r );
- if ( r == null ) {
- return false;
- }
- return 600 == r.n;
- } ) } );
-
- ports.forEach( function( x ) { stopMongoProgram( x ); } );
-
-}
-
-// right will be master on recovery b/c both sides will have completed initial sync
-debug( "basic test" );
-doTest( function() {
- connect();
- pair.waitForSteadyState( [ 1, 0 ], pair.right().host, true );
- }, function() { return pair.right(); }, function() { return pair.left(); } );
-
-doRestartTest = function( signal ) {
- doTest( function() {
- if ( signal == 9 ) {
- sleep( 3000 );
- }
- pair.killNode( firstMaster, signal );
- connect();
- pair.start( true );
- pair.waitForSteadyState( [ 1, 0 ], firstSlave.host, true );
- }, function() { return firstSlave; }, function() { return firstMaster; } );
-}
-
-debug( "sigterm restart test" );
-doRestartTest( 15 ) // SIGTERM
-
-debug( "sigkill restart test" );
-doRestartTest( 9 ) // SIGKILL
diff --git a/jstests/repl/pair5.js b/jstests/repl/pair5.js
deleted file mode 100644
index de7e2d5..0000000
--- a/jstests/repl/pair5.js
+++ /dev/null
@@ -1,95 +0,0 @@
-// writes to new master while making master-master logs consistent
-
-var baseName = "jstests_pair5test";
-
-debug = function( p ) {
- print( p );
-}
-
-ismaster = function( n ) {
- var im = n.getDB( "admin" ).runCommand( { "ismaster" : 1 } );
- print( "ismaster: " + tojson( im ) );
- assert( im, "command ismaster failed" );
- return im.ismaster;
-}
-
-connect = function() {
- startMongoProgram( "mongobridge", "--port", lpPort, "--dest", "localhost:" + lPort );
- startMongoProgram( "mongobridge", "--port", rpPort, "--dest", "localhost:" + rPort );
-}
-
-disconnect = function() {
- stopMongoProgram( lpPort );
- stopMongoProgram( rpPort );
-}
-
-write = function( m, n, id ) {
- if ( id ) {
- save = { _id:id, n:n };
- } else {
- save = { n:n };
- }
- m.getDB( baseName ).getCollection( baseName ).save( save );
-}
-
-checkCount = function( m, c ) {
- m.setSlaveOk();
- assert.soon( function() {
- actual = m.getDB( baseName ).getCollection( baseName ).find().count();
- print( actual );
- return c == actual; },
- "count failed for " + m );
-}
-
-doTest = function( nSlave, opIdMem ) {
- ports = allocatePorts( 5 );
- aPort = ports[ 0 ];
- lPort = ports[ 1 ];
- lpPort = ports[ 2 ];
- rPort = ports[ 3 ];
- rpPort = ports[ 4 ];
-
- // start normally
- connect();
- a = new MongodRunner( aPort, "/data/db/" + baseName + "-arbiter" );
- l = new MongodRunner( lPort, "/data/db/" + baseName + "-left", "127.0.0.1:" + rpPort, "127.0.0.1:" + aPort );
- r = new MongodRunner( rPort, "/data/db/" + baseName + "-right", "127.0.0.1:" + lpPort, "127.0.0.1:" + aPort );
- pair = new ReplPair( l, r, a );
- pair.start();
- pair.waitForSteadyState();
-
- // now each can only talk to arbiter
- disconnect();
- pair.waitForSteadyState( [ 1, 1 ], null, true );
-
- // left will become slave (b/c both completed initial sync)
- for( i = 0; i < nSlave; ++i ) {
- write( pair.left(), i, i );
- }
- pair.left().getDB( baseName ).getCollection( baseName ).findOne();
-
- for( i = 10000; i < 15000; ++i ) {
- write( pair.right(), i, i );
- }
- pair.right().getDB( baseName ).getCollection( baseName ).findOne();
-
- connect();
- pair.waitForSteadyState( [ 1, 0 ], pair.right().host, true );
-
- pair.master().getDB( baseName ).getCollection( baseName ).update( {_id:nSlave - 1}, {_id:nSlave - 1,n:-1}, true );
- assert.eq( -1, pair.master().getDB( baseName ).getCollection( baseName ).findOne( {_id:nSlave - 1} ).n );
- checkCount( pair.master(), 5000 + nSlave );
- assert.eq( -1, pair.master().getDB( baseName ).getCollection( baseName ).findOne( {_id:nSlave - 1} ).n );
- pair.slave().setSlaveOk();
- assert.soon( function() {
- n = pair.slave().getDB( baseName ).getCollection( baseName ).findOne( {_id:nSlave - 1} ).n;
- print( n );
- return -1 == n;
- } );
-
- ports.forEach( function( x ) { stopMongoProgram( x ); } );
-
-}
-
-doTest( 5000, 100000000 );
-doTest( 5000, 100 ); // force op id converstion to collection based storage
diff --git a/jstests/repl/pair6.js b/jstests/repl/pair6.js
deleted file mode 100644
index b249fc0..0000000
--- a/jstests/repl/pair6.js
+++ /dev/null
@@ -1,115 +0,0 @@
-// pairing cases where oplogs run out of space
-
-var baseName = "jstests_pair6test";
-
-debug = function( p ) {
- print( p );
-}
-
-ismaster = function( n ) {
- var im = n.getDB( "admin" ).runCommand( { "ismaster" : 1 } );
- print( "ismaster: " + tojson( im ) );
- assert( im, "command ismaster failed" );
- return im.ismaster;
-}
-
-connect = function() {
- startMongoProgram( "mongobridge", "--port", lpPort, "--dest", "localhost:" + lPort );
- startMongoProgram( "mongobridge", "--port", rpPort, "--dest", "localhost:" + rPort );
-}
-
-disconnect = function() {
- stopMongoProgram( lpPort );
- stopMongoProgram( rpPort );
-}
-
-checkCount = function( m, c ) {
- m.setSlaveOk();
- assert.soon( function() {
- actual = m.getDB( baseName ).getCollection( baseName ).find().count();
- print( actual );
- return c == actual; },
- "expected count " + c + " for " + m );
-}
-
-resetSlave = function( s ) {
- s.setSlaveOk();
- assert.soon( function() {
- ret = s.getDB( "admin" ).runCommand( { "resync" : 1 } );
- // printjson( ret );
- return 1 == ret.ok;
- } );
-}
-
-big = new Array( 2000 ).toString();
-
-doTest = function() {
- ports = allocatePorts( 5 );
- aPort = ports[ 0 ];
- lPort = ports[ 1 ];
- lpPort = ports[ 2 ];
- rPort = ports[ 3 ];
- rpPort = ports[ 4 ];
-
- // start normally
- connect();
- a = new MongodRunner( aPort, "/data/db/" + baseName + "-arbiter" );
- l = new MongodRunner( lPort, "/data/db/" + baseName + "-left", "127.0.0.1:" + rpPort, "127.0.0.1:" + aPort );
- r = new MongodRunner( rPort, "/data/db/" + baseName + "-right", "127.0.0.1:" + lpPort, "127.0.0.1:" + aPort );
- pair = new ReplPair( l, r, a );
- pair.start();
- pair.waitForSteadyState();
-
- disconnect();
- pair.waitForSteadyState( [ 1, 1 ], null, true );
-
- print( "test one" );
-
- // fill new slave oplog
- for( i = 0; i < 1000; ++i ) {
- pair.left().getDB( baseName ).getCollection( baseName ).save( {b:big} );
- }
- pair.left().getDB( baseName ).getCollection( baseName ).findOne();
-
- // write single to new master
- pair.right().getDB( baseName ).getCollection( baseName ).save( {} );
-
- connect();
- pair.waitForSteadyState( [ 1, 0 ], pair.right().host, true );
-
- resetSlave( pair.left() );
-
- checkCount( pair.left(), 1 );
- checkCount( pair.right(), 1 );
-
- pair.right().getDB( baseName ).getCollection( baseName ).remove( {} );
- checkCount( pair.left(), 0 );
-
- disconnect();
- pair.waitForSteadyState( [ 1, 1 ], null, true );
-
- print( "test two" );
-
- // fill new master oplog
- for( i = 0; i < 1000; ++i ) {
- pair.right().getDB( baseName ).getCollection( baseName ).save( {b:big} );
- }
-
- pair.left().getDB( baseName ).getCollection( baseName ).save( {_id:"abcde"} );
-
- connect();
- pair.waitForSteadyState( [ 1, 0 ], pair.right().host, true );
-
- sleep( 15000 );
-
- resetSlave( pair.left() );
-
- checkCount( pair.left(), 1000 );
- checkCount( pair.right(), 1000 );
- assert.eq( 0, pair.left().getDB( baseName ).getCollection( baseName ).find( {_id:"abcde"} ).count() );
-
- ports.forEach( function( x ) { stopMongoProgram( x ); } );
-
-}
-
-doTest(); \ No newline at end of file
diff --git a/jstests/repl/pair7.js b/jstests/repl/pair7.js
deleted file mode 100644
index 52ef91f..0000000
--- a/jstests/repl/pair7.js
+++ /dev/null
@@ -1,85 +0,0 @@
-// pairing with auth
-
-var baseName = "jstests_pair7test";
-
-setAdmin = function( n ) {
- n.getDB( "admin" ).addUser( "super", "super" );
- n.getDB( "local" ).addUser( "repl", "foo" );
- n.getDB( "local" ).system.users.findOne();
-}
-
-auth = function( n ) {
- return n.getDB( baseName ).auth( "test", "test" );
-}
-
-doTest = function( signal ) {
-
- ports = allocatePorts( 3 );
-
- m = startMongod( "--port", ports[ 1 ], "--dbpath", "/data/db/" + baseName + "-left", "--nohttpinterface", "--bind_ip", "127.0.0.1" );
- setAdmin( m );
- stopMongod( ports[ 1 ] );
-
- m = startMongod( "--port", ports[ 2 ], "--dbpath", "/data/db/" + baseName + "-right", "--nohttpinterface", "--bind_ip", "127.0.0.1" );
- setAdmin( m );
- stopMongod( ports[ 2 ] );
-
- a = new MongodRunner( ports[ 0 ], "/data/db/" + baseName + "-arbiter" );
- l = new MongodRunner( ports[ 1 ], "/data/db/" + baseName + "-left", "127.0.0.1:" + ports[ 2 ], "127.0.0.1:" + ports[ 0 ], [ "--auth" ] );
- r = new MongodRunner( ports[ 2 ], "/data/db/" + baseName + "-right", "127.0.0.1:" + ports[ 1 ], "127.0.0.1:" + ports[ 0 ], [ "--auth" ] );
-
- rp = new ReplPair( l, r, a );
- rp.start( true );
- rp.waitForSteadyState();
-
- rp.master().getDB( "admin" ).auth( "super", "super" );
- rp.master().getDB( baseName ).addUser( "test", "test" );
- auth( rp.master() ); // reauth
- assert.soon( function() { return auth( rp.slave() ); } );
- rp.slave().setSlaveOk();
-
- ma = rp.master().getDB( baseName ).a;
- ma.save( {} );
- sa = rp.slave().getDB( baseName ).a;
- assert.soon( function() { return 1 == sa.count(); } );
-
- rp.killNode( rp.slave(), signal );
- rp.waitForSteadyState( [ 1, null ] );
- ma.save( {} );
-
- rp.start( true );
- rp.waitForSteadyState();
- assert.soon( function() { return auth( rp.slave() ); } );
- rp.slave().setSlaveOk();
- sa = rp.slave().getDB( baseName ).a;
- assert.soon( function() { return 2 == sa.count(); } );
-
- ma.save( {a:1} );
- assert.soon( function() { return 1 == sa.count( {a:1} ); } );
-
- ma.update( {a:1}, {b:2} );
- assert.soon( function() { return 1 == sa.count( {b:2} ); } );
-
- ma.remove( {b:2} );
- assert.soon( function() { return 0 == sa.count( {b:2} ); } );
-
- rp.killNode( rp.master(), signal );
- rp.waitForSteadyState( [ 1, null ] );
- ma = sa;
- ma.save( {} );
-
- rp.start( true );
- rp.waitForSteadyState();
- assert.soon( function() { return auth( rp.slave() ); } );
- rp.slave().setSlaveOk();
- sa = rp.slave().getDB( baseName ).a;
- assert.soon( function() { return 3 == sa.count(); } );
-
- ma.save( {} );
- assert.soon( function() { return 4 == sa.count(); } );
-
- ports.forEach( function( x ) { stopMongod( x ); } );
-}
-
-doTest( 15 ); // SIGTERM
-doTest( 9 ); // SIGKILL
diff --git a/jstests/repl/repl2.js b/jstests/repl/repl2.js
index 42b0caf..b290c61 100644
--- a/jstests/repl/repl2.js
+++ b/jstests/repl/repl2.js
@@ -1,34 +1,43 @@
// Test resync command
soonCount = function( count ) {
- assert.soon( function() {
+ assert.soon( function() {
// print( "check count" );
// print( "count: " + s.getDB( baseName ).z.find().count() );
- return s.getDB("foo").a.find().count() == count;
- } );
+ return s.getDB("foo").a.find().count() == count;
+ } );
}
doTest = function( signal ) {
-
+ print("signal: "+signal);
+
var rt = new ReplTest( "repl2tests" );
// implicit small oplog makes slave get out of sync
- m = rt.start( true );
+ m = rt.start( true, { oplogSize : "1" } );
s = rt.start( false );
-
+
am = m.getDB("foo").a
-
+
am.save( { _id: new ObjectId() } );
soonCount( 1 );
assert.eq( 0, s.getDB( "admin" ).runCommand( { "resync" : 1 } ).ok );
rt.stop( false , signal );
-
+
big = new Array( 2000 ).toString();
for( i = 0; i < 1000; ++i )
am.save( { _id: new ObjectId(), i: i, b: big } );
s = rt.start( false , null , true );
- assert.soon( function() { return 1 == s.getDB( "admin" ).runCommand( { "resync" : 1 } ).ok; } );
+
+ print("earliest op in master: "+tojson(m.getDB("local").oplog.$main.find().sort({$natural:1}).limit(1).next()));
+ print("latest op on slave: "+tojson(s.getDB("local").sources.findOne()));
+
+ assert.soon( function() {
+ var result = s.getDB( "admin" ).runCommand( { "resync" : 1 } );
+ print("resync says: "+tojson(result));
+ return result.ok == 1;
+ } );
soonCount( 1001 );
assert.automsg( "m.getDB( 'local' ).getCollection( 'oplog.$main' ).stats().size > 0" );
@@ -36,7 +45,7 @@ doTest = function( signal ) {
as = s.getDB("foo").a
assert.eq( 1, as.find( { i: 0 } ).count() );
assert.eq( 1, as.find( { i: 999 } ).count() );
-
+
assert.eq( 0, s.getDB( "admin" ).runCommand( { "resync" : 1 } ).ok );
rt.stop();
diff --git a/jstests/repl/repl3.js b/jstests/repl/repl3.js
index d3c3848..5ace9b6 100644
--- a/jstests/repl/repl3.js
+++ b/jstests/repl/repl3.js
@@ -10,38 +10,42 @@ soonCount = function( count ) {
} );
}
-doTest = function( signal ) {
-
- rt = new ReplTest( "repl3tests" );
-
- m = rt.start( true );
- s = rt.start( false );
-
- am = m.getDB( baseName ).a
-
- am.save( { _id: new ObjectId() } );
- soonCount( 1 );
- rt.stop( false, signal );
-
- big = new Array( 2000 ).toString();
- for( i = 0; i < 1000; ++i )
- am.save( { _id: new ObjectId(), i: i, b: big } );
-
- s = rt.start( false, { autoresync: null }, true );
-
+doTest = function (signal) {
+
+ print("repl3.js doTest(" + signal + ")")
+
+ rt = new ReplTest("repl3tests");
+
+ m = rt.start(true);
+ s = rt.start(false);
+
+ am = m.getDB(baseName).a
+
+ am.save({ _id: new ObjectId() });
+ soonCount(1);
+ rt.stop(false, signal);
+
+ big = new Array(2000).toString();
+ for (i = 0; i < 1000; ++i)
+ am.save({ _id: new ObjectId(), i: i, b: big });
+
+ s = rt.start(false, { autoresync: null }, true);
+
// after SyncException, mongod waits 10 secs.
- sleep( 15000 );
-
+ sleep(15000);
+
// Need the 2 additional seconds timeout, since commands don't work on an 'allDead' node.
- soonCount( 1001 );
- as = s.getDB( baseName ).a
- assert.eq( 1, as.find( { i: 0 } ).count() );
- assert.eq( 1, as.find( { i: 999 } ).count() );
-
- assert.commandFailed( s.getDB( "admin" ).runCommand( { "resync" : 1 } ) );
+ soonCount(1001);
+ as = s.getDB(baseName).a
+ assert.eq(1, as.find({ i: 0 }).count());
+ assert.eq(1, as.find({ i: 999 }).count());
+
+ assert.commandFailed(s.getDB("admin").runCommand({ "resync": 1 }));
rt.stop();
}
doTest( 15 ); // SIGTERM
doTest( 9 ); // SIGKILL
+
+print("repl3.js OK")
diff --git a/jstests/repl/replacePeer1.js b/jstests/repl/replacePeer1.js
deleted file mode 100644
index b3743ce..0000000
--- a/jstests/repl/replacePeer1.js
+++ /dev/null
@@ -1,82 +0,0 @@
-// test replace peer on master
-
-var baseName = "jstests_replacepeer1test";
-
-ismaster = function( n ) {
- im = n.getDB( "admin" ).runCommand( { "ismaster" : 1 } );
-// print( "ismaster: " + tojson( im ) );
- assert( im );
- return im.ismaster;
-}
-
-var writeOneIdx = 0;
-
-writeOne = function( n ) {
- n.getDB( baseName ).z.save( { _id: new ObjectId(), i: ++writeOneIdx } );
-}
-
-getCount = function( n ) {
- return n.getDB( baseName ).z.find( { i: writeOneIdx } ).toArray().length;
-}
-
-checkWrite = function( m, s ) {
- writeOne( m );
- assert.eq( 1, getCount( m ) );
- s.setSlaveOk();
- assert.soon( function() {
- return 1 == getCount( s );
- } );
-}
-
-doTest = function( signal ) {
-
- ports = allocatePorts( 4 );
-
- a = new MongodRunner( ports[ 0 ], "/data/db/" + baseName + "-arbiter" );
- l = new MongodRunner( ports[ 1 ], "/data/db/" + baseName + "-left", "127.0.0.1:" + ports[ 3 ], "127.0.0.1:" + ports[ 0 ] );
- r = new MongodRunner( ports[ 3 ], "/data/db/" + baseName + "-right", "127.0.0.1:" + ports[ 1 ], "127.0.0.1:" + ports[ 0 ] );
-
- rp = new ReplPair( l, r, a );
- rp.start();
- rp.waitForSteadyState( [ 1, 0 ] );
- rightMaster = ( rp.master().host == rp.right().host );
-
- checkWrite( rp.master(), rp.slave() );
-
- rp.killNode( rp.slave(), signal );
-
- writeOne( rp.master() );
-
- assert.commandWorked( rp.master().getDB( "admin" ).runCommand( {replacepeer:1} ) );
-
- rp.killNode( rp.master(), signal );
- rp.killNode( rp.arbiter(), signal );
-
- if ( rightMaster ) {
- o = new MongodRunner( ports[ 2 ], "/data/db/" + baseName + "-left", "127.0.0.1:" + ports[ 3 ], "127.0.0.1:" + ports[ 0 ] );
- r = new MongodRunner( ports[ 3 ], "/data/db/" + baseName + "-right", "127.0.0.1:" + ports[ 2 ], "127.0.0.1:" + ports[ 0 ] );
- rp = new ReplPair( o, r, a );
- resetDbpath( "/data/db/" + baseName + "-left" );
- } else {
- l = new MongodRunner( ports[ 1 ], "/data/db/" + baseName + "-left", "127.0.0.1:" + ports[ 2 ], "127.0.0.1:" + ports[ 0 ] );
- o = new MongodRunner( ports[ 2 ], "/data/db/" + baseName + "-right", "127.0.0.1:" + ports[ 1 ], "127.0.0.1:" + ports[ 0 ] );
- rp = new ReplPair( l, o, a );
- resetDbpath( "/data/db/" + baseName + "-right" );
- }
-
- rp.start( true );
- rp.waitForSteadyState( [ 1, 0 ] );
-
- rp.slave().setSlaveOk();
- assert.eq( 2, rp.master().getDB( baseName ).z.find().toArray().length );
- assert.eq( 2, rp.slave().getDB( baseName ).z.find().toArray().length );
-
- checkWrite( rp.master(), rp.slave() );
- assert.eq( 3, rp.slave().getDB( baseName ).z.find().toArray().length );
-
- ports.forEach( function( x ) { stopMongod( x ); } );
-
-}
-
-doTest( 15 ); // SIGTERM
-doTest( 9 ); // SIGKILL
diff --git a/jstests/repl/replacePeer2.js b/jstests/repl/replacePeer2.js
deleted file mode 100644
index 33b054a..0000000
--- a/jstests/repl/replacePeer2.js
+++ /dev/null
@@ -1,86 +0,0 @@
-// test replace peer on slave
-
-var baseName = "jstests_replacepeer2test";
-
-ismaster = function( n ) {
- im = n.getDB( "admin" ).runCommand( { "ismaster" : 1 } );
-// print( "ismaster: " + tojson( im ) );
- assert( im );
- return im.ismaster;
-}
-
-var writeOneIdx = 0;
-
-writeOne = function( n ) {
- n.getDB( baseName ).z.save( { _id: new ObjectId(), i: ++writeOneIdx } );
-}
-
-getCount = function( n ) {
- return n.getDB( baseName ).z.find( { i: writeOneIdx } ).toArray().length;
-}
-
-checkWrite = function( m, s ) {
- writeOne( m );
- assert.eq( 1, getCount( m ) );
- s.setSlaveOk();
- assert.soon( function() {
- return 1 == getCount( s );
- } );
-}
-
-doTest = function( signal ) {
-
- ports = allocatePorts( 4 );
-
- a = new MongodRunner( ports[ 0 ], "/data/db/" + baseName + "-arbiter" );
- l = new MongodRunner( ports[ 1 ], "/data/db/" + baseName + "-left", "127.0.0.1:" + ports[ 3 ], "127.0.0.1:" + ports[ 0 ] );
- r = new MongodRunner( ports[ 3 ], "/data/db/" + baseName + "-right", "127.0.0.1:" + ports[ 1 ], "127.0.0.1:" + ports[ 0 ] );
-
- rp = new ReplPair( l, r, a );
- rp.start();
- rp.waitForSteadyState( [ 1, 0 ] );
- leftSlave = ( rp.slave().host == rp.left().host );
-
- checkWrite( rp.master(), rp.slave() );
-
- // allow slave to finish initial sync
- var res = rp.slave().getDB( "admin" ).runCommand( {replacepeer:1} );
- assert( res.ok , "replacepeer didn't finish: " + tojson( res ) );
-
- // Should not be saved to slave.
- writeOne( rp.master() );
- // Make sure there would be enough time to save to l if we hadn't called replacepeer.
- sleep( 10000 );
-
- ports.forEach( function( x ) { stopMongod( x, signal ); } );
-
- if ( leftSlave ) {
- l = new MongodRunner( ports[ 1 ], "/data/db/" + baseName + "-left", "127.0.0.1:" + ports[ 2 ], "127.0.0.1:" + ports[ 0 ] );
- o = new MongodRunner( ports[ 2 ], "/data/db/" + baseName + "-right", "127.0.0.1:" + ports[ 1 ], "127.0.0.1:" + ports[ 0 ] );
- rp = new ReplPair( l, o, a );
- resetDbpath( "/data/db/" + baseName + "-right" );
- } else {
- o = new MongodRunner( ports[ 2 ], "/data/db/" + baseName + "-left", "127.0.0.1:" + ports[ 3 ], "127.0.0.1:" + ports[ 0 ] );
- r = new MongodRunner( ports[ 3 ], "/data/db/" + baseName + "-right", "127.0.0.1:" + ports[ 2 ], "127.0.0.1:" + ports[ 0 ] );
- rp = new ReplPair( o, r, a );
- resetDbpath( "/data/db/" + baseName + "-left" );
- }
-
- rp.start( true );
- rp.waitForSteadyState( [ 1, 0 ] );
-
- rp.slave().setSlaveOk();
- assert.eq( 1, rp.slave().getDB( baseName ).z.find().toArray().length );
- assert.eq( 1, rp.master().getDB( baseName ).z.find().toArray().length );
-
- checkWrite( rp.master(), rp.slave() );
- assert.eq( 2, rp.slave().getDB( baseName ).z.find().toArray().length );
-
- ports.forEach( function( x ) { stopMongod( x ); } );
-
-}
-
-doTest( 15 ); // SIGTERM
-doTest( 9 ); // SIGKILL
-
-print("replace2Peer finishes");
diff --git a/jstests/repl/snapshot2.js b/jstests/repl/snapshot2.js
deleted file mode 100644
index 60b3531..0000000
--- a/jstests/repl/snapshot2.js
+++ /dev/null
@@ -1,72 +0,0 @@
-// Test SERVER-623 - starting repl peer from a new snapshot of master
-
-print("snapshot2.js 1 -----------------------------------------------------------");
-
-ports = allocatePorts( 3 );
-
-var baseName = "repl_snapshot2";
-var basePath = "/data/db/" + baseName;
-
-a = new MongodRunner( ports[ 0 ], basePath + "-arbiter" );
-l = new MongodRunner( ports[ 1 ], basePath + "-left", "127.0.0.1:" + ports[ 2 ], "127.0.0.1:" + ports[ 0 ] );
-r = new MongodRunner( ports[ 2 ], basePath + "-right", "127.0.0.1:" + ports[ 1 ], "127.0.0.1:" + ports[ 0 ] );
-
-print("snapshot2.js 2 -----------------------------------------------------------");
-
-rp = new ReplPair(l, r, a);
-rp.start();
-print("snapshot2.js 3 -----------------------------------------------------------");
-rp.waitForSteadyState();
-
-print("snapshot2.js 4 -----------------------------------------------------------");
-
-big = new Array( 2000 ).toString(); // overflow oplog, so test can't pass supriously
-rp.slave().setSlaveOk();
-print("snapshot2.js 5 -----------------------------------------------------------");
-for (i = 0; i < 500; ++i) {
- rp.master().getDB( baseName )[ baseName ].save( { _id: new ObjectId(), i: i, b: big } );
- if (i % 250 == 249) {
- function p() { return i + 1 == rp.slave().getDB(baseName)[baseName].count(); }
- try {
- assert.soon(p);
- } catch (e) {
- print("\n\n\nsnapshot2.js\ni+1:" + (i + 1));
- print("slave count:" + rp.slave().getDB(baseName)[baseName].count());
- sleep(2000);
- print(p());
- throw (e);
- }
- sleep( 10 ); // give master a chance to grab a sync point - have such small oplogs the master log might overflow otherwise
- }
-}
-print("snapshot2.js 6 -----------------------------------------------------------");
-
-rp.master().getDB( "admin" ).runCommand( {fsync:1,lock:1} );
-leftMaster = ( rp.master().host == rp.left().host );
-rp.killNode( rp.slave() );
-if ( leftMaster ) {
- copyDbpath( basePath + "-left", basePath + "-right" );
-} else {
- copyDbpath( basePath + "-right", basePath + "-left" );
-}
-rp.master().getDB( "admin" ).$cmd.sys.unlock.findOne();
-rp.killNode( rp.master() );
-
-clearRawMongoProgramOutput();
-
-rp.right_.extraArgs_ = [ "--fastsync" ];
-rp.left_.extraArgs_ = [ "--fastsync" ];
-
-rp.start( true );
-rp.waitForSteadyState();
-assert.eq( 500, rp.master().getDB( baseName )[ baseName ].count() );
-rp.slave().setSlaveOk();
-assert.eq( 500, rp.slave().getDB( baseName )[ baseName ].count() );
-rp.master().getDB( baseName )[ baseName ].save( {i:500} );
-assert.soon( function() { return 501 == rp.slave().getDB( baseName )[ baseName ].count(); } );
-
-assert( !rawMongoProgramOutput().match( /resync/ ) );
-assert(!rawMongoProgramOutput().match(/SyncException/));
-
-print("snapshot2.js SUCCESS ----------------");
-
diff --git a/jstests/repl/snapshot3.js b/jstests/repl/snapshot3.js
deleted file mode 100644
index 02955e5..0000000
--- a/jstests/repl/snapshot3.js
+++ /dev/null
@@ -1,53 +0,0 @@
-// Test SERVER-623 - starting repl peer from a new snapshot of slave
-
-ports = allocatePorts( 3 );
-
-var baseName = "repl_snapshot3";
-var basePath = "/data/db/" + baseName;
-
-a = new MongodRunner( ports[ 0 ], basePath + "-arbiter" );
-l = new MongodRunner( ports[ 1 ], basePath + "-left", "127.0.0.1:" + ports[ 2 ], "127.0.0.1:" + ports[ 0 ] );
-r = new MongodRunner( ports[ 2 ], basePath + "-right", "127.0.0.1:" + ports[ 1 ], "127.0.0.1:" + ports[ 0 ] );
-
-rp = new ReplPair( l, r, a );
-rp.start();
-rp.waitForSteadyState();
-
-big = new Array( 2000 ).toString(); // overflow oplog, so test can't pass supriously
-rp.slave().setSlaveOk();
-for( i = 0; i < 500; ++i ) {
- rp.master().getDB( baseName )[ baseName ].save( { _id: new ObjectId(), i: i, b: big } );
- if ( i % 250 == 249 ) {
- assert.soon( function() { return i+1 == rp.slave().getDB( baseName )[ baseName ].count(); } );
- sleep( 10 ); // give master a chance to grab a sync point - have such small oplogs the master log might overflow otherwise
- }
-}
-
-rp.slave().getDB( "admin" ).runCommand( {fsync:1,lock:1} );
-leftSlave = ( rp.slave().host == rp.left().host );
-rp.killNode( rp.master() );
-if ( leftSlave ) {
- copyDbpath( basePath + "-left", basePath + "-right" );
-} else {
- copyDbpath( basePath + "-right", basePath + "-left" );
-}
-rp.slave().getDB( "admin" ).$cmd.sys.unlock.findOne();
-rp.killNode( rp.slave() );
-
-clearRawMongoProgramOutput();
-
-rp.right_.extraArgs_ = [ "--fastsync" ];
-rp.left_.extraArgs_ = [ "--fastsync" ];
-
-rp.start( true );
-rp.waitForSteadyState();
-assert.eq( 500, rp.master().getDB( baseName )[ baseName ].count() );
-rp.slave().setSlaveOk();
-assert.eq( 500, rp.slave().getDB( baseName )[ baseName ].count() );
-rp.master().getDB( baseName )[ baseName ].save( {i:500} );
-assert.soon( function() { return 501 == rp.slave().getDB( baseName )[ baseName ].count(); } );
-
-assert( !rawMongoProgramOutput().match( new RegExp( "resync.*" + baseName + ".*\n" ) ) , "last1" );
-assert( !rawMongoProgramOutput().match( /SyncException/ ) , "last2" );
-
-print("snapshot3.js finishes");