diff options
author | Valerij Fredriksen <valerij92@gmail.com> | 2019-06-30 12:25:36 +0200 |
---|---|---|
committer | Valerij Fredriksen <valerij92@gmail.com> | 2019-06-30 12:25:36 +0200 |
commit | 89f52b5da2273a9846df1375e6520e6b7f518c8d (patch) | |
tree | 098880a7c30ec0ed1eaba577922a15fbb0714bc2 /node-repository | |
parent | 916baacba0ae00134d9a198c24cfaee0ae06cde6 (diff) |
Simplify OperatorChangeApplicationMaintainer
Diffstat (limited to 'node-repository')
2 files changed, 17 insertions, 23 deletions
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 52e7a28acc8..b9b1200d473 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 @@ -65,7 +65,7 @@ public class NodeRepositoryMaintenance extends AbstractComponent { nodeFailer = new NodeFailer(deployer, hostLivenessTracker, serviceMonitor, nodeRepository, durationFromEnv("fail_grace").orElse(defaults.failGrace), clock, orchestrator, throttlePolicyFromEnv().orElse(defaults.throttlePolicy), metric); periodicApplicationMaintainer = new PeriodicApplicationMaintainer(deployer, nodeRepository, defaults.redeployMaintainerInterval, durationFromEnv("periodic_redeploy_interval").orElse(defaults.periodicRedeployInterval)); - operatorChangeApplicationMaintainer = new OperatorChangeApplicationMaintainer(deployer, nodeRepository, clock, durationFromEnv("operator_change_redeploy_interval").orElse(defaults.operatorChangeRedeployInterval)); + operatorChangeApplicationMaintainer = new OperatorChangeApplicationMaintainer(deployer, nodeRepository, durationFromEnv("operator_change_redeploy_interval").orElse(defaults.operatorChangeRedeployInterval)); reservationExpirer = new ReservationExpirer(nodeRepository, clock, durationFromEnv("reservation_expiry").orElse(defaults.reservationExpiry)); retiredExpirer = new RetiredExpirer(nodeRepository, orchestrator, deployer, clock, durationFromEnv("retired_interval").orElse(defaults.retiredInterval), durationFromEnv("retired_expiry").orElse(defaults.retiredExpiry)); inactiveExpirer = new InactiveExpirer(nodeRepository, clock, durationFromEnv("inactive_expiry").orElse(defaults.inactiveExpiry)); diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/OperatorChangeApplicationMaintainer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/OperatorChangeApplicationMaintainer.java index 46571fd0deb..ab7a565688e 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/OperatorChangeApplicationMaintainer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/OperatorChangeApplicationMaintainer.java @@ -7,12 +7,12 @@ import com.yahoo.config.provision.NodeType; import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.NodeRepository; import com.yahoo.vespa.hosted.provision.node.Agent; -import com.yahoo.vespa.hosted.provision.node.Allocation; +import com.yahoo.vespa.hosted.provision.node.History; -import java.time.Clock; import java.time.Duration; -import java.time.Instant; import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; import java.util.Set; import java.util.stream.Collectors; @@ -28,31 +28,25 @@ import java.util.stream.Collectors; * @author bratseth */ public class OperatorChangeApplicationMaintainer extends ApplicationMaintainer { - - private final Clock clock; - - private Instant previousRun; - OperatorChangeApplicationMaintainer(Deployer deployer, NodeRepository nodeRepository, Clock clock, Duration interval) { + OperatorChangeApplicationMaintainer(Deployer deployer, NodeRepository nodeRepository, Duration interval) { super(deployer, nodeRepository, interval); - this.clock = clock; - previousRun = clock.instant(); // Changes before this will be caught by the first PeriodicApplicationMaintainer run } @Override protected Set<ApplicationId> applicationsNeedingMaintenance() { - Instant windowEnd = clock.instant(); - Instant windowStart = previousRun; - previousRun = windowEnd; - return nodeRepository().getNodes(NodeType.tenant).stream() - .filter(node -> hasManualStateChangeSince(windowStart, node)) - .flatMap(node -> node.allocation().map(Allocation::owner).stream()) - .collect(Collectors.toCollection(LinkedHashSet::new)); - } - - private boolean hasManualStateChangeSince(Instant instant, Node node) { - return node.history().events().stream() - .anyMatch(event -> event.agent() == Agent.operator && event.at().isAfter(instant)); + Map<ApplicationId, List<Node>> nodesByApplication = nodeRepository().getNodes(NodeType.tenant).stream() + .filter(node -> node.allocation().isPresent()) + .collect(Collectors.groupingBy(node -> node.allocation().get().owner(), Collectors.toList())); + + return nodesByApplication.entrySet().stream() + .filter(entry -> entry.getValue().stream() + .flatMap(node -> node.history().events().stream()) + .filter(event -> event.agent() == Agent.operator) + .map(History.Event::at) + .anyMatch(getLastDeployTime(entry.getKey())::isBefore)) + .map(Map.Entry::getKey) + .collect(Collectors.toCollection(LinkedHashSet::new)); } /** |