// Tests tracing where a document was inserted
load('jstests/libs/trace_missing_docs.js');

(function() {
'use strict';

var testDocMissing = function(useReplicaSet) {
    var options = {
        rs: useReplicaSet,
        shardOptions: {oplogSize: 10},
        rsOptions: {nodes: 1, oplogSize: 10}
    };

    var st = new ShardingTest({shards: 2, mongos: 1, other: options});

    var mongos = st.s0;
    var coll = mongos.getCollection("foo.bar");
    var admin = mongos.getDB("admin");

    assert.commandWorked(admin.runCommand({enableSharding: coll.getDB() + ""}));
    st.ensurePrimaryShard(coll.getDB() + "", st.shard0.shardName);

    coll.createIndex({sk: 1});
    assert.commandWorked(admin.runCommand({shardCollection: coll + "", key: {sk: 1}}));

    assert.commandWorked(coll.insert({_id: 12345, sk: 67890, hello: "world"}));
    assert.commandWorked(coll.update({_id: 12345}, {$set: {baz: 'biz'}}));
    assert.commandWorked(coll.update({sk: 67890}, {$set: {baz: 'boz'}}));

    assert.commandWorked(admin.runCommand(
        {moveChunk: coll + "", find: {sk: 0}, to: st.shard1.shardName, _waitForDelete: true}));

    st.printShardingStatus();

    var ops = traceMissingDoc(coll, {_id: 12345, sk: 67890});

    assert.eq(ops[0].op, 'i');
    assert.eq(ops.length, 5);

    jsTest.log("DONE! (using rs)");

    st.stop();
};

testDocMissing(true);
})();
