aboutsummaryrefslogtreecommitdiffstats
path: root/config-model/src/main/java/com/yahoo/vespa/model/HostResource.java
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2017-11-24 12:18:24 +0100
committerJon Bratseth <bratseth@yahoo-inc.com>2017-11-24 12:18:24 +0100
commit597f59619a0e08f75a0e60ac09da7e5aea538404 (patch)
treee3ac25bf56e9d3834a5eb151fa9812f256ffe600 /config-model/src/main/java/com/yahoo/vespa/model/HostResource.java
parent35f91639a590f33012f29da8309baf0917beab3e (diff)
Fall back to sort by hostname if a host has no membership
Diffstat (limited to 'config-model/src/main/java/com/yahoo/vespa/model/HostResource.java')
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/HostResource.java23
1 files changed, 18 insertions, 5 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/HostResource.java b/config-model/src/main/java/com/yahoo/vespa/model/HostResource.java
index e6ed91165ca..72309d4c266 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/HostResource.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/HostResource.java
@@ -207,7 +207,7 @@ public class HostResource implements Comparable<HostResource> {
}
public HostInfo getHostInfo() {
- return new HostInfo(getHostName(), services.values().stream()
+ return new HostInfo(getHostname(), services.values().stream()
.map(Service::getServiceInfo)
.collect(Collectors.toSet()));
}
@@ -244,11 +244,11 @@ public class HostResource implements Comparable<HostResource> {
@Override
public String toString() {
- return "host '" + host.getHostName() + "'";
+ return "host '" + host.getHostname() + "'";
}
- public String getHostName() {
- return host.getHostName();
+ public String getHostname() {
+ return host.getHostname();
}
@Override
@@ -267,6 +267,19 @@ public class HostResource implements Comparable<HostResource> {
}
/**
+ * Compares by the index of the primary membership, if both hosts are members in at least one cluster at this time.
+ * Compare by hostname otherwise.
+ */
+ public int comparePrimarilyByIndexTo(HostResource other) {
+ Optional<ClusterMembership> thisMembership = this.primaryClusterMembership();
+ Optional<ClusterMembership> otherMembership = other.primaryClusterMembership();
+ if (thisMembership.isPresent() && otherMembership.isPresent())
+ return Integer.compare(thisMembership.get().index(), otherMembership.get().index());
+ else
+ return this.getHostname().compareTo(other.getHostname());
+ }
+
+ /**
* Picks hosts by some mixture of host name and index
* (where the mix of one or the other is decided by the last parameter).
*/
@@ -277,7 +290,7 @@ public class HostResource implements Comparable<HostResource> {
Collections.sort(hostsSortedByName);
List<HostResource> hostsSortedByIndex = new ArrayList<>(hosts);
- hostsSortedByIndex.sort(Comparator.comparingInt(host -> host.primaryClusterMembership().get().index()));
+ hostsSortedByIndex.sort((a, b) -> a.comparePrimarilyByIndexTo(b));
return pickHosts(hostsSortedByName, hostsSortedByIndex, count, targetHostsSelectedByIndex);
}
public static List<HostResource> pickHosts(List<HostResource> hostsSelectedByName, List<HostResource> hostsSelectedByIndex,