summaryrefslogtreecommitdiff
path: root/src/mongo/s/chunk_manager.cpp
diff options
context:
space:
mode:
authorSergi Mateo Bellido <sergi.mateo-bellido@mongodb.com>2021-02-02 09:48:27 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-02-03 15:39:35 +0000
commita0ef72be79903990cc488d3353bacbfe6e78eb32 (patch)
tree8dae134a05174028018ae82f384c89709ebce5ed /src/mongo/s/chunk_manager.cpp
parent26a3e7bc2a773b992c51808577ae999fc0e66d0f (diff)
downloadmongo-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.cpp37
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)