Description
Not sure if this is "works as designed" but if so, it should probably be documented as such because it seems like it has the potential to create an unexpected state on the destination host.
I create two replica sets: replset0 has a primary on localhost:4000 and replset1 has a primary on localhost:4003.
On replset0, i insert a bunch of docs, drop the collection, insert a bunch more docs:
replset0:PRIMARY> for(var i=0;i<100;i++){ db.test.insert({"x":i}) }
|
replset0:PRIMARY> db.test.count()
|
100
|
replset0:PRIMARY> db.test.drop()
|
true
|
replset0:PRIMARY> db.test.count()
|
0
|
replset0:PRIMARY> for(var i=0;i<100;i++){ db.test.insert({"x":i}) }
|
replset0:PRIMARY> db.test.count()
|
100
|
Then replay operations from replset0 onto replset1:
mongooplog --from localhost:4000 --host localhost:4003
|
connected to: localhost:4003
|
Fri Jul 27 16:14:57 [oplogreplay] going to connect
|
Fri Jul 27 16:14:57 [oplogreplay] connected
|
Fri Jul 27 16:14:57 [oplogreplay] starting from Jul 26 16:14:57:0
|
skipping: { ts: Timestamp 1343420072000|1, h: -2847272704779079313, op: "c", ns: "test.$cmd", o: { drop: "test" } }
|
Not clear on why it is "skipping" the drop operation here.
Then I check the contents of the collection on replset1:
connecting to: localhost:4003/test
|
replset1:PRIMARY> db.test.count()
|
200
|
I expected the destination host to have the same # of docs (100) as the source, but it has more because the drop operation was apparently not executed.
Edit:
It looks like database drop commands are skipped as well:
connected to: localhost:4003
|
Sat Jul 28 15:23:57 [oplogreplay] going to connect
|
Sat Jul 28 15:23:57 [oplogreplay] connected
|
Sat Jul 28 15:23:57 [oplogreplay] starting from Jul 27 15:23:57:0
|
skipping: { ts: Timestamp 1343503437000|1, h: 3555166822529716989, op: "c", ns: "test.$cmd", o: { dropDatabase: 1 } }
|
F
|
======================================================================
|
FAIL: test_drops (__main__.TestMongoOplogTool)
|
----------------------------------------------------------------------
|
Traceback (most recent call last):
|
File "./rs2test.py", line 131, in test_drops
|
self.assertNotIn("test", self.y_primary.database_names())
|
AssertionError: 'test' unexpectedly found in [u'local', u'test', u'admin']
|