summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@yahooinc.com>2022-10-13 15:46:55 +0200
committerValerij Fredriksen <valerijf@yahooinc.com>2022-10-13 15:56:53 +0200
commitaccc6dc69cdc40c4c70d970c48dd1066fb348e6f (patch)
treeb47bcd64c83056fc8b74dcd5a09c77c9e4f7301b /node-repository
parent1b39a0ad7fbb7243e0e58869973d70c511792252 (diff)
Do not update node requested event
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeHealthTracker.java30
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRepositoryMaintenance.java5
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/History.java4
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java10
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java39
5 files changed, 14 insertions, 74 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeHealthTracker.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeHealthTracker.java
index b43e2ae051f..624492a14f3 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeHealthTracker.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeHealthTracker.java
@@ -3,7 +3,6 @@ package com.yahoo.vespa.hosted.provision.maintenance;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.ApplicationLockException;
-import com.yahoo.config.provision.HostLivenessTracker;
import com.yahoo.jdisc.Metric;
import com.yahoo.lang.MutableInteger;
import com.yahoo.transaction.Mutex;
@@ -13,12 +12,10 @@ import com.yahoo.vespa.hosted.provision.Node;
import com.yahoo.vespa.hosted.provision.NodeList;
import com.yahoo.vespa.hosted.provision.NodeRepository;
import com.yahoo.vespa.hosted.provision.node.Agent;
-import com.yahoo.vespa.hosted.provision.node.History;
import com.yahoo.vespa.service.monitor.ServiceMonitor;
import com.yahoo.yolean.Exceptions;
import java.time.Duration;
-import java.time.Instant;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@@ -34,41 +31,18 @@ import static java.util.stream.Collectors.counting;
*/
public class NodeHealthTracker extends NodeRepositoryMaintainer {
- /** Provides information about the status of ready hosts */
- private final HostLivenessTracker hostLivenessTracker;
-
/** Provides (more accurate) information about the status of active hosts */
private final ServiceMonitor serviceMonitor;
- public NodeHealthTracker(HostLivenessTracker hostLivenessTracker,
- ServiceMonitor serviceMonitor, NodeRepository nodeRepository,
+ public NodeHealthTracker(ServiceMonitor serviceMonitor, NodeRepository nodeRepository,
Duration interval, Metric metric) {
super(nodeRepository, interval, metric);
- this.hostLivenessTracker = hostLivenessTracker;
this.serviceMonitor = serviceMonitor;
}
@Override
protected double maintain() {
- return ( updateReadyNodeLivenessEvents() + updateActiveNodeDownState() ) / 2;
- }
-
- private double updateReadyNodeLivenessEvents() {
- // Update node last request events through ZooKeeper to collect request to all config servers.
- // We do this here ("lazily") to avoid writing to zk for each config request.
- try (Mutex lock = nodeRepository().nodes().lockUnallocated()) {
- for (Node node : nodeRepository().nodes().list(Node.State.ready)) {
- Optional<Instant> lastLocalRequest = hostLivenessTracker.lastRequestFrom(node.hostname());
- if (lastLocalRequest.isEmpty()) continue;
-
- if (!node.history().hasEventAfter(History.Event.Type.requested, lastLocalRequest.get())) {
- History updatedHistory = node.history()
- .with(new History.Event(History.Event.Type.requested, Agent.NodeHealthTracker, lastLocalRequest.get()));
- nodeRepository().nodes().write(node.with(updatedHistory), lock);
- }
- }
- }
- return 1.0;
+ return updateActiveNodeDownState();
}
/**
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 dac6ee61ef3..708d8b59eb0 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
@@ -5,7 +5,6 @@ import com.yahoo.component.AbstractComponent;
import com.yahoo.component.annotation.Inject;
import com.yahoo.concurrent.maintenance.Maintainer;
import com.yahoo.config.provision.Deployer;
-import com.yahoo.config.provision.HostLivenessTracker;
import com.yahoo.config.provision.InfraDeployer;
import com.yahoo.config.provision.NodeType;
import com.yahoo.config.provision.Zone;
@@ -33,7 +32,7 @@ public class NodeRepositoryMaintenance extends AbstractComponent {
@SuppressWarnings("unused")
@Inject
public NodeRepositoryMaintenance(NodeRepository nodeRepository, Deployer deployer, InfraDeployer infraDeployer,
- HostLivenessTracker hostLivenessTracker, ServiceMonitor serviceMonitor,
+ ServiceMonitor serviceMonitor,
Zone zone, Metric metric,
ProvisionServiceProvider provisionServiceProvider, FlagSource flagSource,
MetricsFetcher metricsFetcher) {
@@ -46,7 +45,7 @@ public class NodeRepositoryMaintenance extends AbstractComponent {
maintainers.add(infrastructureProvisioner);
maintainers.add(new NodeFailer(deployer, nodeRepository, defaults.failGrace, defaults.nodeFailerInterval, defaults.throttlePolicy, metric));
- maintainers.add(new NodeHealthTracker(hostLivenessTracker, serviceMonitor, nodeRepository, defaults.nodeFailureStatusUpdateInterval, metric));
+ maintainers.add(new NodeHealthTracker(serviceMonitor, nodeRepository, defaults.nodeFailureStatusUpdateInterval, metric));
maintainers.add(new ExpeditedChangeApplicationMaintainer(deployer, metric, nodeRepository, defaults.expeditedChangeRedeployInterval));
maintainers.add(new ReservationExpirer(nodeRepository, defaults.reservationExpiry, metric));
maintainers.add(new RetiredExpirer(nodeRepository, deployer, metric, defaults.retiredInterval, defaults.retiredExpiry));
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/History.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/History.java
index 14fa2e1c8ff..4aca1cbd056 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/History.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/History.java
@@ -46,8 +46,10 @@ public class History {
private static ImmutableMap<Event.Type, Event> toImmutableMap(Collection<Event> events) {
ImmutableMap.Builder<Event.Type, Event> builder = new ImmutableMap.Builder<>();
- for (Event event : events)
+ for (Event event : events) {
+ if (event.type() == Event.Type.requested) continue; // TODO (freva): Remove requested event after 8.70
builder.put(event.type(), event);
+ }
return builder.build();
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java
index b4e304155a6..a5ebc6b3efc 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java
@@ -1,6 +1,7 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.provision.persistence;
+import ai.vespa.http.DomainName;
import com.yahoo.component.Version;
import com.yahoo.concurrent.UncheckedTimeoutException;
import com.yahoo.config.provision.ApplicationId;
@@ -484,15 +485,12 @@ public class CuratorDatabaseClient {
transaction.onCommitted(() -> {
for (var lb : loadBalancers) {
if (lb.state() == fromState) continue;
+ Optional<String> target = lb.instance().flatMap(instance -> instance.hostname().map(DomainName::value).or(instance::ipAddress));
if (fromState == null) {
- log.log(Level.INFO, () -> "Creating " + lb.id() + lb.instance()
- .map(instance -> " (" + instance.hostname() + ")")
- .orElse("") +
+ log.log(Level.INFO, () -> "Creating " + lb.id() + target.map(t -> " (" + t + ")").orElse("") +
" in " + lb.state());
} else {
- log.log(Level.INFO, () -> "Moving " + lb.id() + lb.instance()
- .map(instance -> " (" + instance.hostname() + ")")
- .orElse("") +
+ log.log(Level.INFO, () -> "Moving " + lb.id() + target.map(t -> " (" + t + ")").orElse("") +
" from " + fromState +
" to " + lb.state());
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java
index 2d507967370..977d72c11ea 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java
@@ -109,7 +109,7 @@ public class NodeFailTester {
/** Create hostCount hosts, one app with containerCount containers, and one app with contentCount content nodes. */
public static NodeFailTester withTwoApplications(int hostCount, int containerCount, int contentCount) {
NodeFailTester tester = new NodeFailTester();
- tester.createHostNodes(hostCount);
+ tester.tester.makeReadyHosts(hostCount, new NodeResources(2, 8, 20, 10));
// Create tenant host application
ClusterSpec clusterNodeAdminApp = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("node-admin")).vespaVersion("6.42").build();
@@ -136,13 +136,7 @@ public class NodeFailTester {
public static NodeFailTester withTwoApplications(int numberOfHosts) {
NodeFailTester tester = new NodeFailTester();
-
- int nodesPerHost = 3;
- List<Node> hosts = tester.createHostNodes(numberOfHosts);
- for (int i = 0; i < hosts.size(); i++) {
- tester.createReadyNodes(nodesPerHost, i * nodesPerHost, Optional.of("parent" + (i + 1)),
- new NodeResources(1, 4, 100, 0.3), NodeType.tenant);
- }
+ tester.tester.makeReadyNodes(numberOfHosts, new NodeResources(4, 16, 400, 10), NodeType.host, 8);
// Create applications
ClusterSpec clusterNodeAdminApp = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("node-admin")).vespaVersion("6.42").build();
@@ -227,26 +221,11 @@ public class NodeFailTester {
}
public NodeHealthTracker createUpdater() {
- return new NodeHealthTracker(hostLivenessTracker, serviceMonitor, nodeRepository, Duration.ofMinutes(5), metric);
- }
-
- public void allNodesMakeAConfigRequestExcept(Node ... deadNodeArray) {
- allNodesMakeAConfigRequestExcept(List.of(deadNodeArray));
- }
-
- public void allNodesMakeAConfigRequestExcept(List<Node> deadNodes) {
- for (Node node : nodeRepository.nodes().list()) {
- if ( ! deadNodes.contains(node))
- hostLivenessTracker.receivedRequestFrom(node.hostname());
- }
+ return new NodeHealthTracker(serviceMonitor, nodeRepository, Duration.ofMinutes(5), metric);
}
public Clock clock() { return clock; }
- public List<Node> createReadyNodes(int count) {
- return createReadyNodes(count, 0);
- }
-
public List<Node> createReadyNodes(int count, NodeResources resources) {
return createReadyNodes(count, 0, resources);
}
@@ -255,22 +234,10 @@ public class NodeFailTester {
return createReadyNodes(count, 0, Optional.empty(), hostFlavors.getFlavorOrThrow("default"), nodeType);
}
- public List<Node> createReadyNodes(int count, int startIndex) {
- return createReadyNodes(count, startIndex, "default");
- }
-
- public List<Node> createReadyNodes(int count, int startIndex, String flavor) {
- return createReadyNodes(count, startIndex, Optional.empty(), hostFlavors.getFlavorOrThrow(flavor), NodeType.tenant);
- }
-
public List<Node> createReadyNodes(int count, int startIndex, NodeResources resources) {
return createReadyNodes(count, startIndex, Optional.empty(), new Flavor(resources), NodeType.tenant);
}
- private List<Node> createReadyNodes(int count, int startIndex, Optional<String> parentHostname, NodeResources resources, NodeType nodeType) {
- return createReadyNodes(count, startIndex, parentHostname, new Flavor(resources), nodeType);
- }
-
private List<Node> createReadyNodes(int count, int startIndex, Optional<String> parentHostname, Flavor flavor, NodeType nodeType) {
List<Node> nodes = new ArrayList<>(count);
int lastOctetOfPoolAddress = 0;