summaryrefslogtreecommitdiffstats
path: root/clustercontroller-apps
diff options
context:
space:
mode:
authorHarald Musum <musum@yahooinc.com>2022-08-31 15:22:20 +0200
committerHarald Musum <musum@yahooinc.com>2022-08-31 15:22:20 +0200
commit3074e6547443246e950ed6d675a4aec91c333d80 (patch)
tree11e613b0a28f3640b2169ed47fd7cb6b01765278 /clustercontroller-apps
parentf9e08944e87f49ae474c0f55bd64d8c709fb2cf6 (diff)
Make FleetControllerOptions immutable and support builder pattern
Diffstat (limited to 'clustercontroller-apps')
-rw-r--r--clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterController.java10
-rw-r--r--clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterControllerClusterConfigurer.java99
-rw-r--r--clustercontroller-apps/src/test/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterControllerClusterConfigurerTest.java10
3 files changed, 56 insertions, 63 deletions
diff --git a/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterController.java b/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterController.java
index f0827aa79d1..4395240acd3 100644
--- a/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterController.java
+++ b/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterController.java
@@ -51,12 +51,12 @@ public class ClusterController extends AbstractComponent
metricWrapper.updateMetricImplementation(metricImpl);
verifyThatZooKeeperWorks(options);
synchronized (controllers) {
- FleetController controller = controllers.get(options.clusterName);
+ FleetController controller = controllers.get(options.clusterName());
if (controller == null) {
StatusHandler.ContainerStatusPageServer statusPageServer = new StatusHandler.ContainerStatusPageServer();
controller = FleetController.create(options, statusPageServer, metricWrapper);
- controllers.put(options.clusterName, controller);
- status.put(options.clusterName, statusPageServer);
+ controllers.put(options.clusterName(), controller);
+ status.put(options.clusterName(), statusPageServer);
} else {
controller.updateOptions(options);
}
@@ -120,8 +120,8 @@ public class ClusterController extends AbstractComponent
* Block until we are connected to zookeeper server
*/
private void verifyThatZooKeeperWorks(FleetControllerOptions options) throws Exception {
- if (options.zooKeeperServerAddress != null && !"".equals(options.zooKeeperServerAddress)) {
- try (Curator curator = Curator.create(options.zooKeeperServerAddress)) {
+ if (options.zooKeeperServerAddress() != null && !"".equals(options.zooKeeperServerAddress())) {
+ try (Curator curator = Curator.create(options.zooKeeperServerAddress())) {
if ( ! curator.framework().blockUntilConnected(600, TimeUnit.SECONDS))
com.yahoo.protect.Process.logAndDie("Failed to connect to ZK, dying and restarting container");
}
diff --git a/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterControllerClusterConfigurer.java b/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterControllerClusterConfigurer.java
index bf38cf52aea..016345af8ce 100644
--- a/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterControllerClusterConfigurer.java
+++ b/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterControllerClusterConfigurer.java
@@ -55,69 +55,62 @@ public class ClusterControllerClusterConfigurer extends AbstractComponent {
SlobroksConfig slobroksConfig,
ZookeepersConfig zookeepersConfig) {
Distribution distribution = new Distribution(distributionConfig);
- FleetControllerOptions options = new FleetControllerOptions(fleetcontrollerConfig.cluster_name(), distribution.getNodes());
- options.setStorageDistribution(distribution);
- configure(options, fleetcontrollerConfig);
- configure(options, slobroksConfig);
- configure(options, zookeepersConfig);
- return options;
+ FleetControllerOptions.Builder builder = new FleetControllerOptions.Builder(fleetcontrollerConfig.cluster_name(), distribution.getNodes());
+ builder.setStorageDistribution(distribution);
+ configure(builder, fleetcontrollerConfig);
+ configure(builder, slobroksConfig);
+ configure(builder, zookeepersConfig);
+ return builder.build();
}
- private static void configure(FleetControllerOptions options, FleetcontrollerConfig config) {
- options.clusterName = config.cluster_name();
- options.fleetControllerIndex = config.index();
- options.fleetControllerCount = config.fleet_controller_count();
- options.zooKeeperSessionTimeout = (int) (config.zookeeper_session_timeout() * 1000);
- options.masterZooKeeperCooldownPeriod = (int) (config.master_zookeeper_cooldown_period() * 1000);
- options.stateGatherCount = config.state_gather_count();
- options.rpcPort = config.rpc_port();
- options.httpPort = config.http_port();
- options.maxTransitionTime.put(NodeType.STORAGE, config.storage_transition_time());
- options.maxTransitionTime.put(NodeType.DISTRIBUTOR, config.distributor_transition_time());
- options.maxInitProgressTime = config.init_progress_time();
- options.statePollingFrequency = config.state_polling_frequency();
- options.maxPrematureCrashes = config.max_premature_crashes();
- options.stableStateTimePeriod = config.stable_state_time_period();
- options.eventLogMaxSize = config.event_log_max_size();
- options.eventNodeLogMaxSize = config.event_node_log_max_size();
- options.minDistributorNodesUp = config.min_distributors_up_count();
- options.minStorageNodesUp = config.min_storage_up_count();
- options.minRatioOfDistributorNodesUp = config.min_distributor_up_ratio();
- options.minRatioOfStorageNodesUp = config.min_storage_up_ratio();
- options.cycleWaitTime = (int) (config.cycle_wait_time() * 1000);
- options.minTimeBeforeFirstSystemStateBroadcast = (int) (config.min_time_before_first_system_state_broadcast() * 1000);
- options.nodeStateRequestTimeoutMS = (int) (config.get_node_state_request_timeout() * 1000);
- options.showLocalSystemStatesInEventLog = config.show_local_systemstates_in_event_log();
- options.minTimeBetweenNewSystemStates = config.min_time_between_new_systemstates();
- options.maxSlobrokDisconnectGracePeriod = (int) (config.max_slobrok_disconnect_grace_period() * 1000);
- options.distributionBits = config.ideal_distribution_bits();
- options.minNodeRatioPerGroup = config.min_node_ratio_per_group();
- options.setMaxDeferredTaskVersionWaitTime(Duration.ofMillis((int)(config.max_deferred_task_version_wait_time_sec() * 1000)));
- options.clusterHasGlobalDocumentTypes = config.cluster_has_global_document_types();
- options.minMergeCompletionRatio = config.min_merge_completion_ratio();
- options.enableTwoPhaseClusterStateActivation = config.enable_two_phase_cluster_state_transitions();
- options.clusterFeedBlockEnabled = config.enable_cluster_feed_block();
- options.clusterFeedBlockLimit = Map.copyOf(config.cluster_feed_block_limit());
- options.clusterFeedBlockNoiseLevel = config.cluster_feed_block_noise_level();
+ private static void configure(FleetControllerOptions.Builder builder, FleetcontrollerConfig config) {
+ builder.setClusterName(config.cluster_name());
+ builder.setIndex(config.index());
+ builder.setCount(config.fleet_controller_count());
+ builder.setZooKeeperSessionTimeout((int) (config.zookeeper_session_timeout() * 1000));
+ builder.setMasterZooKeeperCooldownPeriod((int) (config.master_zookeeper_cooldown_period() * 1000));
+ builder.setStateGatherCount(config.state_gather_count());
+ builder.setRpcPort(config.rpc_port());
+ builder.setHttpPort(config.http_port());
+ builder.setMaxTransitionTime(NodeType.STORAGE, config.storage_transition_time());
+ builder.setMaxTransitionTime(NodeType.DISTRIBUTOR, config.distributor_transition_time());
+ builder.setMaxInitProgressTime(config.init_progress_time());
+ builder.setStatePollingFrequency(config.state_polling_frequency());
+ builder.setMaxPrematureCrashes(config.max_premature_crashes());
+ builder.setStableStateTimePeriod(config.stable_state_time_period());
+ builder.setEventLogMaxSize(config.event_log_max_size());
+ builder.setEventNodeLogMaxSize(config.event_node_log_max_size());
+ builder.setMinDistributorNodesUp(config.min_distributors_up_count());
+ builder.setMinStorageNodesUp(config.min_storage_up_count());
+ builder.setMinRatioOfDistributorNodesUp(config.min_distributor_up_ratio());
+ builder.setMinRatioOfStorageNodesUp(config.min_storage_up_ratio());
+ builder.setCycleWaitTime((int) (config.cycle_wait_time() * 1000));
+ builder.setMinTimeBeforeFirstSystemStateBroadcast((int) (config.min_time_before_first_system_state_broadcast() * 1000));
+ builder.setNodeStateRequestTimeoutMS((int) (config.get_node_state_request_timeout() * 1000));
+ builder.setShowLocalSystemStatesInEventLog(config.show_local_systemstates_in_event_log());
+ builder.setMinTimeBetweenNewSystemStates(config.min_time_between_new_systemstates());
+ builder.setMaxSlobrokDisconnectGracePeriod((int) (config.max_slobrok_disconnect_grace_period() * 1000));
+ builder.setDistributionBits(config.ideal_distribution_bits());
+ builder.setMinNodeRatioPerGroup(config.min_node_ratio_per_group());
+ builder.setMaxDeferredTaskVersionWaitTime(Duration.ofMillis((int)(config.max_deferred_task_version_wait_time_sec() * 1000)));
+ builder.setClusterHasGlobalDocumentTypes(config.cluster_has_global_document_types());
+ builder.setMinMergeCompletionRatio(config.min_merge_completion_ratio());
+ builder.enableTwoPhaseClusterStateActivation(config.enable_two_phase_cluster_state_transitions());
+ builder.setClusterFeedBlockEnabled(config.enable_cluster_feed_block());
+ builder.setClusterFeedBlockLimit(Map.copyOf(config.cluster_feed_block_limit()));
+ builder.setClusterFeedBlockNoiseLevel(config.cluster_feed_block_noise_level());
}
- private static void configure(FleetControllerOptions options, SlobroksConfig config) {
+ private static void configure(FleetControllerOptions.Builder builder, SlobroksConfig config) {
String[] specs = new String[config.slobrok().size()];
for (int i = 0; i < config.slobrok().size(); i++) {
specs[i] = config.slobrok().get(i).connectionspec();
}
- options.slobrokConnectionSpecs = specs;
+ builder.setSlobrokConnectionSpecs(specs);
}
- private static void configure(FleetControllerOptions options, ZookeepersConfig config) {
- options.zooKeeperServerAddress = verifyZooKeeperAddress(config.zookeeperserverlist());
- }
-
- private static String verifyZooKeeperAddress(String zooKeeperServerAddress) {
- if (zooKeeperServerAddress == null || "".equals(zooKeeperServerAddress)) {
- throw new IllegalArgumentException("zookeeper server address must be set, was '" + zooKeeperServerAddress + "'");
- }
- return zooKeeperServerAddress;
+ private static void configure(FleetControllerOptions.Builder builder, ZookeepersConfig config) {
+ builder.setZooKeeperServerAddress(config.zookeeperserverlist());
}
}
diff --git a/clustercontroller-apps/src/test/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterControllerClusterConfigurerTest.java b/clustercontroller-apps/src/test/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterControllerClusterConfigurerTest.java
index 7c5913774c3..11caf0397e0 100644
--- a/clustercontroller-apps/src/test/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterControllerClusterConfigurerTest.java
+++ b/clustercontroller-apps/src/test/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterControllerClusterConfigurerTest.java
@@ -66,11 +66,11 @@ public class ClusterControllerClusterConfigurerTest {
null
);
assertNotNull(configurer.getOptions());
- assertEquals(0.123, configurer.getOptions().minNodeRatioPerGroup, 0.01);
- assertTrue(configurer.getOptions().clusterFeedBlockEnabled);
- assertEquals(0.5, configurer.getOptions().clusterFeedBlockLimit.get("foo"), 0.01);
- assertEquals(0.7, configurer.getOptions().clusterFeedBlockLimit.get("bar"), 0.01);
- assertEquals(0.05, configurer.getOptions().clusterFeedBlockNoiseLevel, 0.001);
+ assertEquals(0.123, configurer.getOptions().minNodeRatioPerGroup(), 0.01);
+ assertTrue(configurer.getOptions().clusterFeedBlockEnabled());
+ assertEquals(0.5, configurer.getOptions().clusterFeedBlockLimit().get("foo"), 0.01);
+ assertEquals(0.7, configurer.getOptions().clusterFeedBlockLimit().get("bar"), 0.01);
+ assertEquals(0.05, configurer.getOptions().clusterFeedBlockNoiseLevel(), 0.001);
try {
zookeepersConfig.zookeeperserverlist("");