diff options
author | Valerij Fredriksen <freva@users.noreply.github.com> | 2020-07-24 15:25:39 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-07-24 15:25:39 +0200 |
commit | 6104b1ef478b41bb712114ea4e41db0fdba2ba2f (patch) | |
tree | 0240472f8fb70260611adec50a8b9108446883c0 | |
parent | e182d8f6c4e086109f6d64e377fa15477c8407d0 (diff) | |
parent | b2f2c99b2088f5f0e685c02227ba6a8bfa63cbb6 (diff) |
Merge pull request #13941 from vespa-engine/mpolden/log-lb-transition
Log load balancer state transition
2 files changed, 18 insertions, 9 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerId.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerId.java index 1431f21de47..3630cf4c1e4 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerId.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerId.java @@ -50,6 +50,11 @@ public class LoadBalancerId { return Objects.hash(application, cluster); } + @Override + public String toString() { + return "load balancer " + serializedForm; + } + /** Create an instance from a serialized value on the form tenant:application:instance:cluster-id */ public static LoadBalancerId fromSerializedForm(String value) { int lastSeparator = value.lastIndexOf(":"); diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisioner.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisioner.java index 60b280ae2de..6403bbe2b0c 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisioner.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisioner.java @@ -165,33 +165,33 @@ public class LoadBalancerProvisioner { if (loadBalancer.isEmpty() && activate) return; // Nothing to activate as this load balancer was never prepared var force = loadBalancer.isPresent() && loadBalancer.get().state() != LoadBalancer.State.active; - var instance = provisionInstance(application, clusterId, nodes, force); + var instance = provisionInstance(id, nodes, force); LoadBalancer newLoadBalancer; if (loadBalancer.isEmpty()) { newLoadBalancer = new LoadBalancer(id, instance, LoadBalancer.State.reserved, now); } else { var newState = activate ? LoadBalancer.State.active : loadBalancer.get().state(); newLoadBalancer = loadBalancer.get().with(instance).with(newState, now); + if (loadBalancer.get().state() != newLoadBalancer.state()) { + log.log(logLevel(), "Moving " + newLoadBalancer.id() + " to state " + newLoadBalancer.state()); + } } db.writeLoadBalancer(newLoadBalancer); } - private LoadBalancerInstance provisionInstance(ApplicationId application, ClusterSpec.Id cluster, List<Node> nodes, - boolean force) { + private LoadBalancerInstance provisionInstance(LoadBalancerId id, List<Node> nodes, boolean force) { var reals = new LinkedHashSet<Real>(); for (var node : nodes) { for (var ip : reachableIpAddresses(node)) { reals.add(new Real(HostName.from(node.hostname()), ip)); } } - log.log(Level.FINE, "Creating load balancer for " + cluster + " in " + application.toShortString() + - ", targeting: " + reals); + log.log(logLevel(), "Creating " + id + ", targeting: " + reals); try { - return service.create(new LoadBalancerSpec(application, cluster, reals), force); + return service.create(new LoadBalancerSpec(id.application(), id.cluster(), reals), force); } catch (Exception e) { - throw new LoadBalancerServiceException("Failed to (re)configure load balancer for " + cluster + " in " + - application + ", targeting: " + reals + ". The operation will be " + - "retried on next deployment", e); + throw new LoadBalancerServiceException("Failed to (re)configure " + id + ", targeting: " + + reals + ". The operation will be retried on next deployment", e); } } @@ -233,4 +233,8 @@ public class LoadBalancerProvisioner { return cluster.combinedId().orElse(cluster.id()); } + private Level logLevel() { + return nodeRepository.zone().system().isCd() ? Level.INFO : Level.FINE; + } + } |