aboutsummaryrefslogtreecommitdiffstats
path: root/configserver
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2017-04-28 10:39:06 +0200
committerJon Bratseth <bratseth@yahoo-inc.com>2017-04-28 10:39:06 +0200
commit97a66e9a0689856a5697d6bda8244f18c97bd8da (patch)
treeee36590a157556562b7a7998346774cda2da438b /configserver
parentee3f2092b5e6a91944d36d17f8ed8fa5242e91aa (diff)
Propagate OutOfCapacity from config web service
Diffstat (limited to 'configserver')
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/HttpErrorResponse.java2
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/HttpHandler.java12
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/InvalidApplicationException.java1
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ModelsBuilder.java18
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java4
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);
}