mirror of
https://github.com/mongodb/mongo.git
synced 2024-11-24 16:46:00 +01:00
668a6f4e9e
GitOrigin-RevId: 1cd8a1cdb3d45876003ad3ccddd4d466cd9fb66c
113 lines
3.3 KiB
JavaScript
113 lines
3.3 KiB
JavaScript
/**
|
|
* Test that change streams returns 'create' and 'createIndexes' events from chunk migration when
|
|
* showSystemEvents is set.
|
|
*
|
|
* @tags: [
|
|
* requires_fcv_60,
|
|
* requires_sharding,
|
|
* uses_change_streams,
|
|
* change_stream_does_not_expect_txns,
|
|
* assumes_unsharded_collection,
|
|
* assumes_read_preference_unchanged,
|
|
* ]
|
|
*/
|
|
|
|
import {assertDropCollection} from "jstests/libs/collection_drop_recreate.js";
|
|
import {ChangeStreamTest} from "jstests/libs/query/change_stream_util.js";
|
|
import {ShardingTest} from "jstests/libs/shardingtest.js";
|
|
|
|
const dbName = jsTestName();
|
|
const collName = "test";
|
|
const collNS = dbName + "." + collName;
|
|
const ns = {
|
|
db: dbName,
|
|
coll: collName
|
|
};
|
|
|
|
const st = new ShardingTest({
|
|
shards: 2,
|
|
rs: {nodes: 1, setParameter: {writePeriodicNoops: true, periodicNoopIntervalSecs: 1}}
|
|
});
|
|
|
|
const mongosConn = st.s;
|
|
const db = mongosConn.getDB(dbName);
|
|
const test = new ChangeStreamTest(db);
|
|
|
|
function getCollectionUuid(coll) {
|
|
const collInfo = db.getCollectionInfos({name: coll})[0];
|
|
return collInfo.info.uuid;
|
|
}
|
|
|
|
function prepareCollection() {
|
|
assertDropCollection(db, collName);
|
|
assert.commandWorked(db.runCommand({create: collName}));
|
|
assert.commandWorked(
|
|
db.runCommand({createIndexes: collName, indexes: [{key: {x: 1}, name: "idx_x"}]}));
|
|
|
|
assert.commandWorked(st.s.adminCommand({shardCollection: collNS, key: {_id: 1}}));
|
|
assert.commandWorked(st.s.adminCommand({split: collNS, middle: {_id: 0}}));
|
|
}
|
|
|
|
// Test that create and createIndexes events are observable with migration.
|
|
function validateCreateEventsFromChunkMigration() {
|
|
prepareCollection();
|
|
let pipeline = [
|
|
{$changeStream: {showExpandedEvents: true, showSystemEvents: true}},
|
|
];
|
|
|
|
let cursor = test.startWatchingChanges({pipeline, collection: collName});
|
|
|
|
assert.commandWorked(
|
|
db.adminCommand({moveChunk: collNS, find: {_id: 0}, to: st.shard1.shardName}));
|
|
|
|
test.assertNextChangesEqual({
|
|
cursor: cursor,
|
|
expectedChanges: {
|
|
operationType: "create",
|
|
ns: ns,
|
|
}
|
|
});
|
|
|
|
test.assertNextChangesEqual({
|
|
cursor: cursor,
|
|
expectedChanges: {
|
|
operationType: "createIndexes",
|
|
ns: ns,
|
|
}
|
|
});
|
|
}
|
|
|
|
// Test that if showSystemEvents is false, we do not see the create and createIndexes events from
|
|
// chunk migration.
|
|
function validateShowSystemEventsFalse() {
|
|
prepareCollection();
|
|
let pipeline = [
|
|
{$changeStream: {showExpandedEvents: true, showSystemEvents: false}},
|
|
];
|
|
let cursor = test.startWatchingChanges({pipeline, collection: collName});
|
|
|
|
assert.commandWorked(
|
|
db.adminCommand({moveChunk: collNS, find: {_id: 0}, to: st.shard1.shardName}));
|
|
|
|
assert.commandWorked(db[collName].insert({_id: 1, x: 1}));
|
|
|
|
// Confirm that we don't observe the create event in the stream, but only see
|
|
// the subsequent insert.
|
|
test.assertNextChangesEqual({
|
|
cursor: cursor,
|
|
expectedChanges: {
|
|
operationType: "insert",
|
|
ns: ns,
|
|
fullDocument: {_id: 1, x: 1},
|
|
documentKey: {_id: 1},
|
|
}
|
|
});
|
|
}
|
|
|
|
assert.commandWorked(db.adminCommand({enableSharding: dbName, primaryShard: st.shard0.shardName}));
|
|
|
|
validateCreateEventsFromChunkMigration();
|
|
validateShowSystemEventsFalse();
|
|
|
|
st.stop();
|