summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@oath.com>2017-10-27 13:25:30 +0000
committerTor Egge <Tor.Egge@oath.com>2017-10-27 13:25:30 +0000
commit7aa0bca94a914c3ec31871b06c564250dce2fc45 (patch)
tree2cb5bf05b80462d8b017c694013eb4d595a8d451
parentc5518c77b93ce135fc02f28b121614074d772392 (diff)
Factor out common code.
-rw-r--r--storage/src/vespa/storage/distributor/operations/idealstate/idealstateoperation.cpp53
1 files changed, 26 insertions, 27 deletions
diff --git a/storage/src/vespa/storage/distributor/operations/idealstate/idealstateoperation.cpp b/storage/src/vespa/storage/distributor/operations/idealstate/idealstateoperation.cpp
index 2b6739623ec..3095dce7b87 100644
--- a/storage/src/vespa/storage/distributor/operations/idealstate/idealstateoperation.cpp
+++ b/storage/src/vespa/storage/distributor/operations/idealstate/idealstateoperation.cpp
@@ -182,6 +182,27 @@ public:
}
};
+bool
+checkNullBucketRequestBucketInfoMessage(uint16_t node,
+ document::BucketSpace bucketSpace,
+ const PendingMessageTracker& tracker)
+{
+ RequestBucketInfoChecker rchk;
+ for (;;) {
+ // Check messages sent to null-bucket (i.e. any bucket) for the node.
+ document::Bucket nullBucket(bucketSpace, document::BucketId());
+ tracker.checkPendingMessages(node, nullBucket, rchk);
+ if (rchk.blocked) {
+ return true;
+ }
+ if (bucketSpace == BucketSpace::placeHolder()) {
+ break;
+ }
+ bucketSpace = BucketSpace::placeHolder();
+ }
+ return false;
+}
+
}
bool
@@ -189,26 +210,15 @@ IdealStateOperation::checkBlock(const document::Bucket &bucket,
const PendingMessageTracker& tracker) const
{
IdealStateOpChecker ichk(*this);
- RequestBucketInfoChecker rchk;
const std::vector<uint16_t>& nodes(getNodes());
- for (size_t i = 0; i < nodes.size(); ++i) {
- tracker.checkPendingMessages(nodes[i], bucket, ichk);
+ for (auto node : nodes) {
+ tracker.checkPendingMessages(node, bucket, ichk);
if (ichk.blocked) {
return true;
}
- // Check messages sent to null-bucket (i.e. any bucket) for the node.
- document::Bucket nullBucket(bucket.getBucketSpace(), document::BucketId());
- tracker.checkPendingMessages(nodes[i], nullBucket, rchk);
- if (rchk.blocked) {
+ if (checkNullBucketRequestBucketInfoMessage(node, bucket.getBucketSpace(), tracker)) {
return true;
}
- if (bucket.getBucketSpace() != BucketSpace::placeHolder()) {
- nullBucket = document::Bucket(BucketSpace::placeHolder(), document::BucketId());
- tracker.checkPendingMessages(nodes[i], nullBucket, rchk);
- if (rchk.blocked) {
- return true;
- }
- }
}
return false;
}
@@ -224,22 +234,11 @@ IdealStateOperation::checkBlockForAllNodes(
if (ichk.blocked) {
return true;
}
- RequestBucketInfoChecker rchk;
- // Check messages sent to null-bucket (i.e. _any bucket_) for the node.
const std::vector<uint16_t>& nodes(getNodes());
- for (size_t i = 0; i < nodes.size(); ++i) {
- document::Bucket nullBucket(bucket.getBucketSpace(), document::BucketId());
- tracker.checkPendingMessages(nodes[i], nullBucket, rchk);
- if (rchk.blocked) {
+ for (auto node : nodes) {
+ if (checkNullBucketRequestBucketInfoMessage(node, bucket.getBucketSpace(), tracker)) {
return true;
}
- if (bucket.getBucketSpace() != BucketSpace::placeHolder()) {
- nullBucket = document::Bucket(BucketSpace::placeHolder(), document::BucketId());
- tracker.checkPendingMessages(nodes[i], nullBucket, rchk);
- if (rchk.blocked) {
- return true;
- }
- }
}
return false;
}