summaryrefslogtreecommitdiff
path: root/src/mongo/db/repl
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/repl')
-rw-r--r--src/mongo/db/repl/oplog.cpp16
-rw-r--r--src/mongo/db/repl/sync_tail_test.cpp34
2 files changed, 44 insertions, 6 deletions
diff --git a/src/mongo/db/repl/oplog.cpp b/src/mongo/db/repl/oplog.cpp
index 76df271ed78..13769c5334d 100644
--- a/src/mongo/db/repl/oplog.cpp
+++ b/src/mongo/db/repl/oplog.cpp
@@ -658,12 +658,16 @@ std::map<std::string, ApplyOpMetadata> opsMap = {
return applyOps(txn, nsToDatabase(ns), cmd, &resultWeDontCareAbout);
},
{ErrorCodes::UnknownError}}},
- {"convertToCapped", {[](OperationContext* txn, const char* ns, BSONObj& cmd) -> Status {
- return convertToCapped(txn, parseNs(ns, cmd), cmd["size"].number());
- }}},
- {"emptycapped", {[](OperationContext* txn, const char* ns, BSONObj& cmd) -> Status {
- return emptyCapped(txn, parseNs(ns, cmd));
- }}},
+ {"convertToCapped",
+ {[](OperationContext* txn, const char* ns, BSONObj& cmd) -> Status {
+ return convertToCapped(txn, parseNs(ns, cmd), cmd["size"].number());
+ },
+ {ErrorCodes::NamespaceNotFound}}},
+ {"emptycapped",
+ {[](OperationContext* txn, const char* ns, BSONObj& cmd) -> Status {
+ return emptyCapped(txn, parseNs(ns, cmd));
+ },
+ {ErrorCodes::NamespaceNotFound}}},
};
} // namespace
diff --git a/src/mongo/db/repl/sync_tail_test.cpp b/src/mongo/db/repl/sync_tail_test.cpp
index 09953633f7e..f9fea88bf0b 100644
--- a/src/mongo/db/repl/sync_tail_test.cpp
+++ b/src/mongo/db/repl/sync_tail_test.cpp
@@ -1530,4 +1530,38 @@ TEST_F(IdempotencyTest, ResyncOnRenameCollection) {
ASSERT_EQUALS(runOp(op), ErrorCodes::OplogOperationUnsupported);
}
+TEST_F(IdempotencyTest, EmptyCappedNamespaceNotFound) {
+ // Create a BSON "emptycapped" command.
+ auto emptyCappedCmd = BSON("emptycapped" << nss.coll());
+
+ // Create an "emptycapped" oplog entry.
+ auto emptyCappedOp = makeCommandOplogEntry(nextOpTime(), nss, emptyCappedCmd);
+
+ // Ensure that NamespaceNotFound is acceptable.
+ ASSERT_OK(runOps({emptyCappedOp}));
+
+ AutoGetCollectionForRead autoColl(_opCtx.get(), nss);
+
+ // Ensure that autoColl.getCollection() and autoColl.getDb() are both null.
+ ASSERT_FALSE(autoColl.getCollection());
+ ASSERT_FALSE(autoColl.getDb());
+}
+
+TEST_F(IdempotencyTest, ConvertToCappedNamespaceNotFound) {
+ // Create a BSON "convertToCapped" command.
+ auto convertToCappedCmd = BSON("convertToCapped" << nss.coll());
+
+ // Create a "convertToCapped" oplog entry.
+ auto convertToCappedOp = makeCommandOplogEntry(nextOpTime(), nss, convertToCappedCmd);
+
+ // Ensure that NamespaceNotFound is acceptable.
+ ASSERT_OK(runOps({convertToCappedOp}));
+
+ AutoGetCollectionForRead autoColl(_opCtx.get(), nss);
+
+ // Ensure that autoColl.getCollection() and autoColl.getDb() are both null.
+ ASSERT_FALSE(autoColl.getCollection());
+ ASSERT_FALSE(autoColl.getDb());
+}
+
} // namespace