diff options
author | Jon Bratseth <bratseth@yahoo-inc.com> | 2017-11-24 12:18:24 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@yahoo-inc.com> | 2017-11-24 12:18:24 +0100 |
commit | 597f59619a0e08f75a0e60ac09da7e5aea538404 (patch) | |
tree | e3ac25bf56e9d3834a5eb151fa9812f256ffe600 /config-model/src/main/java/com/yahoo/vespa/model/HostResource.java | |
parent | 35f91639a590f33012f29da8309baf0917beab3e (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.java | 23 |
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, |