summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJudah Schvimer <judah@mongodb.com>2017-11-13 18:09:39 -0500
committerJudah Schvimer <judah@mongodb.com>2017-11-13 18:09:39 -0500
commit956a2d030f04e5bbb2213ac6052f10d82cd3ec74 (patch)
treecdddb75125b6db8d1b1d09ccc9bed0de3eaa0019
parentc123712316907a0433a8c5f9db5fd7223a4bb320 (diff)
downloadmongo-956a2d030f04e5bbb2213ac6052f10d82cd3ec74.tar.gz
SERVER-31881 set collection temp status correctly in rollbackViaRefetch
-rw-r--r--src/mongo/db/repl/rs_rollback.cpp7
-rw-r--r--src/mongo/db/repl/rs_rollback_test.cpp42
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;