1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
doTest = function( signal ) {
// FAILING TEST
// See below:
// Test replication with getLastError
// Replica set testing API
// Create a new replica set test. Specify set name and the number of nodes you want.
var replTest = new ReplSetTest( {name: 'testSet', nodes: 3} );
// call startSet() to start each mongod in the replica set
// this returns a list of nodes
var nodes = replTest.startSet();
// Call initiate() to send the replSetInitiate command
// This will wait for initiation
replTest.initiate();
var testDB = "repl-test";
// Call getMaster to return a reference to the node that's been
// elected master.
var master = replTest.getMaster();
// Wait for replication to a single node
master.getDB(testDB).bar.insert({n: 1});
// Wait for initial sync
replTest.awaitReplication();
var slaves = replTest.liveNodes.slaves;
slaves.forEach(function(slave) { slave.setSlaveOk(); });
var failed = false;
var callGetLastError = function(w, timeout, db) {
var result = master.getDB(db).getLastErrorObj( w , timeout );
printjson( result );
if(result['ok'] != 1) {
print("FAILURE");
failed = true;
}
}
// Test getlasterror with multiple inserts
// TEST FAILS HERE
print("**** Try inserting a multiple records -- first insert ****")
master.getDB(testDB).foo.insert({n: 1});
master.getDB(testDB).foo.insert({n: 2});
master.getDB(testDB).foo.insert({n: 3});
callGetLastError(3, 10000, testDB);
print("**** TEMP 1a ****")
m1 = master.getDB(testDB).foo.findOne({n: 1});
printjson( m1 );
assert( m1['n'] == 1 , "Failed to save to master on multiple inserts");
print("**** TEMP 1b ****")
var s0 = slaves[0].getDB(testDB).foo.findOne({n: 1});
assert( s0['n'] == 1 , "Failed to replicate to slave 0 on multiple inserts");
var s1 = slaves[1].getDB(testDB).foo.findOne({n: 1});
assert( s1['n'] == 1 , "Failed to replicate to slave 1 on multiple inserts");
// Test getlasterror with a simple insert
print("**** Try inserting a single record ****")
master.getDB(testDB).dropDatabase();
master.getDB(testDB).foo.insert({n: 1});
callGetLastError(3, 10000, testDB);
m1 = master.getDB(testDB).foo.findOne({n: 1});
printjson( m1 );
assert( m1['n'] == 1 , "Failed to save to master");
var s0 = slaves[0].getDB(testDB).foo.findOne({n: 1});
assert( s0['n'] == 1 , "Failed to replicate to slave 0");
var s1 = slaves[1].getDB(testDB).foo.findOne({n: 1});
assert( s1['n'] == 1 , "Failed to replicate to slave 1");
// Test getlasterror with large insert
print("**** Try inserting many records ****")
bigData = new Array(2000).toString()
for(var n=0; n<1000; n++) {
master.getDB(testDB).baz.insert({n: n, data: bigData});
}
callGetLastError(3, 60000, testDB);
var verifyReplication = function(nodeName, collection) {
data = collection.findOne({n: 1});
assert( data['n'] == 1 , "Failed to save to " + nodeName);
data = collection.findOne({n: 999});
assert( data['n'] == 999 , "Failed to save to " + nodeName);
}
verifyReplication("master", master.getDB(testDB).baz);
verifyReplication("slave 0", slaves[0].getDB(testDB).baz);
verifyReplication("slave 1", slaves[1].getDB(testDB).baz);
assert( failed == false, "Replication with getLastError failed. See errors." );
replTest.stopSet( signal );
}
doTest( 15 );
|