summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBenety Goh <benety@mongodb.com>2017-12-20 17:52:27 -0500
committerBenety Goh <benety@mongodb.com>2017-12-29 14:38:09 -0500
commit8553157abc8bafbe02b8d8e01ad4836512a9798e (patch)
tree89a8d417b157837827399560a96eaeac71f338b1 /src
parent0574fcecbf5427f14a5eae6389db0cdf266a5aa0 (diff)
downloadmongo-8553157abc8bafbe02b8d8e01ad4836512a9798e.tar.gz
SERVER-32098 converting a drop-pending collection to capped fails with NamespaceNotFound
Diffstat (limited to 'src')
-rw-r--r--src/mongo/db/catalog/capped_utils.cpp6
-rw-r--r--src/mongo/db/catalog/capped_utils_test.cpp4
2 files changed, 7 insertions, 3 deletions
diff --git a/src/mongo/db/catalog/capped_utils.cpp b/src/mongo/db/catalog/capped_utils.cpp
index d84b7bbc7ac..058acad2684 100644
--- a/src/mongo/db/catalog/capped_utils.cpp
+++ b/src/mongo/db/catalog/capped_utils.cpp
@@ -129,6 +129,12 @@ mongo::Status mongo::cloneCollectionAsCapped(OperationContext* opCtx,
str::stream() << "source collection " << fromNss.ns() << " does not exist");
}
+ if (fromNss.isDropPendingNamespace()) {
+ return Status(ErrorCodes::NamespaceNotFound,
+ str::stream() << "source collection " << fromNss.ns()
+ << " is currently in a drop-pending state.");
+ }
+
if (db->getCollection(opCtx, toNss)) {
return Status(ErrorCodes::NamespaceExists,
str::stream() << "cloneCollectionAsCapped failed - destination collection "
diff --git a/src/mongo/db/catalog/capped_utils_test.cpp b/src/mongo/db/catalog/capped_utils_test.cpp
index 5a8294358af..ef9843335a2 100644
--- a/src/mongo/db/catalog/capped_utils_test.cpp
+++ b/src/mongo/db/catalog/capped_utils_test.cpp
@@ -137,9 +137,7 @@ TEST_F(CappedUtilsTest, ConvertToCappedReturnsNamespaceNotFoundIfCollectionIsDro
auto options = getCollectionOptions(opCtx.get(), dropPendingNss);
ASSERT_FALSE(options.capped);
- // Before SERVER-32098, convertToCapped() would reject writes to a drop-pending collection
- // because the namespace contained ".system.".
- ASSERT_EQUALS(ErrorCodes::BadValue,
+ ASSERT_EQUALS(ErrorCodes::NamespaceNotFound,
convertToCapped(opCtx.get(), dropPendingNss, cappedCollectionSize));
options = getCollectionOptions(opCtx.get(), dropPendingNss);
ASSERT_FALSE(options.capped);