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
|
// @tags: [requires_capped, requires_profiling]
// Test cloneCollection command
var baseName = "jstests_clonecollection";
var fromMongod = MongoRunner.runMongod({bind_ip: "127.0.0.1"});
var toMongod = MongoRunner.runMongod({bind_ip: "127.0.0.1"});
var f = fromMongod.getDB(baseName);
var t = toMongod.getDB(baseName);
for (i = 0; i < 1000; ++i) {
f.a.save({i: i});
}
assert.eq(1000, f.a.find().count(), "A1");
assert.commandWorked(t.cloneCollection("localhost:" + fromMongod.port, "a"));
assert.eq(1000, t.a.find().count(), "A2");
t.a.drop();
assert.commandWorked(
t.cloneCollection("localhost:" + fromMongod.port, "a", {i: {$gte: 10, $lt: 20}}));
assert.eq(10, t.a.find().count(), "A3");
t.a.drop();
assert.eq(0, t.a.getIndexes().length, "prep 2");
f.a.ensureIndex({i: 1});
assert.eq(2, f.a.getIndexes().length, "expected index missing");
assert.commandWorked(t.cloneCollection("localhost:" + fromMongod.port, "a"));
if (t.a.getIndexes().length != 2) {
printjson(t.a.getIndexes());
}
assert.eq(2, t.a.getIndexes().length, "expected index missing");
// Verify index works
x = t.a.find({i: 50}).hint({i: 1}).explain("executionStats");
printjson(x);
assert.eq(1, x.executionStats.nReturned, "verify 1");
assert.eq(
1, t.a.find({i: 50}).hint({i: 1}).toArray().length, "match length did not match expected");
// Check that capped-ness is preserved on clone
f.a.drop();
t.a.drop();
f.createCollection("a", {capped: true, size: 1000});
assert(f.a.isCapped());
assert.commandWorked(t.cloneCollection("localhost:" + fromMongod.port, "a"));
assert(t.a.isCapped(), "cloned collection not capped");
// Check that cloning to "system.profile" is disallowed.
f.a.drop();
f.system.profile.drop();
assert.commandWorked(f.setProfilingLevel(2));
assert.writeOK(f.a.insert({}));
assert.gt(f.system.profile.count(), 0);
t.system.profile.drop();
assert.commandFailed(t.cloneCollection("localhost:" + fromMongod.port, "system.profile"));
// Check that cloning a view is disallowed.
f.a.drop();
t.a.drop();
assert.commandWorked(f.createCollection("a"));
assert.commandWorked(f.createView("viewA", "a", []));
assert.commandFailedWithCode(t.cloneCollection("localhost:" + fromMongod.port, "viewA"),
ErrorCodes.CommandNotSupportedOnView,
"cloneCollection on view expected to fail");
MongoRunner.stopMongod(fromMongod);
MongoRunner.stopMongod(toMongod);
|