summaryrefslogtreecommitdiff
path: root/src/mongo/db/s/shard_metadata_util.cpp
diff options
context:
space:
mode:
authorAntonio Fuschetto <antonio.fuschetto@mongodb.com>2021-08-10 08:07:42 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-08-16 14:25:14 +0000
commit0d9c8e78185156a008f5c4557188fa9ecbbdc36b (patch)
treebac2d39678691a1960be1e5c89ab1b5fd19aace7 /src/mongo/db/s/shard_metadata_util.cpp
parent3082357c9b0b528dc206709d031dd729dcf42bdc (diff)
downloadmongo-0d9c8e78185156a008f5c4557188fa9ecbbdc36b.tar.gz
SERVER-58575 Replace the logic that decides whether the SSCCL should use namespaces or uuids for config.cache.chunks collections
Diffstat (limited to 'src/mongo/db/s/shard_metadata_util.cpp')
-rw-r--r--src/mongo/db/s/shard_metadata_util.cpp58
1 files changed, 33 insertions, 25 deletions
diff --git a/src/mongo/db/s/shard_metadata_util.cpp b/src/mongo/db/s/shard_metadata_util.cpp
index 07bcb7c22bd..fc8fbee4dc1 100644
--- a/src/mongo/db/s/shard_metadata_util.cpp
+++ b/src/mongo/db/s/shard_metadata_util.cpp
@@ -276,13 +276,18 @@ Status updateShardDatabasesEntry(OperationContext* opCtx,
StatusWith<std::vector<ChunkType>> readShardChunks(OperationContext* opCtx,
const NamespaceString& nss,
- const boost::optional<UUID>& uuid,
+ const UUID& uuid,
+ SupportingLongNameStatusEnum supportingLongName,
const BSONObj& query,
const BSONObj& sort,
boost::optional<long long> limit,
const OID& epoch,
const boost::optional<Timestamp>& timestamp) {
- const NamespaceString chunksNss{ChunkType::ShardNSPrefix + nss.ns()};
+ const auto chunksNsPostfix{supportingLongName == SupportingLongNameStatusEnum::kDisabled ||
+ nss.isTemporaryReshardingCollection()
+ ? nss.ns()
+ : uuid.toString()};
+ const NamespaceString chunksNss{ChunkType::ShardNSPrefix + chunksNsPostfix};
try {
DBDirectClient client(opCtx);
@@ -317,12 +322,17 @@ StatusWith<std::vector<ChunkType>> readShardChunks(OperationContext* opCtx,
Status updateShardChunks(OperationContext* opCtx,
const NamespaceString& nss,
- const boost::optional<UUID>& uuid,
+ const UUID& uuid,
+ SupportingLongNameStatusEnum supportingLongName,
const std::vector<ChunkType>& chunks,
const OID& currEpoch) {
invariant(!chunks.empty());
- const NamespaceString chunksNss{ChunkType::ShardNSPrefix + nss.ns()};
+ const auto chunksNsPostfix{supportingLongName == SupportingLongNameStatusEnum::kDisabled ||
+ nss.isTemporaryReshardingCollection()
+ ? nss.ns()
+ : uuid.toString()};
+ const NamespaceString chunksNss{ChunkType::ShardNSPrefix + chunksNsPostfix};
try {
DBDirectClient client(opCtx);
@@ -411,17 +421,17 @@ void updateTimestampOnShardCollections(OperationContext* opCtx,
}
Status dropChunksAndDeleteCollectionsEntry(OperationContext* opCtx, const NamespaceString& nss) {
- try {
- const auto localUuid = [&] {
- const auto statusWithCollectionEntry = readShardCollectionsEntry(opCtx, nss);
- if (!statusWithCollectionEntry.isOK()) {
- return boost::optional<UUID>(boost::none);
- }
- const auto collectionEntry = statusWithCollectionEntry.getValue();
- return collectionEntry.getTimestamp() ? collectionEntry.getUuid()
- : boost::optional<UUID>(boost::none);
- }();
+ // TODO (SERVER-58361): Reduce the access to local collections.
+ const auto statusWithCollectionEntry = readShardCollectionsEntry(opCtx, nss);
+ if (statusWithCollectionEntry.getStatus() == ErrorCodes::NamespaceNotFound) {
+ return Status::OK();
+ }
+ uassertStatusOKWithContext(statusWithCollectionEntry,
+ str::stream() << "Failed to read persisted collection entry for '"
+ << nss.ns() << "'.");
+ const auto& collectionEntry = statusWithCollectionEntry.getValue();
+ try {
DBDirectClient client(opCtx);
auto deleteCommandResponse = client.runCommand([&] {
write_ops::DeleteCommandRequest deleteOp(
@@ -437,12 +447,12 @@ Status dropChunksAndDeleteCollectionsEntry(OperationContext* opCtx, const Namesp
uassertStatusOK(
getStatusFromWriteCommandResponse(deleteCommandResponse->getCommandReply()));
- dropChunks(opCtx, nss, localUuid);
+ dropChunks(opCtx, nss, collectionEntry.getUuid(), collectionEntry.getSupportingLongName());
LOGV2(3463200,
"Dropped chunks and collection caches",
"collectionNamespace"_attr = nss,
- "collectionUuid"_attr = localUuid);
+ "collectionUUID"_attr = collectionEntry.getUuid());
return Status::OK();
} catch (const DBException& ex) {
@@ -452,8 +462,13 @@ Status dropChunksAndDeleteCollectionsEntry(OperationContext* opCtx, const Namesp
void dropChunks(OperationContext* opCtx,
const NamespaceString& nss,
- const boost::optional<UUID>& uuid) {
- const NamespaceString chunksNss{ChunkType::ShardNSPrefix + nss.ns()};
+ const UUID& uuid,
+ SupportingLongNameStatusEnum supportingLongName) {
+ const auto chunksNsPostfix{supportingLongName == SupportingLongNameStatusEnum::kDisabled ||
+ nss.isTemporaryReshardingCollection()
+ ? nss.ns()
+ : uuid.toString()};
+ const NamespaceString chunksNss{ChunkType::ShardNSPrefix + chunksNsPostfix};
DBDirectClient client(opCtx);
BSONObj result;
@@ -463,13 +478,6 @@ void dropChunks(OperationContext* opCtx,
uassertStatusOK(status);
}
}
-
- LOGV2_DEBUG(3463201,
- 1,
- "Dropped chunks cache",
- "chunksNamespace"_attr = chunksNss,
- "collectionNamespace"_attr = nss,
- "error"_attr = getStatusFromCommandResult(result));
}
Status deleteDatabasesEntry(OperationContext* opCtx, StringData dbName) {