diff options
author | Benety Goh <benety@mongodb.com> | 2017-12-20 17:52:27 -0500 |
---|---|---|
committer | Benety Goh <benety@mongodb.com> | 2017-12-29 14:38:09 -0500 |
commit | 8553157abc8bafbe02b8d8e01ad4836512a9798e (patch) | |
tree | 89a8d417b157837827399560a96eaeac71f338b1 /src | |
parent | 0574fcecbf5427f14a5eae6389db0cdf266a5aa0 (diff) | |
download | mongo-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.cpp | 6 | ||||
-rw-r--r-- | src/mongo/db/catalog/capped_utils_test.cpp | 4 |
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); |