summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--flags/src/main/java/com/yahoo/vespa/flags/Flags.java7
-rw-r--r--flags/src/main/java/com/yahoo/vespa/flags/custom/NodeMaintainerDurations.java35
-rw-r--r--flags/src/test/java/com/yahoo/vespa/flags/NodeMaintainerDurationsTest.java42
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRepositoryMaintenance.java40
4 files changed, 18 insertions, 106 deletions
diff --git a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
index bce487f7eb1..78aec5285cf 100644
--- a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
+++ b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
@@ -3,7 +3,6 @@ package com.yahoo.vespa.flags;
import com.yahoo.component.Vtag;
import com.yahoo.vespa.defaults.Defaults;
-import com.yahoo.vespa.flags.custom.NodeMaintainerDurations;
import com.yahoo.vespa.flags.custom.PreprovisionCapacity;
import java.util.List;
@@ -112,9 +111,9 @@ public class Flags {
"Takes effect at redeployment",
APPLICATION_ID);
- public static final UnboundJacksonFlag<NodeMaintainerDurations> NODE_MAINTAINER_DURATIONS = defineJacksonFlag(
- "node-maintainer-durations", new NodeMaintainerDurations(), NodeMaintainerDurations.class,
- "Provides overrides for durations in NodeRepositoryMaintenance",
+ public static final UnboundIntFlag REBOOT_INTERVAL_IN_DAYS = defineIntFlag(
+ "reboot-interval-in-days", 30,
+ "The reboot interval in days.",
"Takes effect on start of config server / controller");
public static final UnboundBooleanFlag ENABLE_DYNAMIC_PROVISIONING = defineFeatureFlag(
diff --git a/flags/src/main/java/com/yahoo/vespa/flags/custom/NodeMaintainerDurations.java b/flags/src/main/java/com/yahoo/vespa/flags/custom/NodeMaintainerDurations.java
deleted file mode 100644
index 18a041c33d4..00000000000
--- a/flags/src/main/java/com/yahoo/vespa/flags/custom/NodeMaintainerDurations.java
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.flags.custom;
-
-import com.fasterxml.jackson.annotation.JsonAnyGetter;
-import com.fasterxml.jackson.annotation.JsonAnySetter;
-import com.fasterxml.jackson.annotation.JsonCreator;
-
-import java.time.Duration;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Optional;
-
-/**
- * {@code NodeRepositoryMaintenance} depends on various durations, e.g. the reboot interval. This class
- * defines a serialization format for specifying such durations as a JSON object with keys matching
- * the name (reboot_interval) and with the value being the duration in second as an integer.
- *
- * @author hakonhall
- */
-public class NodeMaintainerDurations {
- @JsonAnySetter
- private final Map<String, Long> durations = new HashMap<>();
-
- @JsonCreator
- public NodeMaintainerDurations() {}
-
- public NodeMaintainerDurations(Map<String, Long> durations) { this.durations.putAll(durations); }
-
- @JsonAnyGetter
- private Map<String, Long> getDurations() { return durations; }
-
- public Optional<Duration> getDuration(String durationName) {
- return Optional.ofNullable(durations.get(durationName)).map(Duration::ofSeconds);
- }
-}
diff --git a/flags/src/test/java/com/yahoo/vespa/flags/NodeMaintainerDurationsTest.java b/flags/src/test/java/com/yahoo/vespa/flags/NodeMaintainerDurationsTest.java
deleted file mode 100644
index d9a2a6fa017..00000000000
--- a/flags/src/test/java/com/yahoo/vespa/flags/NodeMaintainerDurationsTest.java
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.flags;
-
-import com.yahoo.test.json.JsonTestHelper;
-import com.yahoo.vespa.flags.custom.NodeMaintainerDurations;
-import org.junit.Test;
-
-import java.time.Duration;
-import java.util.Map;
-import java.util.Optional;
-
-import static org.junit.Assert.assertEquals;
-
-/**
- * @author hakonhall
- */
-public class NodeMaintainerDurationsTest {
- @Test
- public void testSerialization() {
- String flagValueJson = "{ \"reboot_interval\": 3, \"fail_grace\": 7}";
- var rawFlag = JsonNodeRawFlag.fromJson(flagValueJson);
- var serializer = new JacksonSerializer<>(NodeMaintainerDurations.class);
- var durations = serializer.deserialize(rawFlag);
- assertEquals(Optional.of(Duration.ofSeconds(3)), durations.getDuration("reboot_interval"));
- assertEquals(Optional.of(Duration.ofSeconds(7)), durations.getDuration("fail_grace"));
- assertEquals(Optional.empty(), durations.getDuration("non-existing"));
-
- RawFlag serializedRawFlag = serializer.serialize(durations);
- JsonTestHelper.assertJsonEquals(flagValueJson, serializedRawFlag.asJson());
- }
-
- @Test
- public void testFlag() {
- InMemoryFlagSource flagSource = new InMemoryFlagSource();
- var durations = new NodeMaintainerDurations(Map.of("reboot_interval", 3L, "fail_grace", 7L));
- flagSource.withJacksonFlag(Flags.NODE_MAINTAINER_DURATIONS.id(), durations, NodeMaintainerDurations.class);
- NodeMaintainerDurations resolvedDurations = Flags.NODE_MAINTAINER_DURATIONS.bindTo(flagSource).value();
- assertEquals(Optional.of(Duration.ofSeconds(3)), resolvedDurations.getDuration("reboot_interval"));
- assertEquals(Optional.of(Duration.ofSeconds(7)), resolvedDurations.getDuration("fail_grace"));
- assertEquals(Optional.empty(), resolvedDurations.getDuration("non-existing"));
- }
-}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRepositoryMaintenance.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRepositoryMaintenance.java
index 5ecde542bb6..c6eab53174b 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRepositoryMaintenance.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRepositoryMaintenance.java
@@ -11,7 +11,6 @@ import com.yahoo.config.provision.Zone;
import com.yahoo.jdisc.Metric;
import com.yahoo.vespa.flags.FlagSource;
import com.yahoo.vespa.flags.Flags;
-import com.yahoo.vespa.flags.custom.NodeMaintainerDurations;
import com.yahoo.vespa.hosted.provision.NodeRepository;
import com.yahoo.vespa.hosted.provision.provisioning.ProvisionServiceProvider;
import com.yahoo.vespa.orchestrator.Orchestrator;
@@ -50,7 +49,6 @@ public class NodeRepositoryMaintenance extends AbstractComponent {
private final CapacityReportMaintainer capacityReportMaintainer;
private final OsUpgradeActivator osUpgradeActivator;
private final Rebalancer rebalancer;
- private final NodeMaintainerDurations flagDurations;
@SuppressWarnings("unused")
@Inject
@@ -67,26 +65,25 @@ public class NodeRepositoryMaintenance extends AbstractComponent {
HostLivenessTracker hostLivenessTracker, ServiceMonitor serviceMonitor,
Zone zone, Clock clock, Orchestrator orchestrator, Metric metric,
ProvisionServiceProvider provisionServiceProvider, FlagSource flagSource) {
- this.flagDurations = Flags.NODE_MAINTAINER_DURATIONS.bindTo(flagSource).value();
DefaultTimes defaults = new DefaultTimes(zone);
- nodeFailer = new NodeFailer(deployer, hostLivenessTracker, serviceMonitor, nodeRepository, durationOverride("fail_grace").orElse(defaults.failGrace), clock, orchestrator, throttlePolicyFromEnv().orElse(defaults.throttlePolicy), metric);
- periodicApplicationMaintainer = new PeriodicApplicationMaintainer(deployer, nodeRepository, defaults.redeployMaintainerInterval, durationOverride("periodic_redeploy_interval").orElse(defaults.periodicRedeployInterval));
- operatorChangeApplicationMaintainer = new OperatorChangeApplicationMaintainer(deployer, nodeRepository, durationOverride("operator_change_redeploy_interval").orElse(defaults.operatorChangeRedeployInterval));
- reservationExpirer = new ReservationExpirer(nodeRepository, clock, durationOverride("reservation_expiry").orElse(defaults.reservationExpiry));
- retiredExpirer = new RetiredExpirer(nodeRepository, orchestrator, deployer, clock, durationOverride("retired_interval").orElse(defaults.retiredInterval), durationOverride("retired_expiry").orElse(defaults.retiredExpiry));
- inactiveExpirer = new InactiveExpirer(nodeRepository, clock, durationOverride("inactive_expiry").orElse(defaults.inactiveExpiry));
- failedExpirer = new FailedExpirer(nodeRepository, zone, clock, durationOverride("failed_expirer_interval").orElse(defaults.failedExpirerInterval));
- dirtyExpirer = new DirtyExpirer(nodeRepository, clock, durationOverride("dirty_expiry").orElse(defaults.dirtyExpiry));
- provisionedExpirer = new ProvisionedExpirer(nodeRepository, clock, durationOverride("provisioned_expiry").orElse(defaults.provisionedExpiry));
- nodeRebooter = new NodeRebooter(nodeRepository, clock, durationOverride("reboot_interval").orElse(defaults.rebootInterval));
- metricsReporter = new MetricsReporter(nodeRepository, metric, orchestrator, serviceMonitor, periodicApplicationMaintainer::pendingDeployments, durationOverride("metrics_interval").orElse(defaults.metricsInterval));
- infrastructureProvisioner = new InfrastructureProvisioner(nodeRepository, infraDeployer, durationOverride("infrastructure_provision_interval").orElse(defaults.infrastructureProvisionInterval));
+ nodeFailer = new NodeFailer(deployer, hostLivenessTracker, serviceMonitor, nodeRepository, defaults.failGrace, clock, orchestrator, throttlePolicyFromEnv().orElse(defaults.throttlePolicy), metric);
+ periodicApplicationMaintainer = new PeriodicApplicationMaintainer(deployer, nodeRepository, defaults.redeployMaintainerInterval, defaults.periodicRedeployInterval);
+ operatorChangeApplicationMaintainer = new OperatorChangeApplicationMaintainer(deployer, nodeRepository, defaults.operatorChangeRedeployInterval);
+ reservationExpirer = new ReservationExpirer(nodeRepository, clock, defaults.reservationExpiry);
+ retiredExpirer = new RetiredExpirer(nodeRepository, orchestrator, deployer, clock, defaults.retiredInterval, defaults.retiredExpiry);
+ inactiveExpirer = new InactiveExpirer(nodeRepository, clock, defaults.inactiveExpiry);
+ failedExpirer = new FailedExpirer(nodeRepository, zone, clock, defaults.failedExpirerInterval);
+ dirtyExpirer = new DirtyExpirer(nodeRepository, clock, defaults.dirtyExpiry);
+ provisionedExpirer = new ProvisionedExpirer(nodeRepository, clock, defaults.provisionedExpiry);
+ nodeRebooter = new NodeRebooter(nodeRepository, clock, Duration.ofDays(Flags.REBOOT_INTERVAL_IN_DAYS.bindTo(flagSource).value()));
+ metricsReporter = new MetricsReporter(nodeRepository, metric, orchestrator, serviceMonitor, periodicApplicationMaintainer::pendingDeployments, defaults.metricsInterval);
+ infrastructureProvisioner = new InfrastructureProvisioner(nodeRepository, infraDeployer, defaults.infrastructureProvisionInterval);
loadBalancerExpirer = provisionServiceProvider.getLoadBalancerService().map(lbService ->
- new LoadBalancerExpirer(nodeRepository, durationOverride("load_balancer_expirer_interval").orElse(defaults.loadBalancerExpirerInterval), lbService));
+ new LoadBalancerExpirer(nodeRepository, defaults.loadBalancerExpirerInterval, lbService));
dynamicProvisioningMaintainer = provisionServiceProvider.getHostProvisioner().map(hostProvisioner ->
- new DynamicProvisioningMaintainer(nodeRepository, durationOverride("host_provisioner_interval").orElse(defaults.dynamicProvisionerInterval), hostProvisioner, flagSource));
- capacityReportMaintainer = new CapacityReportMaintainer(nodeRepository, metric, durationOverride("capacity_report_interval").orElse(defaults.capacityReportInterval));
+ new DynamicProvisioningMaintainer(nodeRepository, defaults.dynamicProvisionerInterval, hostProvisioner, flagSource));
+ capacityReportMaintainer = new CapacityReportMaintainer(nodeRepository, metric, defaults.capacityReportInterval);
osUpgradeActivator = new OsUpgradeActivator(nodeRepository, defaults.osUpgradeActivatorInterval);
rebalancer = new Rebalancer(nodeRepository, provisionServiceProvider.getHostResourcesCalculator(), provisionServiceProvider.getHostProvisioner(), metric, clock, defaults.rebalancerInterval);
@@ -115,11 +112,6 @@ public class NodeRepositoryMaintenance extends AbstractComponent {
rebalancer.deconstruct();
}
- private Optional<Duration> durationOverride(String durationName) {
- return Optional.ofNullable(System.getenv(envPrefix + durationName)).map(Long::parseLong).map(Duration::ofSeconds)
- .or(() -> flagDurations.getDuration(durationName));
- }
-
private static Optional<NodeFailer.ThrottlePolicy> throttlePolicyFromEnv() {
String policyName = System.getenv(envPrefix + "throttle_policy");
try {
@@ -150,7 +142,6 @@ public class NodeRepositoryMaintenance extends AbstractComponent {
private final Duration failedExpirerInterval;
private final Duration dirtyExpiry;
private final Duration provisionedExpiry;
- private final Duration rebootInterval;
private final Duration capacityReportInterval;
private final Duration metricsInterval;
private final Duration retiredInterval;
@@ -170,7 +161,6 @@ public class NodeRepositoryMaintenance extends AbstractComponent {
operatorChangeRedeployInterval = Duration.ofMinutes(1);
failedExpirerInterval = Duration.ofMinutes(10);
provisionedExpiry = Duration.ofHours(4);
- rebootInterval = Duration.ofDays(30);
capacityReportInterval = Duration.ofMinutes(10);
metricsInterval = Duration.ofMinutes(1);
infrastructureProvisionInterval = Duration.ofMinutes(1);