aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2023-08-18 14:01:11 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2023-08-18 14:01:11 +0000
commitef2f4b11c0956cd65968e2703f4c687c0c13ffe7 (patch)
tree21b8f53b3063d929fb86cf5b63f98a87fc1e295f
parent5a2dd2d26e3c518e7c54ccd29c9be27e8accb7df (diff)
Reduce massive inlining of complex code
-rw-r--r--storage/src/vespa/storage/distributor/statecheckers.cpp105
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)
{