summaryrefslogtreecommitdiffstats
path: root/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunner.java
diff options
context:
space:
mode:
Diffstat (limited to 'controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunner.java')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunner.java36
1 files changed, 33 insertions, 3 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunner.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunner.java
index a1566a1b5a1..3b6a03a76c9 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunner.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunner.java
@@ -66,7 +66,6 @@ import java.time.Instant;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
-import java.util.Locale;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
@@ -89,12 +88,15 @@ import static com.yahoo.vespa.hosted.controller.deployment.RunStatus.installatio
import static com.yahoo.vespa.hosted.controller.deployment.RunStatus.outOfCapacity;
import static com.yahoo.vespa.hosted.controller.deployment.RunStatus.running;
import static com.yahoo.vespa.hosted.controller.deployment.RunStatus.testFailure;
+import static com.yahoo.vespa.hosted.controller.deployment.Step.Status.succeeded;
+import static com.yahoo.vespa.hosted.controller.deployment.Step.copyVespaLogs;
import static com.yahoo.vespa.hosted.controller.deployment.Step.deactivateReal;
import static com.yahoo.vespa.hosted.controller.deployment.Step.deactivateTester;
import static com.yahoo.vespa.hosted.controller.deployment.Step.deployInitialReal;
import static com.yahoo.vespa.hosted.controller.deployment.Step.deployReal;
import static com.yahoo.vespa.hosted.controller.deployment.Step.deployTester;
import static com.yahoo.vespa.hosted.controller.deployment.Step.installTester;
+import static com.yahoo.vespa.hosted.controller.deployment.Step.report;
import static java.nio.charset.StandardCharsets.UTF_8;
import static java.util.Objects.requireNonNull;
import static java.util.logging.Level.INFO;
@@ -188,11 +190,20 @@ public class InternalStepRunner implements StepRunner {
}
private Optional<RunStatus> deployReal(RunId id, boolean setTheStage, DualLogger logger) {
+ Optional<X509Certificate> testerCertificate = controller.jobController().run(id).get().testerCertificate();
return deploy(() -> controller.applications().deploy(id.job(), setTheStage),
controller.jobController().run(id).get()
.stepInfo(setTheStage ? deployInitialReal : deployReal).get()
.startTime().get(),
- logger);
+ logger)
+ .filter(result -> {
+ // If no tester cert, or deployment failed, propagate original result.
+ if (testerCertificate.isEmpty() || result != running)
+ return true;
+ // If tester cert, ensure real is deployed with the tester cert whose key was successfully deployed.
+ return controller.jobController().run(id).get().stepStatus(deployTester).get() == succeeded
+ && testerCertificate.equals(controller.jobController().run(id).get().testerCertificate());
+ });
}
private Optional<RunStatus> deployTester(RunId id, DualLogger logger) {
@@ -249,7 +260,7 @@ public class InternalStepRunner implements StepRunner {
case OUT_OF_CAPACITY:
logger.log(e.message());
return controller.system().isCd() && startTime.plus(timeouts.capacity()).isAfter(controller.clock().instant())
- ? Optional.empty()
+ ? result
: Optional.of(outOfCapacity);
case INVALID_APPLICATION_PACKAGE:
case BAD_REQUEST:
@@ -636,6 +647,19 @@ public class InternalStepRunner implements StepRunner {
try {
controller.jobController().updateVespaLog(id);
}
+ // Hitting a config server which doesn't have this particular app loaded causes a 404.
+ catch (ConfigServerException e) {
+ Instant doom = controller.jobController().run(id).get().stepInfo(copyVespaLogs).get().startTime().get()
+ .plus(Duration.ofMinutes(3));
+ if (e.code() == ConfigServerException.ErrorCode.NOT_FOUND && controller.clock().instant().isBefore(doom)) {
+ logger.log(INFO, "Found no logs, but will retry");
+ return Optional.empty();
+ }
+ else {
+ logger.log(INFO, "Failure getting vespa logs for " + id, e);
+ return Optional.of(error);
+ }
+ }
catch (Exception e) {
logger.log(INFO, "Failure getting vespa logs for " + id, e);
return Optional.of(error);
@@ -685,6 +709,12 @@ public class InternalStepRunner implements StepRunner {
logger.log(INFO, "Job '" + id.type() + "' no longer supposed to run?", e);
return Optional.of(error);
}
+ catch (RuntimeException e) {
+ Instant start = controller.jobController().run(id).get().stepInfo(report).get().startTime().get();
+ return (controller.clock().instant().isAfter(start.plusSeconds(180)))
+ ? Optional.empty()
+ : Optional.of(error);
+ }
return Optional.of(running);
}