diff options
author | Jon Bratseth <bratseth@yahoo-inc.com> | 2017-04-28 10:39:06 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@yahoo-inc.com> | 2017-04-28 10:39:06 +0200 |
commit | 97a66e9a0689856a5697d6bda8244f18c97bd8da (patch) | |
tree | ee36590a157556562b7a7998346774cda2da438b /configserver | |
parent | ee3f2092b5e6a91944d36d17f8ed8fa5242e91aa (diff) |
Propagate OutOfCapacity from config web service
Diffstat (limited to 'configserver')
5 files changed, 22 insertions, 15 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/HttpErrorResponse.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/HttpErrorResponse.java index 3574336174f..76c252587ee 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/HttpErrorResponse.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/HttpErrorResponse.java @@ -18,6 +18,7 @@ import static com.yahoo.jdisc.Response.Status.*; * @since 5.1 */ public class HttpErrorResponse extends HttpResponse { + private static final Logger log = Logger.getLogger(HttpErrorResponse.class.getName()); private final Slime slime = new Slime(); @@ -88,4 +89,5 @@ public class HttpErrorResponse extends HttpResponse { public String getContentType() { return HttpConfigResponse.JSON_CONTENT_TYPE; } + } diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/HttpHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/HttpHandler.java index c379e24854f..ef078ae2c55 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/HttpHandler.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/HttpHandler.java @@ -49,10 +49,10 @@ public class HttpHandler extends LoggingRequestHandler { return HttpErrorResponse.notFoundError(getMessage(e, request)); } catch (BadRequestException | IllegalArgumentException | IllegalStateException e) { return HttpErrorResponse.badRequest(getMessage(e, request)); - } catch (InvalidApplicationException e) { - return HttpErrorResponse.invalidApplicationPackage(getMessage(e, request)); } catch (OutOfCapacityException e) { return HttpErrorResponse.outOfCapacity(getMessage(e, request)); + } catch (InvalidApplicationException e) { + return HttpErrorResponse.invalidApplicationPackage(getMessage(e, request)); } catch (InternalServerException e) { return HttpErrorResponse.internalServerError(getMessage(e, request)); } catch (UnknownVespaVersionException e) { @@ -62,7 +62,7 @@ public class HttpHandler extends LoggingRequestHandler { } catch (ApplicationLockException e) { return HttpErrorResponse.applicationLockFailure(getMessage(e, request)); } catch (Exception e) { - e.printStackTrace(); + log.log(LogLevel.WARNING, "Unexpected exception handling a config server request", e); return HttpErrorResponse.internalServerError(getMessage(e, request)); } } @@ -75,16 +75,14 @@ public class HttpHandler extends LoggingRequestHandler { } private String getMessage(Exception e, HttpRequest request) { - String message; if (request.getBooleanProperty("debug")) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); e.printStackTrace(pw); - message = sw.toString(); + return sw.toString(); } else { - message = Exceptions.toMessageString(e); + return Exceptions.toMessageString(e); } - return message; } /** diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/InvalidApplicationException.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/InvalidApplicationException.java index 9fec1b0af99..3fa897159e9 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/InvalidApplicationException.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/InvalidApplicationException.java @@ -13,4 +13,5 @@ public class InvalidApplicationException extends RuntimeException { public InvalidApplicationException(String message, Throwable e) { super(message, e); } + } diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ModelsBuilder.java b/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ModelsBuilder.java index f2b78e9e0dd..4bf1db64f84 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ModelsBuilder.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ModelsBuilder.java @@ -6,6 +6,7 @@ import com.yahoo.config.application.api.ApplicationPackage; import com.yahoo.config.model.api.ModelContext; import com.yahoo.config.model.api.ModelFactory; import com.yahoo.config.provision.ApplicationId; +import com.yahoo.config.provision.OutOfCapacityException; import com.yahoo.config.provision.Rotation; import com.yahoo.config.provision.Version; import com.yahoo.config.provision.Zone; @@ -57,22 +58,25 @@ public abstract class ModelsBuilder<MODELRESULT extends ModelResult> { .distinct() .sorted(Comparator.reverseOrder()) .collect(Collectors.toList()); + List<MODELRESULT> allApplicationModels = new ArrayList<>(); for (int i = 0; i < majorVersions.size(); i++) { try { allApplicationModels.addAll(buildModelVersion(filterByMajorVersion(majorVersions.get(i), versions), applicationId, wantedNodeVespaVersion, applicationPackage)); - // skip old config models after we have found a major version which works - if (allApplicationModels.size() > 0 && allApplicationModels.get(0).getModel().skipOldConfigModels()) - break; + // skip old config models if requested after we have found a major version which works + if (allApplicationModels.size() > 0 && allApplicationModels.get(0).getModel().skipOldConfigModels()) + break; + } + catch (OutOfCapacityException e) { + // Don't wrap this exception, and don't try to load other model versions as this is (most likely) + // caused by the state of the system, not the model version/application combination + throw e; } - catch (RuntimeException e) { // TODO: Make this a specialized exception + catch (RuntimeException e) { boolean isOldestMajor = i == majorVersions.size() - 1; if (isOldestMajor) { - if (e instanceof NoSuchElementException && "No value present".equals(e.getMessage())) { - e.printStackTrace(); - } throw new IllegalArgumentException(applicationId + ": Error loading model", e); } else { log.log(Level.INFO, applicationId + ": Skipping major version " + majorVersions.get(i), e); diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java index cd10b031a93..96c0f912fd4 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java @@ -92,13 +92,15 @@ public class SessionPreparer { try { prep.buildModels(); prep.makeResult(); - if ( ! params.isDryRun()) { + if (!params.isDryRun()) { prep.writeStateZK(); prep.writeRotZK(); prep.distribute(); prep.reloadDeployFileDistributor(); } return prep.result(); + } catch (OutOfCapacityException e) { + throw e; } catch (IllegalArgumentException e) { throw new InvalidApplicationException("Invalid application package", e); } |