diff options
author | Geir Storli <geirst@oath.com> | 2018-02-26 16:58:52 +0100 |
---|---|---|
committer | Geir Storli <geirst@oath.com> | 2018-02-27 09:37:08 +0100 |
commit | ffa4242d66c8ce713546cc1c947450d88934aae7 (patch) | |
tree | 01400e0522a7380b98dda5215c870008a50083d7 /clustercontroller-core/src/main | |
parent | dbeb5f7410923de5a30b83a27c5294560df9838e (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.java | 33 |
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) { |