summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/ParentHostUnavailableException.java2
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/TransientException.java20
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerServiceException.java17
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisioner.java9
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 */