summaryrefslogtreecommitdiffstats
path: root/storage
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@oath.com>2017-11-06 11:48:22 +0000
committerTor Egge <Tor.Egge@oath.com>2017-11-06 11:48:22 +0000
commit647a15eb3d4cfc2063bfb0d604e2d03afab86c1d (patch)
treef08db8f7122d59b96d4ad8e6f34242f6d11cfd5b /storage
parentf7c50a1d6c88513e830c42eff731f0132e71dce2 (diff)
Add accessor method to get bucket id from state checker context.
Diffstat (limited to 'storage')
-rw-r--r--storage/src/tests/distributor/statecheckerstest.cpp6
-rw-r--r--storage/src/vespa/storage/distributor/idealstatemanager.cpp4
-rw-r--r--storage/src/vespa/storage/distributor/statechecker.h1
-rw-r--r--storage/src/vespa/storage/distributor/statecheckers.cpp32
4 files changed, 22 insertions, 21 deletions
diff --git a/storage/src/tests/distributor/statecheckerstest.cpp b/storage/src/tests/distributor/statecheckerstest.cpp
index 3da427cd63b..e71525d5dd6 100644
--- a/storage/src/tests/distributor/statecheckerstest.cpp
+++ b/storage/src/tests/distributor/statecheckerstest.cpp
@@ -134,17 +134,17 @@ struct StateCheckersTest : public CppUnit::TestFixture,
std::ostringstream ost;
c.siblingBucket = getIdealStateManager().getDistributorComponent()
- .getSibling(c.bucket.getBucketId());
+ .getSibling(c.getBucketId());
std::vector<BucketDatabase::Entry> entries;
- getBucketDatabase().getAll(c.bucket.getBucketId(), entries);
+ getBucketDatabase().getAll(c.getBucketId(), entries);
c.siblingEntry = getBucketDatabase().get(c.siblingBucket);
c.entries = entries;
for (uint32_t j = 0; j < entries.size(); ++j) {
// Run checking only on this bucketid, but include all buckets
// owned by it or owners of it, so we can detect inconsistent split.
- if (entries[j].getBucketId() == c.bucket.getBucketId()) {
+ if (entries[j].getBucketId() == c.getBucketId()) {
c.entry = entries[j];
StateChecker::Result result(checker.check(c));
diff --git a/storage/src/vespa/storage/distributor/idealstatemanager.cpp b/storage/src/vespa/storage/distributor/idealstatemanager.cpp
index 608d68c9b27..a33d8376e4d 100644
--- a/storage/src/vespa/storage/distributor/idealstatemanager.cpp
+++ b/storage/src/vespa/storage/distributor/idealstatemanager.cpp
@@ -77,7 +77,7 @@ IdealStateManager::iAmUp() const
void
IdealStateManager::fillParentAndChildBuckets(StateChecker::Context& c) const
{
- c.db.getAll(c.bucket.getBucketId(), c.entries);
+ c.db.getAll(c.getBucketId(), c.entries);
if (c.entries.empty()) {
LOG(spam,
"Did not find bucket %s in bucket database",
@@ -95,7 +95,7 @@ IdealStateManager::getEntryForPrimaryBucket(StateChecker::Context& c) const
{
for (uint32_t j = 0; j < c.entries.size(); ++j) {
BucketDatabase::Entry& e = c.entries[j];
- if (e.getBucketId() == c.bucket.getBucketId()) {
+ if (e.getBucketId() == c.getBucketId()) {
return &e;
}
}
diff --git a/storage/src/vespa/storage/distributor/statechecker.h b/storage/src/vespa/storage/distributor/statechecker.h
index dee473e2560..9f9f57dd3bf 100644
--- a/storage/src/vespa/storage/distributor/statechecker.h
+++ b/storage/src/vespa/storage/distributor/statechecker.h
@@ -85,6 +85,7 @@ public:
}
document::Bucket getBucket() const { return bucket; }
+ document::BucketId getBucketId() const { return bucket.getBucketId(); }
std::string toString() const;
};
diff --git a/storage/src/vespa/storage/distributor/statecheckers.cpp b/storage/src/vespa/storage/distributor/statecheckers.cpp
index 534fc42cb98..4c5301dd8c2 100644
--- a/storage/src/vespa/storage/distributor/statecheckers.cpp
+++ b/storage/src/vespa/storage/distributor/statecheckers.cpp
@@ -32,7 +32,7 @@ SplitBucketStateChecker::validForSplit(StateChecker::Context& c)
}
// Can't split anymore if we already used 58 bits.
- if (c.bucket.getBucketId().getUsedBits() >= 58) {
+ if (c.getBucketId().getUsedBits() >= 58) {
return false;
}
@@ -145,7 +145,7 @@ SplitBucketStateChecker::check(StateChecker::Context& c) {
}
// Always split it if it has less used bits than the minimum.
- if (c.bucket.getBucketId().getUsedBits() < c.distributorConfig.getMinimalBucketSplit()) {
+ if (c.getBucketId().getUsedBits() < c.distributorConfig.getMinimalBucketSplit()) {
return generateMinimumBucketSplitOperation(c);
}
return Result::noMaintenanceNeeded();
@@ -258,8 +258,8 @@ JoinBucketsStateChecker::siblingsAreInSync(const Context& context) const
bool
JoinBucketsStateChecker::singleBucketJoinIsConsistent(const Context& c) const
{
- document::BucketId joinTarget(c.bucket.getBucketId().getUsedBits() - 1,
- c.bucket.getBucketId().getRawId());
+ document::BucketId joinTarget(c.getBucketId().getUsedBits() - 1,
+ c.getBucketId().getRawId());
// If there are 2 children under the potential join target bucket, joining
// would cause the bucket tree to become inconsistent. The reason for this
// being that "moving" a bucket one bit up in the tree (and into
@@ -321,14 +321,14 @@ JoinBucketsStateChecker::shouldJoin(const Context& c) const
return false;
}
- if (bucketAtDistributionBitLimit(c.bucket.getBucketId(), c)) {
+ if (bucketAtDistributionBitLimit(c.getBucketId(), c)) {
LOG(spam,
"Not joining bucket %s because it is below the min split "
"count (config: %u, cluster state: %u, bucket has: %u)",
c.bucket.toString().c_str(),
c.distributorConfig.getMinimalBucketSplit(),
c.systemState.getDistributionBitCount(),
- c.bucket.getBucketId().getUsedBits());
+ c.getBucketId().getUsedBits());
return false;
}
@@ -337,7 +337,7 @@ JoinBucketsStateChecker::shouldJoin(const Context& c) const
}
if (c.getSiblingEntry().valid()) {
- if (!isFirstSibling(c.bucket.getBucketId())) {
+ if (!isFirstSibling(c.getBucketId())) {
LOG(spam,
"Not joining bucket %s because it is the second sibling of "
"%s and not the first",
@@ -427,8 +427,8 @@ JoinBucketsStateChecker::computeJoinBucket(const Context& c) const
{
// Always decrease by at least 1 bit, as we could not get here unless this
// were a valid outcome.
- unsigned int level = c.bucket.getBucketId().getUsedBits() - 1;
- document::BucketId target(level, c.bucket.getBucketId().getRawId());
+ unsigned int level = c.getBucketId().getUsedBits() - 1;
+ document::BucketId target(level, c.getBucketId().getRawId());
// Push bucket up the tree as long as it gets no siblings. This means
// joins involving 2 source buckets will currently only be decreased by 1
@@ -436,7 +436,7 @@ JoinBucketsStateChecker::computeJoinBucket(const Context& c) const
// be decreased by multiple bits. We may want to optimize joins for cases
// with 2 source buckets in the future.
while (true) {
- document::BucketId candidate(level, c.bucket.getBucketId().getRawId());
+ document::BucketId candidate(level, c.getBucketId().getRawId());
if (bucketHasMultipleChildren(candidate, c)
|| !legalBucketSplitLevel(candidate, c))
{
@@ -458,15 +458,15 @@ JoinBucketsStateChecker::check(StateChecker::Context& c)
}
document::Bucket joinedBucket(computeJoinBucket(c));
- assert(joinedBucket.getBucketId().getUsedBits() < c.bucket.getBucketId().getUsedBits());
+ assert(joinedBucket.getBucketId().getUsedBits() < c.getBucketId().getUsedBits());
std::vector<document::BucketId> sourceBuckets;
if (c.getSiblingEntry().valid()) {
sourceBuckets.push_back(c.siblingBucket);
} else {
- sourceBuckets.push_back(c.bucket.getBucketId());
+ sourceBuckets.push_back(c.getBucketId());
}
- sourceBuckets.push_back(c.bucket.getBucketId());
+ sourceBuckets.push_back(c.getBucketId());
IdealStateOperation::UP op(new JoinOperation(
c.component.getClusterName(),
BucketAndNodes(joinedBucket, c.entry->getNodes()),
@@ -568,7 +568,7 @@ SplitInconsistentStateChecker::check(StateChecker::Context& c)
return Result::noMaintenanceNeeded();
}
- if (!isLeastSplitBucket(c.bucket.getBucketId(), c.entries)) {
+ if (!isLeastSplitBucket(c.getBucketId(), c.entries)) {
return Result::noMaintenanceNeeded();
}
@@ -581,7 +581,7 @@ SplitInconsistentStateChecker::check(StateChecker::Context& c)
op->setPriority(c.distributorConfig.getMaintenancePriorities()
.splitInconsistentBucket);
- op->setDetailedReason(getReason(c.bucket.getBucketId(), c.entries));
+ op->setDetailedReason(getReason(c.getBucketId(), c.entries));
return Result::createStoredResult(std::move(op), MaintenancePriority::HIGH);
}
@@ -1119,7 +1119,7 @@ GarbageCollectionStateChecker::needsGarbageCollection(const Context& c) const
std::chrono::seconds currentTime(
c.component.getClock().getTimeInSeconds().getTime());
- return c.gcTimeCalculator.shouldGc(c.bucket.getBucketId(), currentTime, lastRunAt);
+ return c.gcTimeCalculator.shouldGc(c.getBucketId(), currentTime, lastRunAt);
}
StateChecker::Result