~ubuntu-branches/ubuntu/vivid/juju-mongodb/vivid-proposed

« back to all changes in this revision

Viewing changes to jstests/replsets/slavedelay1.js

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2014-04-30 08:59:21 UTC
  • mfrom: (1.1.2)
  • Revision ID: package-import@ubuntu.com-20140430085921-jm4pr3gsz8z068so
Tags: 2.4.10-0ubuntu1
New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
12
12
  /* set slaveDelay to 30 seconds */
13
13
  var config = replTest.getReplSetConfig();
14
14
  config.members[2].priority = 0;
15
 
  config.members[2].slaveDelay = 10;
 
15
  config.members[2].slaveDelay = 30;
16
16
 
17
17
  replTest.initiate(config);
18
18
 
19
19
  var master = replTest.getMaster().getDB(name);
20
20
  var slaveConns = replTest.liveNodes.slaves;
21
 
  var slave = [];
 
21
  var slaves = [];
22
22
  for (var i in slaveConns) {
23
23
    var d = slaveConns[i].getDB(name);
24
 
    d.getMongo().setSlaveOk();
25
 
    slave.push(d);
 
24
    slaves.push(d);
26
25
  }
27
26
 
28
27
  waitForAllMembers(master);
35
34
  assert.eq(doc.x, 1);
36
35
 
37
36
  // make sure slave has it
38
 
  var doc = slave[0].foo.findOne();
 
37
  var doc = slaves[0].foo.findOne();
39
38
  assert.eq(doc.x, 1);
40
39
 
41
40
  // make sure delayed slave doesn't have it
42
 
  assert.eq(slave[1].foo.findOne(), null);
43
 
 
44
41
  for (var i=0; i<8; i++) {
45
 
      assert.eq(slave[1].foo.findOne(), null);
 
42
      assert.eq(slaves[1].foo.findOne(), null);
46
43
      sleep(1000);
47
44
  }
48
45
 
49
 
  // now delayed slave should have it
 
46
  // within 30 seconds delayed slave should have it
50
47
  assert.soon(function() {
51
 
          var z = slave[1].foo.findOne();
 
48
          var z = slaves[1].foo.findOne();
52
49
          return z && z.x == 1;
53
50
      });
54
51
 
55
52
 
56
53
  /************* Part 2 *******************/
57
54
 
58
 
  // how about non-initial sync?
59
 
 
60
 
  for (var i=0; i<100; i++) {
61
 
    master.foo.insert({_id : i, "foo" : "bar"});
62
 
  }
63
 
  master.runCommand({getlasterror:1,w:2});
64
 
 
65
 
  assert.eq(master.foo.findOne({_id : 99}).foo, "bar");
66
 
  assert.eq(slave[0].foo.findOne({_id : 99}).foo, "bar");
67
 
  assert.eq(slave[1].foo.findOne({_id : 99}), null);
68
 
 
69
 
  for (var i=0; i<8; i++) {
70
 
      assert.eq(slave[1].foo.findOne({_id:99}), null);
71
 
      sleep(1000);
72
 
  }
73
 
 
74
 
  assert.soon(function() {
75
 
          var z = slave[1].foo.findOne({_id : 99});
76
 
          return z && z.foo == "bar";
77
 
      });
78
 
 
79
 
  /************* Part 3 *******************/
80
 
 
81
55
  // how about if we add a new server?  will it sync correctly?
82
 
 
83
56
  conn = replTest.add();
84
57
 
85
58
  config = master.getSisterDB("local").system.replset.findOne();
86
59
  printjson(config);
87
60
  config.version++;
88
 
  config.members.push({_id : 3, host : host+":"+replTest.ports[replTest.ports.length-1],priority:0, slaveDelay:10});
 
61
  config.members.push({_id: 3,
 
62
                       host: host+":"+replTest.ports[replTest.ports.length-1],
 
63
                       priority:0,
 
64
                       slaveDelay:30});
89
65
 
90
66
  master = reconfig(replTest, config);
91
67
  master = master.getSisterDB(name);
92
68
 
93
 
  // it should be all caught up now
 
69
  // wait for the node to catch up
 
70
  replTest.awaitReplication();
94
71
 
95
72
  master.foo.insert({_id : 123, "x" : "foo"});
96
73
  master.runCommand({getlasterror:1,w:2});
97
74
 
98
 
  conn.setSlaveOk();
99
 
 
100
75
  for (var i=0; i<8; i++) {
101
76
      assert.eq(conn.getDB(name).foo.findOne({_id:123}), null);
102
77
      sleep(1000);
107
82
          return z != null && z.x == "foo"
108
83
      });
109
84
 
110
 
  /************* Part 4 ******************/
 
85
  /************* Part 3 ******************/
111
86
 
112
87
  print("reconfigure slavedelay");
113
88
 
120
95
          return conn.getDB("local").system.replset.findOne().version == config.version;
121
96
      });
122
97
 
 
98
  // wait for node to become secondary
123
99
  assert.soon(function() {
124
100
      var result = conn.getDB("admin").isMaster();
125
101
      printjson(result);
130
106
  master.foo.insert({_id : 124, "x" : "foo"});
131
107
  assert(master.foo.findOne({_id:124}) != null);
132
108
 
133
 
  for (var i=0; i<13; i++) {
 
109
  for (var i=0; i<10; i++) {
134
110
      assert.eq(conn.getDB(name).foo.findOne({_id:124}), null);
135
111
      sleep(1000);
136
112
  }
137
113
 
138
 
  replTest.awaitReplication();
 
114
  // the node should have the document in 15 seconds (20 for some safety against races)
 
115
  assert.soon(function() {
 
116
      return conn.getDB(name).foo.findOne({_id:124}) != null;
 
117
  }, 10*1000);
139
118
 
140
119
  replTest.stopSet();
141
120
}