diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2023-08-20 16:11:39 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-20 16:11:39 +0200 |
commit | c72d3321bedf7beb434459a2d83d645e3d920054 (patch) | |
tree | 21b8f53b3063d929fb86cf5b63f98a87fc1e295f | |
parent | 5a2dd2d26e3c518e7c54ccd29c9be27e8accb7df (diff) | |
parent | ef2f4b11c0956cd65968e2703f4c687c0c13ffe7 (diff) |
Merge pull request #28087 from vespa-engine/balder/reduce-massive-inlining
Reduce massive inlining of complex code
-rw-r--r-- | storage/src/vespa/storage/distributor/statecheckers.cpp | 105 |
1 files changed, 61 insertions, 44 deletions
diff --git a/storage/src/vespa/storage/distributor/statecheckers.cpp b/storage/src/vespa/storage/distributor/statecheckers.cpp index 596b6ca390f..478faa38232 100644 --- a/storage/src/vespa/storage/distributor/statecheckers.cpp +++ b/storage/src/vespa/storage/distributor/statecheckers.cpp @@ -550,24 +550,8 @@ consistentApartFromEmptyBucketsInNonIdealLocationAndInvalidEntries(ConstNodesRef class MergeNodes { public: - MergeNodes() noexcept - : _reason(), - _nodes(), - _problemFlags(0), - _priority(255) - {} - - explicit MergeNodes(const BucketDatabase::Entry& entry) - : _reason(), - _nodes(), - _problemFlags(0), - _priority(255) - { - _nodes.reserve(entry->getNodeCount()); - for (uint16_t i = 0; i < entry->getNodeCount(); i++) { - addNode(entry->getNodeRef(i).getNode()); - } - } + MergeNodes() noexcept; + explicit MergeNodes(const BucketDatabase::Entry& entry); MergeNodes(MergeNodes && rhs) noexcept = default; MergeNodes & operator =(MergeNodes && rhs) noexcept = delete; MergeNodes(const MergeNodes & rhs) = delete; @@ -575,36 +559,14 @@ public: ~MergeNodes(); - void operator+=(const MergeNodes& other) { - _reason << other._reason.str(); - _problemFlags |= other._problemFlags; - _nodes.insert(_nodes.end(), other._nodes.begin(), other._nodes.end()); - updatePriority(other._priority); - } - bool shouldMerge() const noexcept { return _problemFlags != 0; } - void markMoveToIdealLocation(uint16_t node, uint8_t msgPriority) { - _reason << "[Moving bucket to ideal node " << node << "]"; - addProblem(NON_IDEAL_LOCATION); - addNode(node); - updatePriority(msgPriority); - } - - void markOutOfSync(const StateChecker::Context& c, uint8_t msgPriority) { - _reason << "[Synchronizing buckets with different checksums " << c.entry->toString() << "]"; - addProblem(OUT_OF_SYNC); - updatePriority(msgPriority); - } - - void markMissingReplica(uint16_t node, uint8_t msgPriority) { - _reason << "[Adding missing node " << node << "]"; - addProblem(MISSING_REPLICA); - addNode(node); - updatePriority(msgPriority); - } + void operator+=(const MergeNodes& other); + void markMoveToIdealLocation(uint16_t node, uint8_t msgPriority); + void markOutOfSync(const StateChecker::Context& c, uint8_t msgPriority); + void markMissingReplica(uint16_t node, uint8_t msgPriority); bool needsMoveOnly() const noexcept { return _problemFlags == NON_IDEAL_LOCATION; @@ -638,8 +600,60 @@ private: uint8_t _priority; }; +MergeNodes::MergeNodes() noexcept + : _reason(), + _nodes(), + _problemFlags(0), + _priority(255) +{} + +MergeNodes::MergeNodes(const BucketDatabase::Entry& entry) + : _reason(), + _nodes(), + _problemFlags(0), + _priority(255) +{ + _nodes.reserve(entry->getNodeCount()); + for (uint16_t i = 0; i < entry->getNodeCount(); i++) { + addNode(entry->getNodeRef(i).getNode()); + } +} + MergeNodes::~MergeNodes() = default; + +void +MergeNodes::operator+=(const MergeNodes& other) { + _reason << other._reason.str(); + _problemFlags |= other._problemFlags; + _nodes.reserve(_nodes.size() + other._nodes.size()); + _nodes.insert(_nodes.end(), other._nodes.begin(), other._nodes.end()); + updatePriority(other._priority); +} + +void +MergeNodes::markMoveToIdealLocation(uint16_t node, uint8_t msgPriority) { + _reason << "[Moving bucket to ideal node " << node << "]"; + addProblem(NON_IDEAL_LOCATION); + addNode(node); + updatePriority(msgPriority); +} + +void +MergeNodes::markOutOfSync(const StateChecker::Context& c, uint8_t msgPriority) { + _reason << "[Synchronizing buckets with different checksums " << c.entry->toString() << "]"; + addProblem(OUT_OF_SYNC); + updatePriority(msgPriority); +} + +void +MergeNodes::markMissingReplica(uint16_t node, uint8_t msgPriority) { + _reason << "[Adding missing node " << node << "]"; + addProblem(MISSING_REPLICA); + addNode(node); + updatePriority(msgPriority); +} + bool presentInIdealState(const StateChecker::Context& c, uint16_t node) noexcept { @@ -666,6 +680,9 @@ addStatisticsForNonIdealNodes(const StateChecker::Context& c, bool missingReplic } } +MergeNodes checkForNodesMissingFromIdealState(StateChecker::Context& c) __attribute__((noinline)); +MergeNodes checkIfBucketsAreOutOfSyncAndNeedMerging(StateChecker::Context& c) __attribute__((noinline)); + MergeNodes checkForNodesMissingFromIdealState(StateChecker::Context& c) { |