summaryrefslogtreecommitdiffstats
path: root/vdslib
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2021-01-15 14:02:26 +0100
committerJon Marius Venstad <venstad@gmail.com>2021-01-18 12:17:46 +0100
commit3a08e84b7e8a94b4514a852314eece3ef596c552 (patch)
tree8a2163f5f1a36392726b7ffba396606c3f63dfb4 /vdslib
parent005f28550f9dc461bbf528b6e661600691037d3f (diff)
Add config for distribution and doc-protoc policies across _all_ content clusters
Diffstat (limited to 'vdslib')
-rw-r--r--vdslib/src/main/java/com/yahoo/vdslib/distribution/Distribution.java17
-rw-r--r--vdslib/src/main/java/com/yahoo/vdslib/distribution/Group.java2
2 files changed, 15 insertions, 4 deletions
diff --git a/vdslib/src/main/java/com/yahoo/vdslib/distribution/Distribution.java b/vdslib/src/main/java/com/yahoo/vdslib/distribution/Distribution.java
index c9acd625373..16f18cf8f8b 100644
--- a/vdslib/src/main/java/com/yahoo/vdslib/distribution/Distribution.java
+++ b/vdslib/src/main/java/com/yahoo/vdslib/distribution/Distribution.java
@@ -68,7 +68,7 @@ public class Distribution {
try{
Group root = null;
for (int i=0; i<config.group().size(); ++i) {
- StorDistributionConfig.Group cg = config.group().get(i);
+ StorDistributionConfig.Group cg = config.group(i);
int[] path = new int[0];
if (root != null) {
path = getGroupPath(cg.index());
@@ -172,6 +172,7 @@ public class Distribution {
return Double.compare(o.score, score);
}
}
+
private static class ScoredNode {
int index;
int reliability;
@@ -179,6 +180,7 @@ public class Distribution {
ScoredNode(int index, int reliability, double score) { this.index = index; this.reliability = reliability; this.score = score; }
}
+
private static boolean allDistributorsDown(Group g, ClusterState clusterState) {
if (g.isLeafGroup()) {
for (ConfiguredNode node : g.getNodes()) {
@@ -192,6 +194,7 @@ public class Distribution {
}
return true;
}
+
private Group getIdealDistributorGroup(boolean distributorAutoOwnershipTransferOnWholeGroupDown,
BucketId bucket, ClusterState clusterState, Group parent, int redundancy) {
if (parent.isLeafGroup()) {
@@ -220,6 +223,7 @@ public class Distribution {
}
return getIdealDistributorGroup(distributorAutoOwnershipTransferOnWholeGroupDown, bucket, clusterState, results.first().group, redundancyArray[0]);
}
+
private static class ResultGroup implements Comparable<ResultGroup> {
Group group;
int redundancy;
@@ -234,6 +238,7 @@ public class Distribution {
return group.compareTo(o.group);
}
}
+
private void getIdealGroups(BucketId bucketId, ClusterState clusterState, Group parent,
int redundancy, List<ResultGroup> results) {
if (parent.isLeafGroup()) {
@@ -424,11 +429,13 @@ public class Distribution {
super(message);
}
}
+
public static class NoDistributorsAvailableException extends Exception {
NoDistributorsAvailableException(String message) {
super(message);
}
}
+
public int getIdealDistributorNode(ClusterState state, BucketId bucket, String upStates) throws TooFewBucketBitsInUseException, NoDistributorsAvailableException {
if (bucket.getUsedBits() < state.getDistributionBitCount()) {
throw new TooFewBucketBitsInUseException("Cannot get ideal state for bucket " + bucket + " using " + bucket.getUsedBits()
@@ -474,6 +481,7 @@ public class Distribution {
}
return node.index;
}
+
private boolean visitGroups(GroupVisitor visitor, Map<Integer, Group> groups) {
for (Group g : groups.values()) {
if (!visitor.visitGroup(g)) return false;
@@ -485,12 +493,14 @@ public class Distribution {
}
return true;
}
+
public void visitGroups(GroupVisitor visitor) {
Map<Integer, Group> groups = new TreeMap<>();
Group nodeGraph = config.getAcquire().nodeGraph;
groups.put(nodeGraph.getIndex(), nodeGraph);
visitGroups(visitor, groups);
}
+
public Set<ConfiguredNode> getNodes() {
final Set<ConfiguredNode> nodes = new HashSet<>();
GroupVisitor visitor = new GroupVisitor() {
@@ -524,9 +534,11 @@ public class Distribution {
sb.append("disk_distribution ").append(diskDistribution.toString()).append("\n");
return sb.toString();
}
+
public static String getSimpleGroupConfig(int redundancy, int nodeCount) {
return getSimpleGroupConfig(redundancy, nodeCount, StorDistributionConfig.Disk_distribution.Enum.MODULO_BID);
}
+
private static String getSimpleGroupConfig(int redundancy, int nodeCount, StorDistributionConfig.Disk_distribution.Enum diskDistribution) {
StringBuilder sb = new StringBuilder();
sb.append("raw:redundancy ").append(redundancy).append("\n").append("group[4]\n");
@@ -561,6 +573,5 @@ public class Distribution {
sb.append("disk_distribution ").append(diskDistribution.toString()).append("\n");
return sb.toString();
}
-}
-
+}
diff --git a/vdslib/src/main/java/com/yahoo/vdslib/distribution/Group.java b/vdslib/src/main/java/com/yahoo/vdslib/distribution/Group.java
index 680021893f7..458ab6e291c 100644
--- a/vdslib/src/main/java/com/yahoo/vdslib/distribution/Group.java
+++ b/vdslib/src/main/java/com/yahoo/vdslib/distribution/Group.java
@@ -196,7 +196,7 @@ public class Group implements Comparable<Group> {
/**
* The distribution class keeps precalculated arrays for distributions for all legal redundancies. The class is
- * immutable, such that it can be returned safely out from the group object.
+ * immutable, such that it can be returned safely out from the group object. (Actually, it's not immutable.)
*/
public static class Distribution {