From 6fd3906bc04c34d676ff38b94178c5fbb7a5d966 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rados=C5=82aw=20Miernik?= Date: Fri, 19 May 2023 13:19:47 +0200 Subject: [PATCH] Handled implicit collection creation oplog message (fixes #12627). --- packages/mongo/oplog_tailing.js | 3 +++ packages/mongo/oplog_tests.js | 15 +++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/packages/mongo/oplog_tailing.js b/packages/mongo/oplog_tailing.js index fc702318db..4b76e69c9e 100644 --- a/packages/mongo/oplog_tailing.js +++ b/packages/mongo/oplog_tailing.js @@ -308,6 +308,9 @@ Object.assign(OplogHandle.prototype, { trigger.collection = doc.o.drop; trigger.dropCollection = true; trigger.id = null; + } else if ("create" in doc.o && "idIndex" in doc.o) { + // A collection got implicitly created within a transaction. There's + // no need to do anything about it. } else { throw Error("Unknown command " + EJSON.stringify(doc)); } diff --git a/packages/mongo/oplog_tests.js b/packages/mongo/oplog_tests.js index bb3374f8fb..d96c72aa05 100644 --- a/packages/mongo/oplog_tests.js +++ b/packages/mongo/oplog_tests.js @@ -164,6 +164,21 @@ process.env.MONGO_OPLOG_URL && testAsyncMulti( ] ); +import { Mongo, MongoInternals } from 'meteor/mongo'; +process.env.MONGO_OPLOG_URL && Tinytest.addAsync( + 'mongo-livedata - oplog - x - implicit collection creation', + async test => { + const collection = new Mongo.Collection(`oplog-implicit-${test.runId()}`); + const { client } = MongoInternals.defaultRemoteCollectionDriver().mongo; + test.equal(await collection.find().countAsync(), 0); + await client.withSession(async session => { + await session.withTransaction(async () => { + await collection.rawCollection().insertOne({}, { session }); + }); + }); + test.equal(await collection.find().countAsync(), 1); + }, +); // Meteor.isServer && Tinytest.addAsync( // "mongo-livedata - oplog - _onFailover",