public void setOptions(FleetControllerOptions options, Metric metricImpl) throws Exception {
        metricWrapper.updateMetricImplementation(metricImpl);
        synchronized (monitor) {
            referents.merge(options.clusterName(), 1, Integer::sum);
            FleetController controller = controllers.get(options.clusterName());
            if (controller == null) {
                controller = FleetController.create(options, metricWrapper);
                controllers.put(options.clusterName(), controller);
                status.put(options.clusterName(), controller.statusPageServer());
            } else {
                controller.updateOptions(options);
            }
        }
    }
Dependency injection constructor for controller. A {@link VespaZooKeeperServer} argument is required
for all its users, to ensure that zookeeper has started before we start polling it, but
should not be injected here, as that causes recreation of the cluster controller, and old and new
will run master election, etc., concurrently, which breaks everything.
clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterController.java