diff options
author | Harald Musum <musum@yahooinc.com> | 2022-09-20 11:21:20 +0200 |
---|---|---|
committer | Harald Musum <musum@yahooinc.com> | 2022-09-20 11:21:20 +0200 |
commit | 7d145e39d3d043fe696c4e999040fb6d1c24b0c6 (patch) | |
tree | 602ec613cebfe4b9f88982c5c0c6123a8e87b3f5 /clustercontroller-core | |
parent | bd7b4d77d57c6d40d0da9387a89bdeffefaacd98 (diff) |
Set slobrok connection specs in constructor
Diffstat (limited to 'clustercontroller-core')
3 files changed, 18 insertions, 11 deletions
diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetController.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetController.java index f2f9e52262b..80b79f4eb13 100644 --- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetController.java +++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetController.java @@ -167,7 +167,7 @@ public class FleetController implements NodeListener, SlobrokListener, SystemSta options.nodeStateRequestTimeoutLatestPercentage(), options.nodeStateRequestRoundTripTimeMaxSeconds()); var database = new DatabaseHandler(context, new ZooKeeperDatabaseFactory(context), timer, options.zooKeeperServerAddress(), timer); - var lookUp = new SlobrokClient(context, timer); + var lookUp = new SlobrokClient(context, timer, options.slobrokConnectionSpecs()); var stateGenerator = new StateChangeHandler(context, timer, log); var stateBroadcaster = new SystemStateBroadcaster(context, timer, timer); var masterElectionHandler = new MasterElectionHandler(context, options.fleetControllerIndex(), options.fleetControllerCount(), timer, timer); diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/SlobrokClient.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/SlobrokClient.java index 8393e776fc2..d87e0e20908 100644 --- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/SlobrokClient.java +++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/SlobrokClient.java @@ -35,30 +35,37 @@ public class SlobrokClient implements NodeLookup { private Supervisor supervisor; private boolean freshMirror = false; - public SlobrokClient(FleetControllerContext context, Timer timer) { + public SlobrokClient(FleetControllerContext context, Timer timer, String[] connectionSpecs) { this.context = context; this.timer = timer; + this.connectionSpecs = connectionSpecs; + setup(); } - public boolean equalsExistingSpec(String spec[]) { + public boolean equalsExistingSpec(String[] spec) { if (spec == null && connectionSpecs == null) return true; - if (spec == null && connectionSpecs != null) return false; - if (spec != null && connectionSpecs == null) return false; + if (spec == null) return false; + if (connectionSpecs == null) return false; if (spec.length != connectionSpecs.length) return false; - for (int i=0, n=spec.length; i<n; ++i) { + for (int i = 0, n = spec.length; i < n; ++i) { if (!spec[i].equals(connectionSpecs[i])) return false; } return true; } - public void setSlobrokConnectionSpecs(String slobrokConnectionSpecs[]) { + public void setSlobrokConnectionSpecs(String[] slobrokConnectionSpecs) { if (equalsExistingSpec(slobrokConnectionSpecs)) return; + this.connectionSpecs = slobrokConnectionSpecs; shutdown(); + setup(); + } + + private void setup() { supervisor = new Supervisor(new Transport("slobrok-client")); supervisor.setDropEmptyBuffers(true); SlobrokList slist = new SlobrokList(); - slist.setup(slobrokConnectionSpecs); + slist.setup(connectionSpecs); mirror = new Mirror(supervisor, slist); freshMirror = true; } @@ -80,6 +87,7 @@ public class SlobrokClient implements NodeLookup { @Override public boolean updateCluster(ContentCluster cluster, SlobrokListener listener) { if (mirror == null) return false; + int mirrorVersion = mirror.updates(); if (freshMirror) { freshMirror = false; @@ -124,7 +132,7 @@ public class SlobrokClient implements NodeLookup { // XXX we really would like to cross-check the actual RPC address against what's configured, // but this information does not seem to be available to the cluster controller currently. NodeInfo nodeInfo = cluster.clusterInfo().getNodeInfo(data.node); - if (nodeInfo == null) continue; // slobrok may contain nonconfigured nodes during state transitions + if (nodeInfo == null) continue; // slobrok may contain non-configured nodes during state transitions cluster.clusterInfo().setRpcAddress(data.node, data.rpcAddress); if (listener != null) listener.handleNewNode(nodeInfo); // TODO: We'll never add new nodes here, move this to where clusterInfo.setNodes is called? diff --git a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/FleetControllerTest.java b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/FleetControllerTest.java index d2ae4a8623f..f7efbd2cc3b 100644 --- a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/FleetControllerTest.java +++ b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/FleetControllerTest.java @@ -125,8 +125,7 @@ public abstract class FleetControllerTest implements Waiter { options.nodeStateRequestTimeoutEarliestPercentage(), options.nodeStateRequestTimeoutLatestPercentage(), options.nodeStateRequestRoundTripTimeMaxSeconds()); - var lookUp = new SlobrokClient(context, timer); - lookUp.setSlobrokConnectionSpecs(new String[0]); + var lookUp = new SlobrokClient(context, timer, new String[0]); var rpcServer = new RpcServer(timer, timer, options.clusterName(), options.fleetControllerIndex(), options.slobrokBackOffPolicy()); var database = new DatabaseHandler(context, new ZooKeeperDatabaseFactory(context), timer, options.zooKeeperServerAddress(), timer); |