diff options
25 files changed, 54 insertions, 80 deletions
diff --git a/src/mongo/db/catalog/collection_impl.h b/src/mongo/db/catalog/collection_impl.h index a4a2efe443b..e0fd02ceb44 100644 --- a/src/mongo/db/catalog/collection_impl.h +++ b/src/mongo/db/catalog/collection_impl.h @@ -88,11 +88,11 @@ public: Status rename(OperationContext* opCtx, const NamespaceString& nss, bool stayTemp) final; - RecordId getCatalogId() const { + RecordId getCatalogId() const final { return _catalogId; } - UUID uuid() const { + UUID uuid() const final { return _uuid; } diff --git a/src/mongo/db/pipeline/sharded_union_test.cpp b/src/mongo/db/pipeline/sharded_union_test.cpp index 977a925ccbb..b385a7ff206 100644 --- a/src/mongo/db/pipeline/sharded_union_test.cpp +++ b/src/mongo/db/pipeline/sharded_union_test.cpp @@ -173,14 +173,14 @@ TEST_F(ShardedUnionTest, RetriesSubPipelineOnStaleConfigError) { ChunkVersion version(1, 0, epoch, timestamp); - ChunkType chunk1(*cm.getUUID(), + ChunkType chunk1(cm.getUUID(), {shardKeyPattern.getKeyPattern().globalMin(), BSON("_id" << 0)}, version, {"0"}); chunk1.setName(OID::gen()); version.incMinor(); - ChunkType chunk2(*cm.getUUID(), + ChunkType chunk2(cm.getUUID(), {BSON("_id" << 0), shardKeyPattern.getKeyPattern().globalMax()}, version, {"1"}); @@ -252,7 +252,7 @@ TEST_F(ShardedUnionTest, CorrectlySplitsSubPipelineIfRefreshedDistributionRequir ChunkVersion version(1, 0, epoch, timestamp); - ChunkType chunk1(*cm.getUUID(), + ChunkType chunk1(cm.getUUID(), {shardKeyPattern.getKeyPattern().globalMin(), BSON("_id" << 0)}, version, {shards[0].getName()}); @@ -260,11 +260,11 @@ TEST_F(ShardedUnionTest, CorrectlySplitsSubPipelineIfRefreshedDistributionRequir version.incMinor(); ChunkType chunk2( - *cm.getUUID(), {BSON("_id" << 0), BSON("_id" << 10)}, version, {shards[1].getName()}); + cm.getUUID(), {BSON("_id" << 0), BSON("_id" << 10)}, version, {shards[1].getName()}); chunk2.setName(OID::gen()); version.incMinor(); - ChunkType chunk3(*cm.getUUID(), + ChunkType chunk3(cm.getUUID(), {BSON("_id" << 10), shardKeyPattern.getKeyPattern().globalMax()}, version, {shards[0].getName()}); @@ -341,7 +341,7 @@ TEST_F(ShardedUnionTest, AvoidsSplittingSubPipelineIfRefreshedDistributionDoesNo const ShardKeyPattern shardKeyPattern(BSON("_id" << 1)); ChunkVersion version(1, 0, epoch, timestamp); ChunkType chunk1( - *cm.getUUID(), + cm.getUUID(), {shardKeyPattern.getKeyPattern().globalMin(), shardKeyPattern.getKeyPattern().globalMax()}, version, {shards[0].getName()}); @@ -400,14 +400,14 @@ TEST_F(ShardedUnionTest, IncorporatesViewDefinitionAndRetriesWhenViewErrorReceiv const Timestamp timestamp(1, 1); ChunkVersion version(1, 0, epoch, timestamp); - ChunkType chunk1(*cm.getUUID(), + ChunkType chunk1(cm.getUUID(), {shardKeyPattern.getKeyPattern().globalMin(), BSON("_id" << 0)}, version, {"0"}); chunk1.setName(OID::gen()); version.incMinor(); - ChunkType chunk2(*cm.getUUID(), + ChunkType chunk2(cm.getUUID(), {BSON("_id" << 0), shardKeyPattern.getKeyPattern().globalMax()}, version, {"1"}); diff --git a/src/mongo/db/s/balancer/balancer_chunk_selection_policy_impl.cpp b/src/mongo/db/s/balancer/balancer_chunk_selection_policy_impl.cpp index d724a88cf97..0f2349e84a6 100644 --- a/src/mongo/db/s/balancer/balancer_chunk_selection_policy_impl.cpp +++ b/src/mongo/db/s/balancer/balancer_chunk_selection_policy_impl.cpp @@ -76,7 +76,7 @@ StatusWith<DistributionStatus> createCollectionDistributionStatus( chunkMgr.forEachChunk([&](const auto& chunkEntry) { ChunkType chunk; - chunk.setCollectionUUID(*chunkMgr.getUUID()); + chunk.setCollectionUUID(chunkMgr.getUUID()); chunk.setMin(chunkEntry.getMin()); chunk.setMax(chunkEntry.getMax()); chunk.setJumbo(chunkEntry.isJumbo()); diff --git a/src/mongo/db/s/balancer/migration_manager.cpp b/src/mongo/db/s/balancer/migration_manager.cpp index fa94ade6b60..040615acd6a 100644 --- a/src/mongo/db/s/balancer/migration_manager.cpp +++ b/src/mongo/db/s/balancer/migration_manager.cpp @@ -339,17 +339,11 @@ void MigrationManager::finishRecovery(OperationContext* opCtx, } const auto& cm = swCM.getValue(); - const auto uuid = cm.getUUID(); - if (!uuid) { - // The collection has been dropped, so there is no need to recover the migration. - continue; - } - int scheduledMigrations = 0; while (!migrateInfos.empty()) { auto migrationType = std::move(migrateInfos.front()); - const auto migrationInfo = migrationType.toMigrateInfo(*uuid); + const auto migrationInfo = migrationType.toMigrateInfo(cm.getUUID()); auto waitForDelete = migrationType.getWaitForDelete(); migrateInfos.pop_front(); diff --git a/src/mongo/db/s/chunk_splitter.cpp b/src/mongo/db/s/chunk_splitter.cpp index 34b419367ae..e41d49db40b 100644 --- a/src/mongo/db/s/chunk_splitter.cpp +++ b/src/mongo/db/s/chunk_splitter.cpp @@ -121,7 +121,7 @@ void moveChunk(OperationContext* opCtx, const NamespaceString& nss, const BSONOb const auto suggestedChunk = cm.findIntersectingChunkWithSimpleCollation(minKey); ChunkType chunkToMove; - chunkToMove.setCollectionUUID(*cm.getUUID()); + chunkToMove.setCollectionUUID(cm.getUUID()); chunkToMove.setShard(suggestedChunk.getShardId()); chunkToMove.setMin(suggestedChunk.getMin()); chunkToMove.setMax(suggestedChunk.getMax()); diff --git a/src/mongo/db/s/collection_metadata.h b/src/mongo/db/s/collection_metadata.h index aeae9303eb5..4cf162648b5 100644 --- a/src/mongo/db/s/collection_metadata.h +++ b/src/mongo/db/s/collection_metadata.h @@ -151,7 +151,7 @@ public: return _cm->uuidMatches(uuid); } - boost::optional<UUID> getUUID() const { + const UUID& getUUID() const { return _cm->getUUID(); } diff --git a/src/mongo/db/s/collection_sharding_runtime_test.cpp b/src/mongo/db/s/collection_sharding_runtime_test.cpp index 18694965619..97412466118 100644 --- a/src/mongo/db/s/collection_sharding_runtime_test.cpp +++ b/src/mongo/db/s/collection_sharding_runtime_test.cpp @@ -185,7 +185,7 @@ TEST_F(CollectionShardingRuntimeTest, ASSERT_EQ(csr.getNumMetadataManagerChanges_forTest(), 2); ASSERT( - csr.getCollectionDescription(opCtx).uuidMatches(*newMetadata.getChunkManager()->getUUID())); + csr.getCollectionDescription(opCtx).uuidMatches(newMetadata.getChunkManager()->getUUID())); } class CollectionShardingRuntimeTestWithMockedLoader : public ShardServerTestFixture { diff --git a/src/mongo/db/s/config/configsvr_reshard_collection_cmd.cpp b/src/mongo/db/s/config/configsvr_reshard_collection_cmd.cpp index 49cc025db3d..f515a2ba7eb 100644 --- a/src/mongo/db/s/config/configsvr_reshard_collection_cmd.cpp +++ b/src/mongo/db/s/config/configsvr_reshard_collection_cmd.cpp @@ -179,8 +179,7 @@ public: return boost::none; } - auto tempReshardingNss = constructTemporaryReshardingNss( - nss.db(), getCollectionUUIDFromChunkManger(nss, cm)); + auto tempReshardingNss = constructTemporaryReshardingNss(nss.db(), cm.getUUID()); if (auto zones = request().getZones()) { @@ -194,7 +193,7 @@ public: // Generate the resharding metadata for the ReshardingCoordinatorDocument. auto reshardingUUID = UUID::gen(); - auto existingUUID = getCollectionUUIDFromChunkManger(ns(), cm); + auto existingUUID = cm.getUUID(); auto commonMetadata = CommonReshardingMetadata(std::move(reshardingUUID), ns(), std::move(existingUUID), diff --git a/src/mongo/db/s/config/sharding_catalog_manager_collection_operations.cpp b/src/mongo/db/s/config/sharding_catalog_manager_collection_operations.cpp index 2b8e5de957c..7933bf1b1a0 100644 --- a/src/mongo/db/s/config/sharding_catalog_manager_collection_operations.cpp +++ b/src/mongo/db/s/config/sharding_catalog_manager_collection_operations.cpp @@ -495,7 +495,7 @@ void ShardingCatalogManager::configureCollectionAutoSplit( const auto update = updateCmd.obj(); const auto query = BSON(CollectionType::kNssFieldName - << nss.ns() << CollectionType::kUuidFieldName << *uuid); + << nss.ns() << CollectionType::kUuidFieldName << uuid); const auto res = writeToConfigDocumentInTxn( opCtx, CollectionType::ConfigNS, diff --git a/src/mongo/db/s/merge_chunks_command.cpp b/src/mongo/db/s/merge_chunks_command.cpp index c13ca498dac..27c9d20b63c 100644 --- a/src/mongo/db/s/merge_chunks_command.cpp +++ b/src/mongo/db/s/merge_chunks_command.cpp @@ -80,10 +80,8 @@ Shard::CommandResponse commitMergeOnConfigServer(OperationContext* opCtx, const CollectionMetadata& metadata) { auto const shardingState = ShardingState::get(opCtx); const auto currentTime = VectorClock::get(opCtx)->getTime(); - auto collUUID = metadata.getUUID(); - invariant(collUUID); - ConfigSvrMergeChunks request{nss, shardingState->shardId(), *collUUID, chunkRange}; + ConfigSvrMergeChunks request{nss, shardingState->shardId(), metadata.getUUID(), chunkRange}; request.setValidAfter(currentTime.clusterTime().asTimestamp()); request.setWriteConcern(ShardingCatalogClient::kMajorityWriteConcern.toBSON()); diff --git a/src/mongo/db/s/metadata_manager.cpp b/src/mongo/db/s/metadata_manager.cpp index 3a182d44539..54e3b398048 100644 --- a/src/mongo/db/s/metadata_manager.cpp +++ b/src/mongo/db/s/metadata_manager.cpp @@ -117,7 +117,7 @@ MetadataManager::MetadataManager(ServiceContext* serviceContext, CollectionMetadata initialMetadata) : _serviceContext(serviceContext), _nss(std::move(nss)), - _collectionUuid(*initialMetadata.getChunkManager()->getUUID()), + _collectionUuid(initialMetadata.getChunkManager()->getUUID()), _executor(std::move(executor)) { _metadata.emplace_back(std::make_shared<CollectionMetadataTracker>(std::move(initialMetadata))); } @@ -383,7 +383,7 @@ SharedSemiFuture<void> MetadataManager::_submitRangeForDeletion( removeDocumentsInRange(_executor, std::move(waitForActiveQueriesToComplete), _nss, - *_metadata.back()->metadata->getChunkManager()->getUUID(), + _metadata.back()->metadata->getChunkManager()->getUUID(), _metadata.back()->metadata->getKeyPattern().getOwned(), range, std::move(migrationId), diff --git a/src/mongo/db/s/metadata_manager_test.cpp b/src/mongo/db/s/metadata_manager_test.cpp index ea78acc37ed..fab099ae7e5 100644 --- a/src/mongo/db/s/metadata_manager_test.cpp +++ b/src/mongo/db/s/metadata_manager_test.cpp @@ -125,7 +125,7 @@ protected: if (SimpleBSONObjComparator::kInstance.evaluate(chunkToSplit.getMin() < minKey)) { chunkVersion.incMajor(); - splitChunks.emplace_back(*collMetadata.getUUID(), + splitChunks.emplace_back(collMetadata.getUUID(), ChunkRange(chunkToSplit.getMin(), minKey), chunkVersion, kOtherShard); @@ -133,10 +133,10 @@ protected: chunkVersion.incMajor(); splitChunks.emplace_back( - *collMetadata.getUUID(), ChunkRange(minKey, maxKey), chunkVersion, kThisShard); + collMetadata.getUUID(), ChunkRange(minKey, maxKey), chunkVersion, kThisShard); chunkVersion.incMajor(); - splitChunks.emplace_back(*collMetadata.getUUID(), + splitChunks.emplace_back(collMetadata.getUUID(), ChunkRange(maxKey, chunkToSplit.getMax()), chunkVersion, kOtherShard); @@ -171,8 +171,7 @@ protected: boost::none, boost::none, true, - {ChunkType( - *metadata.getUUID(), ChunkRange(minKey, maxKey), chunkVersion, kOtherShard)}); + {ChunkType(metadata.getUUID(), ChunkRange(minKey, maxKey), chunkVersion, kOtherShard)}); return CollectionMetadata(ChunkManager(cm->dbPrimary(), cm->dbVersion(), diff --git a/src/mongo/db/s/migration_source_manager.h b/src/mongo/db/s/migration_source_manager.h index 17f235bedbe..fdd7fd2283f 100644 --- a/src/mongo/db/s/migration_source_manager.h +++ b/src/mongo/db/s/migration_source_manager.h @@ -243,8 +243,8 @@ private: State _state{kCreated}; // The epoch of the collection being migrated and its UUID, as of the time the migration - // started. Values are boost::optional up until the constructor runs, because UUID doesn't have - // a default constructor. + // started. Values are boost::optional only up until the constructor runs, because UUID doesn't + // have a default constructor. boost::optional<OID> _collectionEpoch; boost::optional<UUID> _collectionUUID; diff --git a/src/mongo/db/s/resharding/resharding_data_replication.cpp b/src/mongo/db/s/resharding/resharding_data_replication.cpp index 0bcdcb4db8c..bec1e02dec5 100644 --- a/src/mongo/db/s/resharding/resharding_data_replication.cpp +++ b/src/mongo/db/s/resharding/resharding_data_replication.cpp @@ -426,7 +426,7 @@ std::vector<NamespaceString> ReshardingDataReplication::ensureStashCollectionsEx for (const auto& donor : donorShards) { stashCollections.emplace_back(ReshardingOplogApplier::ensureStashCollectionExists( - opCtx, *sourceChunkMgr.getUUID(), donor.getShardId(), options)); + opCtx, sourceChunkMgr.getUUID(), donor.getShardId(), options)); } return stashCollections; diff --git a/src/mongo/db/s/resharding/resharding_donor_recipient_common.cpp b/src/mongo/db/s/resharding/resharding_donor_recipient_common.cpp index 853f71024b6..6e8fa8e6649 100644 --- a/src/mongo/db/s/resharding/resharding_donor_recipient_common.cpp +++ b/src/mongo/db/s/resharding/resharding_donor_recipient_common.cpp @@ -241,7 +241,7 @@ ReshardingDonorDocument constructDonorDocumentFromReshardingFields( auto donorDoc = ReshardingDonorDocument{ std::move(donorCtx), reshardingFields.getDonorFields()->getRecipientShardIds()}; - auto sourceUUID = getCollectionUUIDFromChunkManger(nss, *metadata.getChunkManager()); + auto sourceUUID = metadata.getChunkManager()->getUUID(); auto commonMetadata = CommonReshardingMetadata(reshardingFields.getReshardingUUID(), nss, diff --git a/src/mongo/db/s/resharding_util.cpp b/src/mongo/db/s/resharding_util.cpp index 247fd986682..8047169cfc5 100644 --- a/src/mongo/db/s/resharding_util.cpp +++ b/src/mongo/db/s/resharding_util.cpp @@ -109,15 +109,6 @@ RecipientShardEntry makeRecipientShard(ShardId shardId, return RecipientShardEntry{std::move(shardId), std::move(recipientCtx)}; } -UUID getCollectionUUIDFromChunkManger(const NamespaceString& originalNss, const ChunkManager& cm) { - auto collectionUUID = cm.getUUID(); - uassert(ErrorCodes::InvalidUUID, - "Cannot reshard collection {} due to missing UUID"_format(originalNss.ns()), - collectionUUID); - - return collectionUUID.get(); -} - NamespaceString constructTemporaryReshardingNss(StringData db, const UUID& sourceUuid) { return NamespaceString(db, fmt::format("{}{}", diff --git a/src/mongo/db/s/resharding_util.h b/src/mongo/db/s/resharding_util.h index d38b2c8742c..44a8f91466d 100644 --- a/src/mongo/db/s/resharding_util.h +++ b/src/mongo/db/s/resharding_util.h @@ -216,13 +216,6 @@ RecipientShardEntry makeRecipientShard(ShardId shardId, boost::optional<Status> abortReason = boost::none); /** - * Gets the UUID for 'nss' from the 'cm' - * - * Note: throws if the collection does not have a UUID. - */ -UUID getCollectionUUIDFromChunkManger(const NamespaceString& nss, const ChunkManager& cm); - -/** * Assembles the namespace string for the temporary resharding collection based on the source * namespace components. * diff --git a/src/mongo/s/catalog_cache.cpp b/src/mongo/s/catalog_cache.cpp index 9e3eea4a5a4..01e720628c9 100644 --- a/src/mongo/s/catalog_cache.cpp +++ b/src/mongo/s/catalog_cache.cpp @@ -727,7 +727,7 @@ CatalogCache::CollectionCache::LookupResult CatalogCache::CollectionCache::_look }(); return RoutingTableHistory::makeNew(nss, - collectionAndChunks.uuid, + *collectionAndChunks.uuid, KeyPattern(collectionAndChunks.shardKeyPattern), std::move(defaultCollator), collectionAndChunks.shardKeyIsUnique, diff --git a/src/mongo/s/catalog_cache_refresh_test.cpp b/src/mongo/s/catalog_cache_refresh_test.cpp index 6af4c573955..37d28ef5f99 100644 --- a/src/mongo/s/catalog_cache_refresh_test.cpp +++ b/src/mongo/s/catalog_cache_refresh_test.cpp @@ -465,7 +465,7 @@ TEST_F(CatalogCacheRefreshTest, IncrementalLoadMissingChunkWithLowestVersion) { auto initialRoutingInfo(makeChunkManager(kNss, shardKeyPattern, nullptr, true, {})); const OID epoch = initialRoutingInfo.getVersion().epoch(); - const UUID uuid = *initialRoutingInfo.getUUID(); + const UUID uuid = initialRoutingInfo.getUUID(); const auto timestamp = initialRoutingInfo.getVersion().getTimestamp(); ASSERT_EQ(1, initialRoutingInfo.numChunks()); @@ -523,7 +523,7 @@ TEST_F(CatalogCacheRefreshTest, IncrementalLoadMissingChunkWithHighestVersion) { auto initialRoutingInfo(makeChunkManager(kNss, shardKeyPattern, nullptr, true, {})); const OID epoch = initialRoutingInfo.getVersion().epoch(); - const UUID uuid = *initialRoutingInfo.getUUID(); + const UUID uuid = initialRoutingInfo.getUUID(); const auto timestamp = initialRoutingInfo.getVersion().getTimestamp(); ASSERT_EQ(1, initialRoutingInfo.numChunks()); @@ -694,7 +694,7 @@ TEST_F(CatalogCacheRefreshTest, IncrementalLoadAfterCollectionEpochChange) { ChunkVersion oldVersion = initialRoutingInfo.getVersion(); ChunkVersion newVersion(1, 0, OID::gen(), Timestamp(2)); - const UUID uuid = *initialRoutingInfo.getUUID(); + const UUID uuid = initialRoutingInfo.getUUID(); // Return collection with a different epoch and a set of chunks, which represent a split onFindCommand([&](const RemoteCommandRequest& request) { @@ -811,7 +811,7 @@ TEST_F(CatalogCacheRefreshTest, IncrementalLoadAfterMoveWithReshardingFieldsAdde ASSERT(boost::none == initialRoutingInfo.getReshardingFields()); ChunkVersion version = initialRoutingInfo.getVersion(); - const UUID uuid = *initialRoutingInfo.getUUID(); + const UUID uuid = initialRoutingInfo.getUUID(); auto future = scheduleRoutingInfoIncrementalRefresh(kNss); @@ -864,7 +864,7 @@ TEST_F(CatalogCacheRefreshTest, IncrementalLoadAfterMoveLastChunkWithReshardingF // Return set of chunks, which represent a move version.incMajor(); ChunkType chunk1( - *initialRoutingInfo.getUUID(), + initialRoutingInfo.getUUID(), {shardKeyPattern.getKeyPattern().globalMin(), shardKeyPattern.getKeyPattern().globalMax()}, version, {"1"}); diff --git a/src/mongo/s/chunk_manager.cpp b/src/mongo/s/chunk_manager.cpp index 1e954d001b9..09d0306bbc6 100644 --- a/src/mongo/s/chunk_manager.cpp +++ b/src/mongo/s/chunk_manager.cpp @@ -313,7 +313,7 @@ ShardVersionTargetingInfo::ShardVersionTargetingInfo(const OID& epoch, const Tim RoutingTableHistory::RoutingTableHistory( NamespaceString nss, - boost::optional<UUID> uuid, + UUID uuid, KeyPattern shardKeyPattern, std::unique_ptr<CollatorInterface> defaultCollator, bool unique, @@ -323,8 +323,8 @@ RoutingTableHistory::RoutingTableHistory( bool allowMigrations, ChunkMap chunkMap) : _nss(std::move(nss)), - _uuid(uuid), - _shardKeyPattern(shardKeyPattern), + _uuid(std::move(uuid)), + _shardKeyPattern(std::move(shardKeyPattern)), _defaultCollator(std::move(defaultCollator)), _unique(unique), _timeseriesFields(std::move(timeseriesFields)), @@ -407,8 +407,7 @@ void ChunkManager::getShardIdsForQuery(boost::intrusive_ptr<ExpressionContext> e auto findCommand = std::make_unique<FindCommandRequest>(_rt->optRt->nss()); findCommand->setFilter(query.getOwned()); - if (auto uuid = getUUID()) - expCtx->uuid = uuid; + expCtx->uuid = getUUID(); if (!collation.isEmpty()) { findCommand->setCollation(collation.getOwned()); @@ -765,7 +764,7 @@ std::string RoutingTableHistory::toString() const { RoutingTableHistory RoutingTableHistory::makeNew( NamespaceString nss, - boost::optional<UUID> uuid, + UUID uuid, KeyPattern shardKeyPattern, std::unique_ptr<CollatorInterface> defaultCollator, bool unique, @@ -799,6 +798,7 @@ RoutingTableHistory RoutingTableHistory::makeUpdated( boost::optional<uint64_t> maxChunkSizeBytes, bool allowMigrations, const std::vector<ChunkType>& changedChunks) const { + auto changedChunkInfos = flatten(changedChunks); auto chunkMap = _chunkMap.createMerged(changedChunkInfos); diff --git a/src/mongo/s/chunk_manager.h b/src/mongo/s/chunk_manager.h index dca4d973ace..ef38af2edc4 100644 --- a/src/mongo/s/chunk_manager.h +++ b/src/mongo/s/chunk_manager.h @@ -170,7 +170,7 @@ public: */ static RoutingTableHistory makeNew( NamespaceString nss, - boost::optional<UUID>, + UUID uuid, KeyPattern shardKeyPattern, std::unique_ptr<CollatorInterface> defaultCollator, bool unique, @@ -286,11 +286,11 @@ public: std::string toString() const; - bool uuidMatches(UUID uuid) const { - return _uuid && *_uuid == uuid; + bool uuidMatches(const UUID& uuid) const { + return _uuid == uuid; } - boost::optional<UUID> getUUID() const { + const UUID& getUUID() const { return _uuid; } @@ -315,7 +315,7 @@ private: friend class ChunkManager; RoutingTableHistory(NamespaceString nss, - boost::optional<UUID> uuid, + UUID uuid, KeyPattern shardKeyPattern, std::unique_ptr<CollatorInterface> defaultCollator, bool unique, @@ -330,8 +330,8 @@ private: // Namespace to which this routing information corresponds NamespaceString _nss; - // The invariant UUID of the collection. This is optional in 3.6, except in change streams. - boost::optional<UUID> _uuid; + // The UUID of the collection + UUID _uuid; // The key pattern used to shard the collection ShardKeyPattern _shardKeyPattern; @@ -688,11 +688,11 @@ public: return _rt->optRt->compatibleWith(*other._rt->optRt, shard); } - bool uuidMatches(UUID uuid) const { + bool uuidMatches(const UUID& uuid) const { return _rt->optRt->uuidMatches(uuid); } - boost::optional<UUID> getUUID() const { + const UUID& getUUID() const { return _rt->optRt->getUUID(); } diff --git a/src/mongo/s/chunk_manager_refresh_bm.cpp b/src/mongo/s/chunk_manager_refresh_bm.cpp index 4aec67285e1..cd166c1adb1 100644 --- a/src/mongo/s/chunk_manager_refresh_bm.cpp +++ b/src/mongo/s/chunk_manager_refresh_bm.cpp @@ -137,7 +137,7 @@ void BM_IncrementalRefreshOfPessimalBalancedDistribution(benchmark::State& state auto metadata = makeChunkManagerWithPessimalBalancedDistribution(nShards, nChunks); auto postMoveVersion = metadata.getChunkManager()->getVersion(); - auto const uuid = *metadata.getUUID(); + const UUID uuid = metadata.getUUID(); std::vector<ChunkType> newChunks; postMoveVersion.incMajor(); newChunks.emplace_back(uuid, getRangeForChunk(1, nChunks), postMoveVersion, ShardId("shard0")); diff --git a/src/mongo/s/commands/cluster_move_chunk_cmd.cpp b/src/mongo/s/commands/cluster_move_chunk_cmd.cpp index fa0fc7b9068..8c94e428b50 100644 --- a/src/mongo/s/commands/cluster_move_chunk_cmd.cpp +++ b/src/mongo/s/commands/cluster_move_chunk_cmd.cpp @@ -183,7 +183,7 @@ public: uassertStatusOK(MigrationSecondaryThrottleOptions::createFromCommand(cmdObj)); ChunkType chunkType; - chunkType.setCollectionUUID(*cm.getUUID()); + chunkType.setCollectionUUID(cm.getUUID()); chunkType.setMin(chunk->getMin()); chunkType.setMax(chunk->getMax()); chunkType.setShard(chunk->getShardId()); diff --git a/src/mongo/s/query/cluster_aggregation_planner.cpp b/src/mongo/s/query/cluster_aggregation_planner.cpp index e5f0c36e552..c9867f4eb78 100644 --- a/src/mongo/s/query/cluster_aggregation_planner.cpp +++ b/src/mongo/s/query/cluster_aggregation_planner.cpp @@ -788,7 +788,7 @@ std::pair<BSONObj, boost::optional<UUID>> getCollationAndUUID( collectionIsNotSharded ? getUnshardedCollInfo(opCtx, cm->dbPrimary(), nss) : BSONObj(); // Return the collection UUID if available, or boost::none otherwise. - const auto getUUID = [&]() -> auto { + const auto getUUID = [&]() -> boost::optional<UUID> { if (collectionIsSharded) { return cm->getUUID(); } else { diff --git a/src/mongo/s/routing_table_history_test.cpp b/src/mongo/s/routing_table_history_test.cpp index 676dc94d021..9651911ee64 100644 --- a/src/mongo/s/routing_table_history_test.cpp +++ b/src/mongo/s/routing_table_history_test.cpp @@ -68,7 +68,7 @@ RoutingTableHistory splitChunk(const RoutingTableHistory& rt, for (const auto& range : newChunkRanges) { // Chunks must be inserted ordered by version curVersion.incMajor(); - newChunks.emplace_back(*rt.getUUID(), range, curVersion, kThisShard); + newChunks.emplace_back(rt.getUUID(), range, curVersion, kThisShard); } return rt.makeUpdated( |