diff options
author | Martin Polden <mpolden@mpolden.no> | 2019-06-21 13:42:18 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2019-06-21 13:44:26 +0200 |
commit | 65a5316c0891059ec1dad5ad28f34265cceaaead (patch) | |
tree | dfb493885f5440d2b36bf6745c4cad4cfbefeb7a | |
parent | fe4a0938e061aca61f9308481fa1aa6a5e1b9f92 (diff) |
Use common exception class for transient provisioning exceptions
4 files changed, 46 insertions, 2 deletions
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/ParentHostUnavailableException.java b/config-provisioning/src/main/java/com/yahoo/config/provision/ParentHostUnavailableException.java index 357897df898..f90b67c1525 100644 --- a/config-provisioning/src/main/java/com/yahoo/config/provision/ParentHostUnavailableException.java +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/ParentHostUnavailableException.java @@ -9,7 +9,7 @@ package com.yahoo.config.provision; * @author freva * */ -public class ParentHostUnavailableException extends RuntimeException { +public class ParentHostUnavailableException extends TransientException { public ParentHostUnavailableException(String message) { super(message); diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/TransientException.java b/config-provisioning/src/main/java/com/yahoo/config/provision/TransientException.java new file mode 100644 index 00000000000..bae7407587e --- /dev/null +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/TransientException.java @@ -0,0 +1,20 @@ +// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.config.provision; + +/** + * A provisioning exception that is considered transient. Exceptions that we expect to recover from after a short + * duration should extend this. Throwing a subclass of this indicates that the operation can safely be retried. + * + * @author mpolden + */ +public abstract class TransientException extends RuntimeException { + + public TransientException(String message) { + super(message); + } + + public TransientException(String message, Throwable cause) { + super(message, cause); + } + +} diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerServiceException.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerServiceException.java new file mode 100644 index 00000000000..e5ab519ab94 --- /dev/null +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerServiceException.java @@ -0,0 +1,17 @@ +// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.provision.lb; + +import com.yahoo.config.provision.TransientException; + +/** + * Transient exception thrown on behalf of a {@link LoadBalancerService}. + * + * @author mpolden + */ +public class LoadBalancerServiceException extends TransientException { + + public LoadBalancerServiceException(String message, Throwable cause) { + super(message, cause); + } + +} 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 b74972458de..ca7ee1b13a1 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 @@ -14,6 +14,7 @@ import com.yahoo.vespa.hosted.provision.NodeRepository; import com.yahoo.vespa.hosted.provision.lb.LoadBalancer; import com.yahoo.vespa.hosted.provision.lb.LoadBalancerId; import com.yahoo.vespa.hosted.provision.lb.LoadBalancerInstance; +import com.yahoo.vespa.hosted.provision.lb.LoadBalancerServiceException; import com.yahoo.vespa.hosted.provision.lb.LoadBalancerService; import com.yahoo.vespa.hosted.provision.lb.Real; import com.yahoo.vespa.hosted.provision.node.IP; @@ -126,7 +127,13 @@ public class LoadBalancerProvisioner { }); log.log(LogLevel.INFO, "Creating load balancer for " + cluster + " in " + application.toShortString() + ", targeting: " + nodes); - return service.create(application, cluster, reals); + try { + return service.create(application, cluster, reals); + } catch (Exception e) { + throw new LoadBalancerServiceException("Failed to (re)configure load balancer for " + cluster + " in " + + application + ", targeting: " + nodes + ". The operation will be " + + "retried on next deployment", e); + } } /** Returns a list of active and reserved nodes of type container in given cluster */ |