mongo/jstests/sharding/resharding_improvements_agg...

89 lines
2.5 KiB
JavaScript

/**
* Tests $_requestResumeToken in aggregate command.
*
* @tags: [
* requires_fcv_72,
* ]
*/
import {ShardingTest} from "jstests/libs/shardingtest.js";
const st = new ShardingTest({mongos: 1, shards: 2});
const kDbName = "db";
const collName = "foo";
const mongos = st.s0;
const numInitialDocs = 10;
const db = st.rs0.getPrimary().getDB(kDbName);
let bulk = db.getCollection(collName).initializeOrderedBulkOp();
for (let x = 0; x < numInitialDocs; x++) {
bulk.insert({oldKey: x, newKey: numInitialDocs - x});
}
assert.commandWorked(bulk.execute());
jsTest.log("aggregate with $requestResumeToken should fail without hint: {$natural: 1}.");
assert.commandFailedWithCode(
db.runCommand({aggregate: collName, pipeline: [], $_requestResumeToken: true, cursor: {}}),
ErrorCodes.BadValue,
);
jsTest.log("aggregate with $requestResumeToken should fail if the hint is not {$natural: 1}.");
assert.commandFailedWithCode(
db.runCommand({
aggregate: collName,
pipeline: [],
$_requestResumeToken: true,
cursor: {},
hint: {oldKey: 1},
}),
ErrorCodes.BadValue,
);
jsTest.log("aggregate with $requestResumeToken should return PBRT with recordId and an initialSyncId.");
let res = db.runCommand({
aggregate: collName,
pipeline: [],
$_requestResumeToken: true,
hint: {$natural: 1},
cursor: {batchSize: 1},
});
assert.hasFields(res.cursor, ["postBatchResumeToken"]);
assert.hasFields(res.cursor.postBatchResumeToken, ["$recordId"]);
assert.hasFields(res.cursor.postBatchResumeToken, ["$initialSyncId"]);
const resumeToken = res.cursor.postBatchResumeToken;
jsTest.log("aggregate with wrong $recordId type in $resumeAfter should fail");
assert.commandFailedWithCode(
db.runCommand({
aggregate: collName,
pipeline: [],
hint: {$natural: 1},
$_requestResumeToken: true,
$_resumeAfter: {$recordId: 1, $initialSyncId: UUID("81fd5473-1747-4c9d-8743-f10642b3bb99")},
cursor: {batchSize: 1},
}),
ErrorCodes.BadValue,
);
jsTest.log("aggregate with $resumeAfter should fail without {$_requestResumeToken: true}.");
assert.commandFailedWithCode(
db.runCommand({
aggregate: collName,
pipeline: [],
hint: {$natural: 1},
$_resumeAfter: resumeToken,
cursor: {batchSize: 1},
}),
ErrorCodes.BadValue,
);
res = db.runCommand({
aggregate: collName,
pipeline: [],
$_requestResumeToken: true,
hint: {$natural: 1},
$_resumeAfter: resumeToken,
cursor: {batchSize: 1},
});
st.stop();