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