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']