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
62
63
64
65
66
67
68
69
70
71
|
/*
* Utilities for shard versioning testing.
*/
var ShardVersioningUtil = (function() {
/*
* Shard version indicating that shard version checking must be skipped.
*/
const kIgnoredShardVersion = {
e: ObjectId("00000000ffffffffffffffff"),
t: Timestamp(Math.pow(2, 32) - 1, Math.pow(2, 32) - 1),
v: Timestamp(0, 0)
};
/*
* Returns the metadata for the collection in the shard's catalog cache.
*/
let getMetadataOnShard = function(shard, ns) {
let res = shard.adminCommand({getShardVersion: ns, fullMetadata: true});
assert.commandWorked(res);
return res.metadata;
};
/*
* Asserts that the collection version for the collection in the shard's catalog cache
* is equal to the given collection version.
*/
let assertCollectionVersionEquals = function(shard, ns, collectionVersion) {
assert.eq(getMetadataOnShard(shard, ns).collVersion, collectionVersion);
};
/*
* Asserts that the collection version for the collection in the shard's catalog cache
* is older than the given collection version.
*/
let assertCollectionVersionOlderThan = function(shard, ns, collectionVersion) {
let shardCollectionVersion = getMetadataOnShard(shard, ns).collVersion;
if (shardCollectionVersion != undefined) {
assert.lt(shardCollectionVersion.t, collectionVersion.t);
}
};
/*
* Asserts that the shard version of the shard in its catalog cache is equal to the
* given shard version.
*/
let assertShardVersionEquals = function(shard, ns, shardVersion) {
assert.eq(getMetadataOnShard(shard, ns).shardVersion, shardVersion);
};
/*
* Moves the chunk that matches the given query to toShard. Forces the recipient to skip the
* metadata refresh post-migration commit.
*/
let moveChunkNotRefreshRecipient = function(mongos, ns, fromShard, toShard, findQuery) {
let failPoint = configureFailPoint(toShard, "migrationRecipientFailPostCommitRefresh");
assert.commandWorked(mongos.adminCommand(
{moveChunk: ns, find: findQuery, to: toShard.shardName, _waitForDelete: true}));
failPoint.off();
};
return {
kIgnoredShardVersion,
getMetadataOnShard,
assertCollectionVersionEquals,
assertCollectionVersionOlderThan,
assertShardVersionEquals,
moveChunkNotRefreshRecipient
};
})();
|