diff options
author | Judah Schvimer <judah@mongodb.com> | 2017-11-13 18:09:39 -0500 |
---|---|---|
committer | Judah Schvimer <judah@mongodb.com> | 2017-11-13 18:09:39 -0500 |
commit | 956a2d030f04e5bbb2213ac6052f10d82cd3ec74 (patch) | |
tree | cdddb75125b6db8d1b1d09ccc9bed0de3eaa0019 | |
parent | c123712316907a0433a8c5f9db5fd7223a4bb320 (diff) | |
download | mongo-956a2d030f04e5bbb2213ac6052f10d82cd3ec74.tar.gz |
SERVER-31881 set collection temp status correctly in rollbackViaRefetch
-rw-r--r-- | src/mongo/db/repl/rs_rollback.cpp | 7 | ||||
-rw-r--r-- | src/mongo/db/repl/rs_rollback_test.cpp | 42 |
2 files changed, 44 insertions, 5 deletions
diff --git a/src/mongo/db/repl/rs_rollback.cpp b/src/mongo/db/repl/rs_rollback.cpp index 5ffe2cab16e..a0ffbedc496 100644 --- a/src/mongo/db/repl/rs_rollback.cpp +++ b/src/mongo/db/repl/rs_rollback.cpp @@ -1169,11 +1169,8 @@ void rollback_internal::syncFixUp(OperationContext* opCtx, WriteUnitOfWork wuow(opCtx); - // If the collection is temporary, we set the temp field to true. Otherwise, we do not - // add the the temp field. - if (options.temp) { - cce->setIsTemp(opCtx, options.temp); - } + // Set collection to whatever temp status is on the sync source. + cce->setIsTemp(opCtx, options.temp); // Resets collection user flags such as noPadding and usePowerOf2Sizes. if (options.flagsSet || cce->getCollectionOptions(opCtx).flagsSet) { diff --git a/src/mongo/db/repl/rs_rollback_test.cpp b/src/mongo/db/repl/rs_rollback_test.cpp index 7cde2e78d4f..e261eabb1e3 100644 --- a/src/mongo/db/repl/rs_rollback_test.cpp +++ b/src/mongo/db/repl/rs_rollback_test.cpp @@ -1852,6 +1852,48 @@ TEST_F(RollbackResyncsCollectionOptionsTest, resyncCollectionOptionsTest(localCollOptions, remoteCollOptionsObj); } +TEST_F(RollbackResyncsCollectionOptionsTest, LocalTempCollectionRemotePermanentCollection) { + CollectionOptions localCollOptions; + localCollOptions.uuid = UUID::gen(); + localCollOptions.temp = true; + + BSONObj remoteCollOptionsObj = BSONObj(); + + resyncCollectionOptionsTest(localCollOptions, remoteCollOptionsObj); +} + +TEST_F(RollbackResyncsCollectionOptionsTest, LocalPermanentCollectionRemoteTempCollection) { + CollectionOptions localCollOptions; + localCollOptions.uuid = UUID::gen(); + + BSONObj remoteCollOptionsObj = BSON("temp" << true); + + resyncCollectionOptionsTest(localCollOptions, remoteCollOptionsObj); +} + +TEST_F(RollbackResyncsCollectionOptionsTest, BothCollectionsTemp) { + CollectionOptions localCollOptions; + localCollOptions.uuid = UUID::gen(); + localCollOptions.temp = true; + + BSONObj remoteCollOptionsObj = BSON("temp" << true); + + resyncCollectionOptionsTest(localCollOptions, remoteCollOptionsObj); +} + +TEST_F(RollbackResyncsCollectionOptionsTest, ChangingTempStatusAlsoChangesOtherCollectionOptions) { + CollectionOptions localCollOptions; + localCollOptions.uuid = UUID::gen(); + localCollOptions.temp = true; + + BSONObj remoteCollOptionsObj = BSON("validationLevel" + << "strict" + << "validationAction" + << "error"); + + resyncCollectionOptionsTest(localCollOptions, remoteCollOptionsObj); +} + TEST_F(RSRollbackTest, RollbackCollectionModificationCommandInvalidCollectionOptions) { createOplog(_opCtx.get()); CollectionOptions options; |