aboutsummaryrefslogtreecommitdiffstats
path: root/zkfacade/src/main/java/com/yahoo/vespa/curator/Curator.java
diff options
context:
space:
mode:
Diffstat (limited to 'zkfacade/src/main/java/com/yahoo/vespa/curator/Curator.java')
-rw-r--r--zkfacade/src/main/java/com/yahoo/vespa/curator/Curator.java30
1 files changed, 20 insertions, 10 deletions
diff --git a/zkfacade/src/main/java/com/yahoo/vespa/curator/Curator.java b/zkfacade/src/main/java/com/yahoo/vespa/curator/Curator.java
index 15257e11cbe..a9d099fea31 100644
--- a/zkfacade/src/main/java/com/yahoo/vespa/curator/Curator.java
+++ b/zkfacade/src/main/java/com/yahoo/vespa/curator/Curator.java
@@ -3,6 +3,7 @@ package com.yahoo.vespa.curator;
import com.google.inject.Inject;
import com.yahoo.cloud.config.ConfigserverConfig;
+import com.yahoo.net.HostName;
import com.yahoo.path.Path;
import com.yahoo.vespa.curator.recipes.CuratorCounter;
import com.yahoo.vespa.zookeeper.ZooKeeperServer;
@@ -21,8 +22,8 @@ import org.apache.curator.framework.state.ConnectionState;
import org.apache.curator.framework.state.ConnectionStateListener;
import org.apache.curator.retry.ExponentialBackoffRetry;
-import java.io.Closeable;
import java.time.Duration;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@@ -69,17 +70,26 @@ public class Curator implements AutoCloseable {
}
private static String createConnectionSpec(ConfigserverConfig config) {
- StringBuilder sb = new StringBuilder();
- for (int i = 0; i < config.zookeeperserver().size(); i++) {
+ List<String> servers = createAndOrderServerList(config);
+ return String.join(",", servers);
+ }
+
+ private static List<String> createAndOrderServerList(ConfigserverConfig config) {
+ String hostName = HostName.getLocalhost();
+ int configServerCount = config.zookeeperserver().size();
+ List<String> servers = new ArrayList<>();
+
+ int indexForThisConfigServer = 0;
+ for (int i = 0; i < configServerCount; i++) {
ConfigserverConfig.Zookeeperserver server = config.zookeeperserver(i);
- sb.append(server.hostname());
- sb.append(":");
- sb.append(server.port());
- if (i < config.zookeeperserver().size() - 1) {
- sb.append(",");
- }
+ servers.add(server.hostname() + ":" + server.port());
+ if (server.hostname().equals(hostName))
+ indexForThisConfigServer = i;
}
- return sb.toString();
+ // Rotate list of servers so that config server on this host is first in the list
+ if (indexForThisConfigServer != 0)
+ Collections.rotate(servers, configServerCount - indexForThisConfigServer);
+ return servers;
}
/**