// Term counter should be present in oplog entries under protocol version 1 but should be absent // protocol version 0. (function () { 'use strict'; load('jstests/replsets/rslib.js'); var name = 'oplog_term'; var replSet = new ReplSetTest({name: name, nodes: 1, protocolVersion: 0}); replSet.startSet(); replSet.initiate(); replSet.waitForState(replSet.nodes[0], ReplSetTest.State.PRIMARY, 5 * 1000); // Protocol version 0 - 'term' field should be absent from oplog entry. var primary = replSet.getPrimary(); var collection = primary.getDB('test').getCollection(name); assert.writeOK(collection.save({_id: 1})); var oplogEntry = getLatestOp(primary); assert(oplogEntry, 'unexpected empty oplog'); assert.eq(collection.getFullName(), oplogEntry.ns, 'unexpected namespace in oplog entry: ' + tojson(oplogEntry)); assert.eq(1, oplogEntry.o._id, 'oplog entry does not refer to most recently inserted document: ' + tojson(oplogEntry)); assert(!oplogEntry.hasOwnProperty('t'), 'oplog entry must not contain term: ' + tojson(oplogEntry)); // Protocol version 1 - 'term' field should present in oplog entry. var config = assert.commandWorked(primary.adminCommand({replSetGetConfig: 1})).config; config.protocolVersion = 1; config.version++; assert.commandWorked(primary.adminCommand({replSetReconfig: config})); replSet.waitForState(replSet.nodes[0], ReplSetTest.State.PRIMARY, 5 * 1000); primary = replSet.getPrimary(); collection = primary.getDB('test').getCollection(name); assert.writeOK(collection.save({_id: 2})); oplogEntry = getLatestOp(primary); assert(oplogEntry, 'unexpected empty oplog'); assert.eq(collection.getFullName(), oplogEntry.ns, 'unexpected namespace in oplog entry: ' + tojson(oplogEntry)); assert.eq(2, oplogEntry.o._id, 'oplog entry does not refer to most recently inserted document: ' + tojson(oplogEntry)); assert(oplogEntry.hasOwnProperty('t'), 'oplog entry must contain term: ' + tojson(oplogEntry)); var status = assert.commandWorked(primary.adminCommand({replSetGetStatus:1})); assert.eq(status.term, oplogEntry.t, 'term in oplog entry does not match term in status: ' + tojson(oplogEntry)); })();