aboutsummaryrefslogtreecommitdiffstats
path: root/clustercontroller-core/src/main
diff options
context:
space:
mode:
authorGeir Storli <geirst@oath.com>2018-02-26 16:58:52 +0100
committerGeir Storli <geirst@oath.com>2018-02-27 09:37:08 +0100
commitffa4242d66c8ce713546cc1c947450d88934aae7 (patch)
tree01400e0522a7380b98dda5215c870008a50083d7 /clustercontroller-core/src/main
parentdbeb5f7410923de5a30b83a27c5294560df9838e (diff)
Let BucketSpaceStats track invalid count to allow transition from invalid -> valid.
Diffstat (limited to 'clustercontroller-core/src/main')
-rw-r--r--clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/ContentNodeStats.java33
1 files changed, 21 insertions, 12 deletions
diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/ContentNodeStats.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/ContentNodeStats.java
index b579b406890..72a7b2e4bcf 100644
--- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/ContentNodeStats.java
+++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/ContentNodeStats.java
@@ -14,18 +14,18 @@ public class ContentNodeStats {
private Map<String, BucketSpaceStats> bucketSpaces = new HashMap<>();
public static class BucketSpaceStats {
- private boolean invalid;
+ private int invalidCount;
private long bucketsTotal;
private long bucketsPending;
private BucketSpaceStats() {
- this.invalid = true;
+ this.invalidCount = 1;
this.bucketsTotal = 0;
this.bucketsPending = 0;
}
- private BucketSpaceStats(long bucketsTotal, long bucketsPending) {
- this.invalid = false;
+ private BucketSpaceStats(long bucketsTotal, long bucketsPending, boolean invalid) {
+ this.invalidCount = (invalid ? 1 : 0);
this.bucketsTotal = bucketsTotal;
this.bucketsPending = bucketsPending;
}
@@ -34,8 +34,16 @@ public class ContentNodeStats {
return new BucketSpaceStats();
}
+ public static BucketSpaceStats invalid(long bucketsTotal, long bucketsPending) {
+ return new BucketSpaceStats(bucketsTotal, bucketsPending, true);
+ }
+
public static BucketSpaceStats of(long bucketsTotal, long bucketsPending) {
- return new BucketSpaceStats(bucketsTotal, bucketsPending);
+ return new BucketSpaceStats(bucketsTotal, bucketsPending, false);
+ }
+
+ public static BucketSpaceStats empty() {
+ return new BucketSpaceStats(0, 0, false);
}
public long getBucketsTotal() {
@@ -47,15 +55,15 @@ public class ContentNodeStats {
}
public boolean mayHaveBucketsPending() {
- return (bucketsPending > 0) || invalid;
+ return (bucketsPending > 0) || (invalidCount > 0);
}
public boolean valid() {
- return !invalid;
+ return invalidCount == 0;
}
public void merge(BucketSpaceStats rhs, int factor) {
- this.invalid |= rhs.invalid;
+ this.invalidCount += (factor * rhs.invalidCount);
this.bucketsTotal += (factor * rhs.bucketsTotal);
this.bucketsPending += (factor * rhs.bucketsPending);
}
@@ -65,18 +73,19 @@ public class ContentNodeStats {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
BucketSpaceStats that = (BucketSpaceStats) o;
- return bucketsTotal == that.bucketsTotal &&
+ return invalidCount == that.invalidCount &&
+ bucketsTotal == that.bucketsTotal &&
bucketsPending == that.bucketsPending;
}
@Override
public int hashCode() {
- return Objects.hash(bucketsTotal, bucketsPending);
+ return Objects.hash(invalidCount, bucketsTotal, bucketsPending);
}
@Override
public String toString() {
- return "{bucketsTotal=" + bucketsTotal + ", bucketsPending=" + bucketsPending + "}";
+ return "{bucketsTotal=" + bucketsTotal + ", bucketsPending=" + bucketsPending + ", invalidCount=" + invalidCount + "}";
}
}
@@ -116,7 +125,7 @@ public class ContentNodeStats {
for (Map.Entry<String, BucketSpaceStats> entry : stats.bucketSpaces.entrySet()) {
BucketSpaceStats statsToUpdate = bucketSpaces.get(entry.getKey());
if (statsToUpdate == null && factor == 1) {
- statsToUpdate = new BucketSpaceStats();
+ statsToUpdate = BucketSpaceStats.empty();
bucketSpaces.put(entry.getKey(), statsToUpdate);
}
if (statsToUpdate != null) {