diff --git a/fdbserver/DBCoreState.h b/fdbserver/DBCoreState.h index c6b3eff7e8..c69226b18c 100644 --- a/fdbserver/DBCoreState.h +++ b/fdbserver/DBCoreState.h @@ -30,6 +30,7 @@ #include "fdbserver/MasterInterface.h" class LogSet; +struct OldLogData; // This structure is stored persistently in CoordinatedState and must be versioned carefully! // It records a synchronous replication topology which can be used in the absence of faults (or under a limited @@ -52,19 +53,18 @@ struct CoreTLogSet { Version startVersion; std::vector> satelliteTagLocations; TLogVersion tLogVersion; - std::set pseudoLocalitites; CoreTLogSet() : tLogWriteAntiQuorum(0), tLogReplicationFactor(0), isLocal(true), locality(tagLocalityUpgraded), startVersion(invalidVersion) {} explicit CoreTLogSet(const LogSet& logset); bool operator == (CoreTLogSet const& rhs) const { return tLogs == rhs.tLogs && tLogWriteAntiQuorum == rhs.tLogWriteAntiQuorum && tLogReplicationFactor == rhs.tLogReplicationFactor && isLocal == rhs.isLocal && satelliteTagLocations == rhs.satelliteTagLocations && - pseudoLocalitites == rhs.pseudoLocalitites && locality == rhs.locality && startVersion == rhs.startVersion && ((!tLogPolicy && !rhs.tLogPolicy) || (tLogPolicy && rhs.tLogPolicy && (tLogPolicy->info() == rhs.tLogPolicy->info()))); + locality == rhs.locality && startVersion == rhs.startVersion && ((!tLogPolicy && !rhs.tLogPolicy) || (tLogPolicy && rhs.tLogPolicy && (tLogPolicy->info() == rhs.tLogPolicy->info()))); } template void serialize(Archive& ar) { - serializer(ar, tLogs, tLogWriteAntiQuorum, tLogReplicationFactor, tLogPolicy, tLogLocalities, isLocal, locality, startVersion, satelliteTagLocations, pseudoLocalitites); + serializer(ar, tLogs, tLogWriteAntiQuorum, tLogReplicationFactor, tLogPolicy, tLogLocalities, isLocal, locality, startVersion, satelliteTagLocations); if (ar.isDeserializing && ar.protocolVersion() < 0x0FDB00B061030001LL) { tLogVersion = TLogVersion::V2; } else { @@ -80,6 +80,7 @@ struct OldTLogCoreData { std::set pseudoLocalities; OldTLogCoreData() : epochEnd(0), logRouterTags(0) {} + explicit OldTLogCoreData(const OldLogData&); bool operator == (OldTLogCoreData const& rhs) const { return tLogs == rhs.tLogs && logRouterTags == rhs.logRouterTags && epochEnd == rhs.epochEnd && pseudoLocalities == rhs.pseudoLocalities; diff --git a/fdbserver/LogSystem.h b/fdbserver/LogSystem.h index 4a2e44564d..98cf20f139 100644 --- a/fdbserver/LogSystem.h +++ b/fdbserver/LogSystem.h @@ -53,7 +53,6 @@ public: Version startVersion; std::vector> replies; std::vector> satelliteTagLocations; - std::set pseudoLocalities; LogSet() : tLogWriteAntiQuorum(0), tLogReplicationFactor(0), isLocal(true), locality(tagLocalityInvalid), startVersion(invalidVersion) {} LogSet(const TLogSet& tlogSet); diff --git a/fdbserver/LogSystemConfig.h b/fdbserver/LogSystemConfig.h index dadb807484..bd06329384 100644 --- a/fdbserver/LogSystemConfig.h +++ b/fdbserver/LogSystemConfig.h @@ -56,6 +56,7 @@ protected: }; class LogSet; +struct OldLogData; struct TLogSet { std::vector> tLogs; @@ -68,7 +69,6 @@ struct TLogSet { int8_t locality; Version startVersion; std::vector> satelliteTagLocations; - std::set pseudoLocalitites; TLogSet() : tLogWriteAntiQuorum(0), tLogReplicationFactor(0), isLocal(true), locality(tagLocalityInvalid), startVersion(invalidVersion) {} explicit TLogSet(const LogSet& rhs); @@ -79,7 +79,7 @@ struct TLogSet { bool operator == ( const TLogSet& rhs ) const { if (tLogWriteAntiQuorum != rhs.tLogWriteAntiQuorum || tLogReplicationFactor != rhs.tLogReplicationFactor || isLocal != rhs.isLocal || satelliteTagLocations != rhs.satelliteTagLocations || - pseudoLocalitites != rhs.pseudoLocalitites || startVersion != rhs.startVersion || tLogs.size() != rhs.tLogs.size() || locality != rhs.locality || logRouters.size() != rhs.logRouters.size()) { + startVersion != rhs.startVersion || tLogs.size() != rhs.tLogs.size() || locality != rhs.locality || logRouters.size() != rhs.logRouters.size()) { return false; } if ((tLogPolicy && !rhs.tLogPolicy) || (!tLogPolicy && rhs.tLogPolicy) || (tLogPolicy && (tLogPolicy->info() != rhs.tLogPolicy->info()))) { @@ -100,7 +100,7 @@ struct TLogSet { bool isEqualIds(TLogSet const& r) const { if (tLogWriteAntiQuorum != r.tLogWriteAntiQuorum || tLogReplicationFactor != r.tLogReplicationFactor || isLocal != r.isLocal || satelliteTagLocations != r.satelliteTagLocations || - pseudoLocalitites != r.pseudoLocalitites || startVersion != r.startVersion || tLogs.size() != r.tLogs.size() || locality != r.locality) { + startVersion != r.startVersion || tLogs.size() != r.tLogs.size() || locality != r.locality) { return false; } if ((tLogPolicy && !r.tLogPolicy) || (!tLogPolicy && r.tLogPolicy) || (tLogPolicy && (tLogPolicy->info() != r.tLogPolicy->info()))) { @@ -116,7 +116,7 @@ struct TLogSet { template void serialize( Ar& ar ) { - serializer(ar, tLogs, logRouters, tLogWriteAntiQuorum, tLogReplicationFactor, tLogPolicy, tLogLocalities, isLocal, locality, startVersion, satelliteTagLocations, pseudoLocalitites); + serializer(ar, tLogs, logRouters, tLogWriteAntiQuorum, tLogReplicationFactor, tLogPolicy, tLogLocalities, isLocal, locality, startVersion, satelliteTagLocations); if (ar.isDeserializing && ar.protocolVersion() < 0x0FDB00B061030001LL) { tLogVersion = TLogVersion::V2; } else { @@ -133,6 +133,7 @@ struct OldTLogConf { std::set pseudoLocalities; OldTLogConf() : epochEnd(0), logRouterTags(0) {} + explicit OldTLogConf(const OldLogData&); std::string toString() const { return format("end: %d tags: %d %s", epochEnd, logRouterTags, describe(tLogs).c_str()); diff --git a/fdbserver/TagPartitionedLogSystem.actor.cpp b/fdbserver/TagPartitionedLogSystem.actor.cpp index 9aeea4d2f7..32b66c82f0 100644 --- a/fdbserver/TagPartitionedLogSystem.actor.cpp +++ b/fdbserver/TagPartitionedLogSystem.actor.cpp @@ -77,8 +77,7 @@ LogSet::LogSet(const TLogSet& tLogSet) : tLogLocalities(tLogSet.tLogLocalities), tLogVersion(tLogSet.tLogVersion), tLogPolicy(tLogSet.tLogPolicy), isLocal(tLogSet.isLocal), locality(tLogSet.locality), startVersion(tLogSet.startVersion), - satelliteTagLocations(tLogSet.satelliteTagLocations), - pseudoLocalities(tLogSet.pseudoLocalitites) + satelliteTagLocations(tLogSet.satelliteTagLocations) { for(const auto& log : tLogSet.tLogs) { logServers.push_back(Reference>>(new AsyncVar>(log))); @@ -94,8 +93,7 @@ LogSet::LogSet(const CoreTLogSet& coreSet) : tLogLocalities(coreSet.tLogLocalities), tLogVersion(coreSet.tLogVersion), tLogPolicy(coreSet.tLogPolicy), isLocal(coreSet.isLocal), locality(coreSet.locality), startVersion(coreSet.startVersion), - satelliteTagLocations(coreSet.satelliteTagLocations), - pseudoLocalities(coreSet.pseudoLocalitites) + satelliteTagLocations(coreSet.satelliteTagLocations) { for(const auto& log : coreSet.tLogs) { logServers.push_back(Reference>>(new AsyncVar>(OptionalInterface(log)))); @@ -108,8 +106,7 @@ TLogSet::TLogSet(const LogSet& rhs) : tLogLocalities(rhs.tLogLocalities), tLogVersion(rhs.tLogVersion), tLogPolicy(rhs.tLogPolicy), isLocal(rhs.isLocal), locality(rhs.locality), startVersion(rhs.startVersion), - satelliteTagLocations(rhs.satelliteTagLocations), - pseudoLocalitites(rhs.pseudoLocalities) + satelliteTagLocations(rhs.satelliteTagLocations) { for (const auto& tlog : rhs.logServers) { tLogs.push_back(tlog->get()); @@ -120,6 +117,15 @@ TLogSet::TLogSet(const LogSet& rhs) : } } +OldTLogConf::OldTLogConf(const OldLogData& oldLogData) : + logRouterTags(oldLogData.logRouterTags), epochEnd(oldLogData.epochEnd), + pseudoLocalities(oldLogData.pseudoLocalities) +{ + for (const Reference& logSet : oldLogData.tLogs) { + tLogs.emplace_back(*logSet); + } +} + CoreTLogSet::CoreTLogSet(const LogSet& logset) : tLogWriteAntiQuorum(logset.tLogWriteAntiQuorum), tLogReplicationFactor(logset.tLogReplicationFactor), @@ -127,14 +133,24 @@ CoreTLogSet::CoreTLogSet(const LogSet& logset) : tLogPolicy(logset.tLogPolicy), isLocal(logset.isLocal), locality(logset.locality), startVersion(logset.startVersion), satelliteTagLocations(logset.satelliteTagLocations), - tLogVersion(logset.tLogVersion), - pseudoLocalitites(logset.pseudoLocalities) + tLogVersion(logset.tLogVersion) { for (const auto &log : logset.logServers) { tLogs.push_back(log->get().id()); } } +OldTLogCoreData::OldTLogCoreData(const OldLogData& oldData) : + logRouterTags(oldData.logRouterTags), epochEnd(oldData.epochEnd), + pseudoLocalities(oldData.pseudoLocalities) +{ + for (const Reference& logSet : oldData.tLogs) { + if (logSet->logServers.size()) { + tLogs.emplace_back(*logSet); + } + } +} + struct TagPartitionedLogSystem : ILogSystem, ReferenceCounted { UID dbgid; LogSystemType logSystemType; @@ -227,7 +243,6 @@ struct TagPartitionedLogSystem : ILogSystem, ReferenceCountedlogSystemType = lsConf.logSystemType; - logSystem->pseudoLocalities = lsConf.pseudoLocalities; return logSystem; } @@ -277,16 +292,8 @@ struct TagPartitionedLogSystem : ILogSystem, ReferenceCountedlogServers.size()) { - newState.oldTLogData[i].tLogs.emplace_back(*t); - } - } - newState.oldTLogData[i].logRouterTags = oldLogData[i].logRouterTags; - newState.oldTLogData[i].epochEnd = oldLogData[i].epochEnd; - newState.oldTLogData[i].pseudoLocalities = oldLogData[i].pseudoLocalities; + for (const auto& oldData : oldLogData) { + newState.oldTLogData.emplace_back(oldData); } } @@ -1001,14 +1008,7 @@ struct TagPartitionedLogSystem : ILogSystem, ReferenceCounted& logSet : oldData.tLogs) { - logSystemConfig.oldTLogs.back().tLogs.emplace_back(*logSet); - } - logSystemConfig.oldTLogs.back().logRouterTags = oldData.logRouterTags; - logSystemConfig.oldTLogs.back().epochEnd = oldData.epochEnd; - logSystemConfig.oldTLogs.back().pseudoLocalities = oldData.pseudoLocalities; + logSystemConfig.oldTLogs.emplace_back(oldData); } } return logSystemConfig;