1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
/**
* Tests that the index's full specification is included in the oplog entry corresponding to its
* creation.
*/
(function() {
"use strict";
load("jstests/libs/get_index_helpers.js");
var rst = new ReplSetTest({nodes: 1});
rst.startSet();
rst.initiate();
var primary = rst.getPrimary();
var testDB = primary.getDB("test");
var oplogColl = primary.getDB("local").oplog.rs;
function testOplogEntryContainsIndexInfoObj(coll, keyPattern, indexOptions) {
assert.commandWorked(coll.createIndex(keyPattern, indexOptions));
var allIndexes = coll.getIndexes();
var indexSpec = GetIndexHelpers.findByKeyPattern(allIndexes, keyPattern);
assert.neq(
null,
indexSpec,
"Index with key pattern " + tojson(keyPattern) + " not found: " + tojson(allIndexes));
var indexCreationOplogQuery = {op: "i", ns: testDB.system.indexes.getFullName()};
var allOplogEntries = oplogColl.find(indexCreationOplogQuery).toArray();
var found = allOplogEntries.filter(function(entry) {
return bsonWoCompare(entry.o, indexSpec) === 0;
});
assert.eq(1,
found.length,
"Failed to find full index specification " + tojson(indexSpec) +
" in any oplog entry from index creation: " + tojson(allOplogEntries));
assert.commandWorked(coll.dropIndex(keyPattern));
}
// Test that options both explicitly included in the command and implicitly filled in with
// defaults by the server are serialized into the corresponding oplog entry.
testOplogEntryContainsIndexInfoObj(testDB.oplog_format, {withoutAnyOptions: 1});
testOplogEntryContainsIndexInfoObj(testDB.oplog_format, {withV1: 1}, {v: 1});
testOplogEntryContainsIndexInfoObj(testDB.oplog_format,
{partialIndex: 1},
{partialFilterExpression: {field: {$exists: true}}});
// Test that the representation of an index's collation in the oplog on a collection with a
// non-simple default collation exactly matches that of the index's full specification.
assert.commandWorked(
testDB.runCommand({create: "oplog_format_collation", collation: {locale: "fr"}}));
testOplogEntryContainsIndexInfoObj(testDB.oplog_format_collation, {withDefaultCollation: 1});
testOplogEntryContainsIndexInfoObj(
testDB.oplog_format_collation, {withNonDefaultCollation: 1}, {collation: {locale: "en"}});
testOplogEntryContainsIndexInfoObj(testDB.oplog_format_collation, {withV1: 1}, {v: 1});
testOplogEntryContainsIndexInfoObj(
testDB.oplog_format_collation, {withSimpleCollation: 1}, {collation: {locale: "simple"}});
rst.stopSet();
})();
|