diff options
author | Sergi Mateo Bellido <sergi.mateo-bellido@mongodb.com> | 2021-02-02 09:48:27 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-02-03 15:39:35 +0000 |
commit | a0ef72be79903990cc488d3353bacbfe6e78eb32 (patch) | |
tree | 8dae134a05174028018ae82f384c89709ebce5ed /src/mongo/s/chunk_manager.cpp | |
parent | 26a3e7bc2a773b992c51808577ae999fc0e66d0f (diff) | |
download | mongo-a0ef72be79903990cc488d3353bacbfe6e78eb32.tar.gz |
SERVER-53104 Ensure all shard-local cache collections of config.collections contain timestamps after upgrade
- If we detect a change on the metadata format we patch-up the in-memory
objects of the CatalogCache.
Diffstat (limited to 'src/mongo/s/chunk_manager.cpp')
-rw-r--r-- | src/mongo/s/chunk_manager.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/mongo/s/chunk_manager.cpp b/src/mongo/s/chunk_manager.cpp index a5013d91264..2d1e8b6e846 100644 --- a/src/mongo/s/chunk_manager.cpp +++ b/src/mongo/s/chunk_manager.cpp @@ -772,6 +772,36 @@ RoutingTableHistory RoutingTableHistory::makeUpdated( std::move(chunkMap)); } +RoutingTableHistory RoutingTableHistory::makeUpdatedReplacingTimestamp( + const boost::optional<Timestamp>& timestamp) const { + invariant(getVersion().getTimestamp().is_initialized() != timestamp.is_initialized()); + + ChunkMap newMap(getVersion().epoch(), timestamp, _chunkMap.size()); + _chunkMap.forEach([&](const std::shared_ptr<ChunkInfo>& chunkInfo) { + const ChunkVersion oldVersion = chunkInfo->getLastmod(); + newMap.appendChunk(std::make_shared<ChunkInfo>(chunkInfo->getRange(), + chunkInfo->getMaxKeyString(), + chunkInfo->getShardId(), + ChunkVersion(oldVersion.minorVersion(), + oldVersion.majorVersion(), + oldVersion.epoch(), + timestamp), + chunkInfo->getHistory(), + chunkInfo->isJumbo(), + chunkInfo->getWritesTracker())); + return true; + }); + + return RoutingTableHistory(_nss, + _uuid, + getShardKeyPattern().getKeyPattern(), + CollatorInterface::cloneCollator(getDefaultCollator()), + _unique, + _reshardingFields, + _allowMigrations, + std::move(newMap)); +} + AtomicWord<uint64_t> ComparableChunkVersion::_epochDisambiguatingSequenceNumSource{1ULL}; AtomicWord<uint64_t> ComparableChunkVersion::_forcedRefreshSequenceNumSource{1ULL}; @@ -788,6 +818,13 @@ ComparableChunkVersion ComparableChunkVersion::makeComparableChunkVersionForForc _epochDisambiguatingSequenceNumSource.fetchAndAdd(1)); } +ComparableChunkVersion ComparableChunkVersion::makeComparableChunkVersionForForcedRefresh( + const ChunkVersion& version) { + return ComparableChunkVersion(_forcedRefreshSequenceNumSource.addAndFetch(1), + version, + _epochDisambiguatingSequenceNumSource.fetchAndAdd(1)); +} + BSONObj ComparableChunkVersion::toBSONForLogging() const { BSONObjBuilder builder; if (_chunkVersion) |