summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2020-09-24 21:35:56 +0200
committerGitHub <noreply@github.com>2020-09-24 21:35:56 +0200
commit89c10e4c4f314b3dcf7231f861aebd31e353cfcd (patch)
tree329ab605bf9172192db9adb84ef2ad7059bba853
parent1b52adf3d915d8bb6ffbac2b6f5fbd58bbfd18ba (diff)
parent8309eba80f9e2869e2d095588b0f0e2c1e930f82 (diff)
Merge pull request #14541 from vespa-engine/freva/log-restarts
Log internal restarts
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java17
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/deploy/DeployHandlerLogger.java33
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/ContentHandler.java3
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionContentListResponse.java13
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionContentStatusListResponse.java16
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionContentStatusResponse.java36
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionHandler.java11
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionResponse.java46
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ListTenantsResponse.java13
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/PrepareResult.java12
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionActiveResponse.java9
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionCreateHandler.java21
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionCreateResponse.java26
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareAndActivateResponse.java12
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandler.java2
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareResponse.java23
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/TenantCreateResponse.java13
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/TenantDeleteResponse.java13
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/TenantGetResponse.java13
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployHandlerLoggerTest.java10
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/TenantHandlerTest.java5
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java5
-rw-r--r--container-core/src/main/java/com/yahoo/restapi/SlimeJsonResponse.java6
23 files changed, 116 insertions, 242 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java b/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java
index fb981eb1c67..bd704611bcb 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java
@@ -24,7 +24,6 @@ import com.yahoo.docproc.jdisc.metric.NullMetric;
import com.yahoo.io.IOUtils;
import com.yahoo.jdisc.Metric;
import com.yahoo.path.Path;
-import com.yahoo.slime.Slime;
import com.yahoo.transaction.NestedTransaction;
import com.yahoo.transaction.Transaction;
import com.yahoo.vespa.config.server.application.Application;
@@ -285,15 +284,14 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye
LocalSession session = getLocalSession(tenant, sessionId);
ApplicationId applicationId = prepareParams.getApplicationId();
Optional<ApplicationSet> currentActiveApplicationSet = getCurrentActiveApplicationSet(tenant, applicationId);
- Slime deployLog = createDeployLog();
- DeployLogger logger = new DeployHandlerLogger(deployLog.get().setArray("log"), prepareParams.isVerbose(), applicationId);
+ DeployHandlerLogger logger = DeployHandlerLogger.forApplication(applicationId, prepareParams.isVerbose());
try (ActionTimer timer = timerFor(applicationId, "deployment.prepareMillis")) {
SessionRepository sessionRepository = tenant.getSessionRepository();
ConfigChangeActions actions = sessionRepository.prepareLocalSession(session, logger, prepareParams,
currentActiveApplicationSet, tenant.getPath(), now);
logConfigChangeActions(actions, logger);
log.log(Level.INFO, TenantRepository.logPre(applicationId) + "Session " + sessionId + " prepared successfully. ");
- return new PrepareResult(sessionId, actions, deployLog);
+ return new PrepareResult(sessionId, actions, logger);
}
}
@@ -329,8 +327,11 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye
.collect(Collectors.toUnmodifiableSet());
hostProvisioner.get().restart(applicationId, HostFilter.from(hostnames, Set.of(), Set.of(), Set.of()));
+ result.deployLogger().log(Level.INFO, String.format("Scheduled service restart of %d nodes: %s",
+ hostnames.size(), hostnames.stream().sorted().collect(Collectors.joining(", "))));
+
ConfigChangeActions newActions = new ConfigChangeActions(new RestartActions(), result.configChangeActions().getRefeedActions());
- return new PrepareResult(result.sessionId(), newActions, result.deployLog());
+ return new PrepareResult(result.sessionId(), newActions, result.deployLogger());
}
return result;
@@ -1072,12 +1073,6 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye
.getPort();
}
- public Slime createDeployLog() {
- Slime deployLog = new Slime();
- deployLog.setObject();
- return deployLog;
- }
-
public Zone zone() {
return new Zone(SystemName.from(configserverConfig.system()),
Environment.from(configserverConfig.environment()),
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/DeployHandlerLogger.java b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/DeployHandlerLogger.java
index c33c5ff9f57..b6cd22d78b4 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/DeployHandlerLogger.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/DeployHandlerLogger.java
@@ -4,6 +4,7 @@ package com.yahoo.vespa.config.server.deploy;
import com.yahoo.config.application.api.DeployLogger;
import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.config.provision.TenantName;
import com.yahoo.log.LogLevel;
import com.yahoo.slime.Cursor;
import com.yahoo.slime.Slime;
@@ -22,25 +23,24 @@ public class DeployHandlerLogger implements DeployLogger {
private static final Logger log = Logger.getLogger(DeployHandlerLogger.class.getName());
- private final Cursor logroot;
+ private final String prefix;
private final boolean verbose;
- private final ApplicationId app;
+ private final Slime slime;
+ private final Cursor logroot;
- public DeployHandlerLogger(Cursor root, boolean verbose, ApplicationId app) {
- logroot = root;
+ private DeployHandlerLogger(String prefix, boolean verbose) {
+ this.prefix = prefix;
this.verbose = verbose;
- this.app = app;
+ this.slime = new Slime();
+ this.logroot = slime.setObject().setArray("log");
}
@Override
public void log(Level level, String message) {
- if ((level == Level.FINE ||
- level == LogLevel.DEBUG ||
- level == LogLevel.SPAM) &&
- !verbose) {
+ if ((level == Level.FINE || level == LogLevel.DEBUG || level == LogLevel.SPAM) && !verbose)
return;
- }
- String fullMsg = TenantRepository.logPre(app) + message;
+
+ String fullMsg = prefix + message;
Cursor entry = logroot.addObject();
entry.setLong("time", System.currentTimeMillis());
entry.setString("level", level.getName());
@@ -49,4 +49,15 @@ public class DeployHandlerLogger implements DeployLogger {
log.log(Level.FINE, fullMsg);
}
+ public Slime slime() {
+ return slime;
+ }
+
+ public static DeployHandlerLogger forApplication(ApplicationId app, boolean verbose) {
+ return new DeployHandlerLogger(TenantRepository.logPre(app), verbose);
+ }
+
+ public static DeployHandlerLogger forTenant(TenantName tenantName, boolean verbose) {
+ return new DeployHandlerLogger(TenantRepository.logPre(tenantName), verbose);
+ }
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/ContentHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/ContentHandler.java
index 7112c7d3e23..bbbc8764122 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/ContentHandler.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/ContentHandler.java
@@ -3,6 +3,7 @@ package com.yahoo.vespa.config.server.http;
import com.yahoo.config.application.api.ApplicationFile;
import com.yahoo.container.jdisc.HttpResponse;
+import com.yahoo.restapi.SlimeJsonResponse;
import com.yahoo.slime.Cursor;
import com.yahoo.slime.Slime;
@@ -102,6 +103,6 @@ public class ContentHandler {
Slime slime = new Slime();
Cursor root = slime.setObject();
root.setString("prepared", request.getUrlBase("/prepared"));
- return new SessionResponse(slime, root);
+ return new SlimeJsonResponse(slime);
}
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionContentListResponse.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionContentListResponse.java
index f761f5f6b6e..57095772b26 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionContentListResponse.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionContentListResponse.java
@@ -2,12 +2,9 @@
package com.yahoo.vespa.config.server.http;
import com.yahoo.config.application.api.ApplicationFile;
+import com.yahoo.restapi.SlimeJsonResponse;
import com.yahoo.slime.Cursor;
-import com.yahoo.slime.JsonFormat;
-import com.yahoo.slime.Slime;
-import java.io.IOException;
-import java.io.OutputStream;
import java.util.List;
/**
@@ -16,19 +13,13 @@ import java.util.List;
* @author Ulf Lilleengen
* @since 5.1
*/
-class SessionContentListResponse extends SessionResponse {
- private final Slime slime = new Slime();
+class SessionContentListResponse extends SlimeJsonResponse {
public SessionContentListResponse(String urlBase, List<ApplicationFile> files) {
- super();
Cursor array = slime.setArray();
for (ApplicationFile file : files) {
array.addString(urlBase + file.getPath() + (file.isDirectory() ? "/" : ""));
}
}
- @Override
- public void render(OutputStream outputStream) throws IOException {
- new JsonFormat(true).encode(outputStream, slime);
- }
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionContentStatusListResponse.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionContentStatusListResponse.java
index 075b4bc329b..08cda869111 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionContentStatusListResponse.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionContentStatusListResponse.java
@@ -3,12 +3,10 @@ package com.yahoo.vespa.config.server.http;
import com.yahoo.config.application.api.ApplicationFile;
import java.util.logging.Level;
+
+import com.yahoo.restapi.SlimeJsonResponse;
import com.yahoo.slime.Cursor;
-import com.yahoo.slime.JsonFormat;
-import com.yahoo.slime.Slime;
-import java.io.IOException;
-import java.io.OutputStream;
import java.util.*;
/**
@@ -16,14 +14,11 @@ import java.util.*;
*
* @author hmusum
*/
-class SessionContentStatusListResponse extends SessionResponse {
+class SessionContentStatusListResponse extends SlimeJsonResponse {
private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger("SessionContentStatusListResponse");
- private final Slime slime = new Slime();
-
public SessionContentStatusListResponse(String urlBase, List<ApplicationFile> files) {
- super();
Cursor array = slime.setArray();
for (ApplicationFile f : files) {
Cursor element = array.addObject();
@@ -34,9 +29,4 @@ class SessionContentStatusListResponse extends SessionResponse {
}
}
- @Override
- public void render(OutputStream outputStream) throws IOException {
- new JsonFormat(true).encode(outputStream, slime);
- }
-
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionContentStatusResponse.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionContentStatusResponse.java
index bd182093e99..e6909e32985 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionContentStatusResponse.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionContentStatusResponse.java
@@ -1,28 +1,19 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.config.server.http;
-import com.fasterxml.jackson.databind.ObjectMapper;
import com.yahoo.config.application.api.ApplicationFile;
+import com.yahoo.restapi.SlimeJsonResponse;
+import com.yahoo.slime.Cursor;
-import java.io.*;
/**
* Represents a response for a request to show the status and md5sum of a file in the application package.
*
* @author hmusum
*/
-public class SessionContentStatusResponse extends SessionResponse {
-
- private final ApplicationFile file;
- private final String urlBase;
- private final ApplicationFile.MetaData metaData;
- private final ObjectMapper mapper = new ObjectMapper();
+public class SessionContentStatusResponse extends SlimeJsonResponse {
public SessionContentStatusResponse(ApplicationFile file, String urlBase) {
- super();
- this.file = file;
- this.urlBase = urlBase;
-
ApplicationFile.MetaData metaData;
if (file == null) {
metaData = new ApplicationFile.MetaData(ApplicationFile.ContentStatusDeleted, "");
@@ -32,24 +23,11 @@ public class SessionContentStatusResponse extends SessionResponse {
if (metaData == null) {
throw new IllegalArgumentException("Could not find status for '" + file.getPath() + "'");
}
- this.metaData = metaData;
- }
- @Override
- public void render(OutputStream outputStream) throws IOException {
- mapper.writeValue(outputStream, new ResponseData(metaData.status, metaData.md5, urlBase + file.getPath()));
- }
-
- private static class ResponseData {
- public final String status;
- public final String md5;
- public final String name;
-
- private ResponseData(String status, String md5, String name) {
- this.status = status;
- this.md5 = md5;
- this.name = name;
- }
+ Cursor element = slime.setObject();
+ element.setString("status", metaData.getStatus());
+ element.setString("md5", metaData.getMd5());
+ element.setString("name", urlBase + file.getPath());
}
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionHandler.java
index 59d12e037e9..fcac023eec3 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionHandler.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionHandler.java
@@ -1,12 +1,9 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.config.server.http;
-import com.yahoo.config.provision.ApplicationId;
import com.yahoo.container.jdisc.HttpRequest;
import com.yahoo.jdisc.application.BindingMatch;
-import com.yahoo.slime.Slime;
import com.yahoo.vespa.config.server.ApplicationRepository;
-import com.yahoo.vespa.config.server.deploy.DeployHandlerLogger;
import com.yahoo.vespa.config.server.TimeoutBudget;
import java.time.Clock;
@@ -67,14 +64,6 @@ public class SessionHandler extends HttpHandler {
return new TimeoutBudget(Clock.systemUTC(), getRequestTimeout(request, defaultTimeout));
}
- public static DeployHandlerLogger createLogger(Slime deployLog, HttpRequest request, ApplicationId app) {
- return createLogger(deployLog, request.getBooleanProperty("verbose"), app);
- }
-
- public static DeployHandlerLogger createLogger(Slime deployLog, boolean verbose, ApplicationId app) {
- return new DeployHandlerLogger(deployLog.get().setArray("log"), verbose, app);
- }
-
/**
* True if this request should ignore activation failure because the session was made from an active session that is not active now
* @param request a {@link com.yahoo.container.jdisc.HttpRequest}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionResponse.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionResponse.java
deleted file mode 100644
index ad658e3848a..00000000000
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionResponse.java
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.config.server.http;
-
-import com.yahoo.container.jdisc.HttpResponse;
-import com.yahoo.slime.Cursor;
-import com.yahoo.slime.JsonFormat;
-import com.yahoo.slime.Slime;
-
-import java.io.IOException;
-import java.io.OutputStream;
-
-import static com.yahoo.jdisc.http.HttpResponse.Status.OK;
-
-/**
- * Superclass for responses from session HTTP handlers. Implements the
- * render method.
- *
- * @author hmusum
- * @since 5.1.14
- */
-public class SessionResponse extends HttpResponse {
- private final Slime slime;
- protected final Cursor root;
-
- public SessionResponse() {
- super(OK);
- slime = new Slime();
- root = slime.setObject();
- }
-
- public SessionResponse(Slime slime, Cursor root) {
- super(OK);
- this.slime = slime;
- this.root = root;
- }
-
- @Override
- public void render(OutputStream outputStream) throws IOException {
- new JsonFormat(true).encode(outputStream, slime);
- }
-
- @Override
- public String getContentType() {
- return HttpConfigResponse.JSON_CONTENT_TYPE;
- }
-}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ListTenantsResponse.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ListTenantsResponse.java
index 95a71881b47..3789939429c 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ListTenantsResponse.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ListTenantsResponse.java
@@ -3,26 +3,19 @@ package com.yahoo.vespa.config.server.http.v2;
import com.google.common.collect.ImmutableSet;
import com.yahoo.config.provision.TenantName;
+import com.yahoo.restapi.SlimeJsonResponse;
import com.yahoo.slime.Cursor;
-import com.yahoo.vespa.config.server.http.HttpConfigResponse;
-import com.yahoo.vespa.config.server.http.SessionResponse;
/**
* Tenant list response
*
* @author vegardh
*/
-public class ListTenantsResponse extends SessionResponse {
+public class ListTenantsResponse extends SlimeJsonResponse {
ListTenantsResponse(ImmutableSet<TenantName> tenants) {
- super();
- Cursor tenantArray = this.root.setArray("tenants");
+ Cursor tenantArray = slime.setObject().setArray("tenants");
tenants.forEach(tenantName -> tenantArray.addString(tenantName.value()));
}
- @Override
- public String getContentType() {
- return HttpConfigResponse.JSON_CONTENT_TYPE;
- }
-
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/PrepareResult.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/PrepareResult.java
index bb2b57ba45c..24bdfd81f1c 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/PrepareResult.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/PrepareResult.java
@@ -1,8 +1,8 @@
// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.config.server.http.v2;
-import com.yahoo.slime.Slime;
import com.yahoo.vespa.config.server.configchange.ConfigChangeActions;
+import com.yahoo.vespa.config.server.deploy.DeployHandlerLogger;
/**
* Encapsulates the result from preparing an application
@@ -13,12 +13,12 @@ public class PrepareResult {
private final long sessionId;
private final ConfigChangeActions configChangeActions;
- private final Slime deployLog;
+ private final DeployHandlerLogger logger;
- public PrepareResult(long sessionId, ConfigChangeActions configChangeActions, Slime deployLog) {
+ public PrepareResult(long sessionId, ConfigChangeActions configChangeActions, DeployHandlerLogger logger) {
this.sessionId = sessionId;
this.configChangeActions = configChangeActions;
- this.deployLog = deployLog;
+ this.logger = logger;
}
public long sessionId() {
@@ -29,8 +29,8 @@ public class PrepareResult {
return configChangeActions;
}
- public Slime deployLog() {
- return deployLog;
+ public DeployHandlerLogger deployLogger() {
+ return logger;
}
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionActiveResponse.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionActiveResponse.java
index 334dbe88614..9c0fbdf2613 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionActiveResponse.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionActiveResponse.java
@@ -4,16 +4,19 @@ package com.yahoo.vespa.config.server.http.v2;
import com.yahoo.config.provision.TenantName;
import com.yahoo.config.provision.Zone;
import com.yahoo.container.jdisc.HttpRequest;
+import com.yahoo.restapi.SlimeJsonResponse;
+import com.yahoo.slime.Cursor;
import com.yahoo.slime.Slime;
import com.yahoo.config.provision.ApplicationId;
-import com.yahoo.vespa.config.server.http.SessionResponse;
-public class SessionActiveResponse extends SessionResponse {
+public class SessionActiveResponse extends SlimeJsonResponse {
public SessionActiveResponse(Slime metaData, HttpRequest request, ApplicationId applicationId, long sessionId, Zone zone) {
- super(metaData, metaData.get());
+ super(metaData);
TenantName tenantName = applicationId.tenant();
String message = "Session " + sessionId + " for tenant '" + tenantName.value() + "' activated.";
+ Cursor root = metaData.get();
+
root.setString("tenant", tenantName.value());
root.setString("message", message);
root.setString("url", "http://" + request.getHost() + ":" + request.getPort() +
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionCreateHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionCreateHandler.java
index 5aee711b379..b0468f5e608 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionCreateHandler.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionCreateHandler.java
@@ -3,7 +3,6 @@ package com.yahoo.vespa.config.server.http.v2;
import com.google.inject.Inject;
import com.yahoo.cloud.config.ConfigserverConfig;
-import com.yahoo.config.application.api.DeployLogger;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.ApplicationName;
import com.yahoo.config.provision.InstanceName;
@@ -11,7 +10,6 @@ import com.yahoo.config.provision.TenantName;
import com.yahoo.container.jdisc.HttpRequest;
import com.yahoo.container.jdisc.HttpResponse;
import com.yahoo.jdisc.application.UriPattern;
-import com.yahoo.slime.Slime;
import com.yahoo.vespa.config.server.ApplicationRepository;
import com.yahoo.vespa.config.server.deploy.DeployHandlerLogger;
import com.yahoo.vespa.config.server.TimeoutBudget;
@@ -45,22 +43,25 @@ public class SessionCreateHandler extends SessionHandler {
@Override
protected HttpResponse handlePOST(HttpRequest request) {
- Slime deployLog = applicationRepository.createDeployLog();
final TenantName tenantName = Utils.getTenantNameFromSessionRequest(request);
Utils.checkThatTenantExists(applicationRepository.tenantRepository(), tenantName);
TimeoutBudget timeoutBudget = SessionHandler.getTimeoutBudget(request, zookeeperBarrierTimeout);
- DeployLogger logger = createLogger(request, deployLog, tenantName);
+ boolean verbose = request.getBooleanProperty("verbose");
+
+ DeployHandlerLogger logger;
long sessionId;
if (request.hasProperty("from")) {
ApplicationId applicationId = getFromApplicationId(request);
+ logger = DeployHandlerLogger.forApplication(applicationId, verbose);
sessionId = applicationRepository.createSessionFromExisting(applicationId, logger, false, timeoutBudget);
} else {
validateDataAndHeader(request);
+ logger = DeployHandlerLogger.forTenant(tenantName, verbose);
// TODO: Avoid using application id here at all
ApplicationId applicationId = ApplicationId.from(tenantName, ApplicationName.defaultName(), InstanceName.defaultName());
sessionId = applicationRepository.createSession(applicationId, timeoutBudget, request.getData(), request.getHeader(ApplicationApiHandler.contentTypeHeader));
}
- return createResponse(request, tenantName, deployLog, sessionId);
+ return new SessionCreateResponse(logger.slime(), tenantName, request.getHost(), request.getPort(), sessionId);
}
static ApplicationId getFromApplicationId(HttpRequest request) {
@@ -82,11 +83,6 @@ public class SessionCreateHandler extends SessionHandler {
.instanceName(match.group(6)).build();
}
- private static DeployHandlerLogger createLogger(HttpRequest request, Slime deployLog, TenantName tenant) {
- return SessionHandler.createLogger(deployLog, request,
- new ApplicationId.Builder().tenant(tenant).applicationName("-").build());
- }
-
static void validateDataAndHeader(HttpRequest request) {
if (request.getData() == null) {
throw new BadRequestException("Request contains no data");
@@ -99,9 +95,4 @@ public class SessionCreateHandler extends SessionHandler {
ApplicationApiHandler.APPLICATION_X_GZIP + "' and '" + ApplicationApiHandler.APPLICATION_ZIP + "' are supported");
}
}
-
- private HttpResponse createResponse(HttpRequest request, TenantName tenantName, Slime deployLog, long sessionId) {
- return new SessionCreateResponse(tenantName, deployLog, deployLog.get())
- .createResponse(request.getHost(), request.getPort(), sessionId);
- }
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionCreateResponse.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionCreateResponse.java
index 7d08ea94ce6..33c8f54b1f6 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionCreateResponse.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionCreateResponse.java
@@ -2,10 +2,9 @@
package com.yahoo.vespa.config.server.http.v2;
import com.yahoo.config.provision.TenantName;
-import com.yahoo.container.jdisc.HttpResponse;
+import com.yahoo.restapi.SlimeJsonResponse;
import com.yahoo.slime.Cursor;
import com.yahoo.slime.Slime;
-import com.yahoo.vespa.config.server.http.SessionResponse;
/**
* Creates a response for SessionCreateHandler.
@@ -13,22 +12,17 @@ import com.yahoo.vespa.config.server.http.SessionResponse;
* @author hmusum
* @since 5.1.27
*/
-public class SessionCreateResponse extends SessionResponse {
- private final TenantName tenantName;
+public class SessionCreateResponse extends SlimeJsonResponse {
- public SessionCreateResponse(TenantName tenantName, Slime deployLog, Cursor root) {
- super(deployLog, root);
- this.tenantName = tenantName;
- }
-
- public HttpResponse createResponse(String hostName, int port, long sessionId) {
+ public SessionCreateResponse(Slime deployLog, TenantName tenantName, String hostName, int port, long sessionId) {
+ super(deployLog);
String path = "http://" + hostName + ":" + port + "/application/v2/tenant/" + tenantName.value() + "/session/" + sessionId;
+ Cursor root = deployLog.get();
- this.root.setString("tenant", tenantName.value());
- this.root.setString("session-id", Long.toString(sessionId));
- this.root.setString("prepared", path + "/prepared");
- this.root.setString("content", path + "/content/");
- this.root.setString("message", "Session " + sessionId + " for tenant '" + tenantName.value() + "' created.");
- return this;
+ root.setString("tenant", tenantName.value());
+ root.setString("session-id", Long.toString(sessionId));
+ root.setString("prepared", path + "/prepared");
+ root.setString("content", path + "/content/");
+ root.setString("message", "Session " + sessionId + " for tenant '" + tenantName.value() + "' created.");
}
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareAndActivateResponse.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareAndActivateResponse.java
index 7d9a0b11c28..7bace4749a8 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareAndActivateResponse.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareAndActivateResponse.java
@@ -5,21 +5,25 @@ import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.TenantName;
import com.yahoo.config.provision.Zone;
import com.yahoo.container.jdisc.HttpRequest;
+import com.yahoo.restapi.SlimeJsonResponse;
+import com.yahoo.slime.Cursor;
import com.yahoo.vespa.config.server.configchange.ConfigChangeActionsSlimeConverter;
-import com.yahoo.vespa.config.server.http.SessionResponse;
/**
* Creates a response for SessionPrepareHandler.
*
* @author hmusum
*/
-class SessionPrepareAndActivateResponse extends SessionResponse {
+class SessionPrepareAndActivateResponse extends SlimeJsonResponse {
SessionPrepareAndActivateResponse(PrepareResult result, HttpRequest request, ApplicationId applicationId, Zone zone) {
- super(result.deployLog(), result.deployLog().get());
+ super(result.deployLogger().slime());
+
TenantName tenantName = applicationId.tenant();
String message = "Session " + result.sessionId() + " for tenant '" + tenantName.value() + "' prepared and activated.";
- this.root.setString("tenant", tenantName.value());
+ Cursor root = slime.get();
+
+ root.setString("tenant", tenantName.value());
root.setString("url", "http://" + request.getHost() + ":" + request.getPort() +
"/application/v2/tenant/" + tenantName +
"/application/" + applicationId.application().value() +
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandler.java
index c0789a9c828..4cb07e37f28 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandler.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandler.java
@@ -51,7 +51,7 @@ public class SessionPrepareHandler extends SessionHandler {
long sessionId = getSessionIdV2(request);
applicationRepository.validateThatSessionIsNotActive(tenant, sessionId);
applicationRepository.validateThatSessionIsPrepared(tenant, sessionId);
- return new SessionPrepareResponse(applicationRepository.createDeployLog(), tenant.getName(), request, sessionId);
+ return new SessionPrepareResponse(tenant.getName(), request, sessionId);
}
@Override
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareResponse.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareResponse.java
index 6d2aa426036..a97cd37d3b4 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareResponse.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareResponse.java
@@ -3,33 +3,36 @@ package com.yahoo.vespa.config.server.http.v2;
import com.yahoo.config.provision.TenantName;
import com.yahoo.container.jdisc.HttpRequest;
+import com.yahoo.restapi.SlimeJsonResponse;
+import com.yahoo.slime.Cursor;
import com.yahoo.slime.Slime;
+import com.yahoo.slime.Type;
import com.yahoo.vespa.config.server.configchange.ConfigChangeActions;
import com.yahoo.vespa.config.server.configchange.ConfigChangeActionsSlimeConverter;
-import com.yahoo.vespa.config.server.http.SessionResponse;
/**
* Creates a response for SessionPrepareHandler.
*
* @author hmusum
*/
-class SessionPrepareResponse extends SessionResponse {
+class SessionPrepareResponse extends SlimeJsonResponse {
- SessionPrepareResponse(Slime deployLog, TenantName tenantName, HttpRequest request, long sessionId) {
- this(deployLog, tenantName, request, sessionId, new ConfigChangeActions());
+ SessionPrepareResponse(TenantName tenantName, HttpRequest request, long sessionId) {
+ this(new Slime(), tenantName, request, sessionId, new ConfigChangeActions());
}
SessionPrepareResponse(PrepareResult result, TenantName tenantName, HttpRequest request) {
- this(result.deployLog(), tenantName, request, result.sessionId(), result.configChangeActions());
+ this(result.deployLogger().slime(), tenantName, request, result.sessionId(), result.configChangeActions());
}
private SessionPrepareResponse(Slime deployLog, TenantName tenantName, HttpRequest request, long sessionId, ConfigChangeActions actions) {
- super(deployLog, deployLog.get());
- String message = "Session " + sessionId + " for tenant '" + tenantName.value() + "' prepared.";
- this.root.setString("tenant", tenantName.value());
- this.root.setString("activate", "http://" + request.getHost() + ":" + request.getPort() +
+ super(deployLog);
+
+ Cursor root = deployLog.get().type() != Type.NIX ? deployLog.get() : deployLog.setObject();
+ root.setString("tenant", tenantName.value());
+ root.setString("activate", "http://" + request.getHost() + ":" + request.getPort() +
"/application/v2/tenant/" + tenantName.value() + "/session/" + sessionId + "/active");
- root.setString("message", message);
+ root.setString("message", "Session " + sessionId + " for tenant '" + tenantName.value() + "' prepared.");
new ConfigChangeActionsSlimeConverter(actions).toSlime(root);
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/TenantCreateResponse.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/TenantCreateResponse.java
index 2850698ea87..6ff2b30075d 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/TenantCreateResponse.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/TenantCreateResponse.java
@@ -2,8 +2,7 @@
package com.yahoo.vespa.config.server.http.v2;
import com.yahoo.config.provision.TenantName;
-import com.yahoo.vespa.config.server.http.HttpConfigResponse;
-import com.yahoo.vespa.config.server.http.SessionResponse;
+import com.yahoo.restapi.MessageResponse;
/**
* Response for tenant create
@@ -11,16 +10,10 @@ import com.yahoo.vespa.config.server.http.SessionResponse;
* @author vegardh
*
*/
-public class TenantCreateResponse extends SessionResponse {
+public class TenantCreateResponse extends MessageResponse {
public TenantCreateResponse(TenantName tenant) {
- super();
- this.root.setString("message", "Tenant "+tenant+" created.");
- }
-
- @Override
- public String getContentType() {
- return HttpConfigResponse.JSON_CONTENT_TYPE;
+ super("Tenant " + tenant + " created.");
}
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/TenantDeleteResponse.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/TenantDeleteResponse.java
index 3ba61f84270..d21584c8cdc 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/TenantDeleteResponse.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/TenantDeleteResponse.java
@@ -1,8 +1,7 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.config.server.http.v2;
import com.yahoo.config.provision.TenantName;
-import com.yahoo.vespa.config.server.http.HttpConfigResponse;
-import com.yahoo.vespa.config.server.http.SessionResponse;
+import com.yahoo.restapi.MessageResponse;
/**
* Response for tenant delete
@@ -10,16 +9,10 @@ import com.yahoo.vespa.config.server.http.SessionResponse;
* @author vegardh
*
*/
-public class TenantDeleteResponse extends SessionResponse {
+public class TenantDeleteResponse extends MessageResponse {
public TenantDeleteResponse(TenantName tenant) {
- super();
- this.root.setString("message", "Tenant "+tenant+" deleted.");
- }
-
- @Override
- public String getContentType() {
- return HttpConfigResponse.JSON_CONTENT_TYPE;
+ super("Tenant " + tenant + " deleted.");
}
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/TenantGetResponse.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/TenantGetResponse.java
index 183fcd9b3c1..b918cab7828 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/TenantGetResponse.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/TenantGetResponse.java
@@ -2,24 +2,17 @@
package com.yahoo.vespa.config.server.http.v2;
import com.yahoo.config.provision.TenantName;
-import com.yahoo.vespa.config.server.http.HttpConfigResponse;
-import com.yahoo.vespa.config.server.http.SessionResponse;
+import com.yahoo.restapi.MessageResponse;
/**
* Response for tenant create
*
* @author hmusum
*/
-public class TenantGetResponse extends SessionResponse {
+public class TenantGetResponse extends MessageResponse {
public TenantGetResponse(TenantName tenant) {
- super();
- this.root.setString("message", "Tenant '" + tenant + "' exists.");
- }
-
- @Override
- public String getContentType() {
- return HttpConfigResponse.JSON_CONTENT_TYPE;
+ super("Tenant '" + tenant + "' exists.");
}
}
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployHandlerLoggerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployHandlerLoggerTest.java
index 6aa72e3e672..3ac9e681604 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployHandlerLoggerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployHandlerLoggerTest.java
@@ -6,9 +6,7 @@ import com.yahoo.config.provision.ApplicationId;
import java.util.logging.Level;
import com.yahoo.log.LogLevel;
-import com.yahoo.slime.Cursor;
import com.yahoo.slime.JsonFormat;
-import com.yahoo.slime.Slime;
import org.junit.Test;
@@ -33,13 +31,11 @@ public class DeployHandlerLoggerTest {
}
private void testLogging(boolean verbose, String expectedPattern) throws IOException {
- Slime slime = new Slime();
- Cursor array = slime.setArray();
- DeployLogger logger = new DeployHandlerLogger(array, verbose, new ApplicationId.Builder()
- .tenant("testtenant").applicationName("testapp").build());
+ DeployHandlerLogger logger = DeployHandlerLogger.forApplication(
+ new ApplicationId.Builder().tenant("testtenant").applicationName("testapp").build(), verbose);
logMessages(logger);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
- new JsonFormat(true).encode(baos, slime);
+ new JsonFormat(true).encode(baos, logger.slime());
assertTrue(Pattern.matches(expectedPattern, baos.toString()));
}
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/TenantHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/TenantHandlerTest.java
index e2eeb68a565..748c43bafeb 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/TenantHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/TenantHandlerTest.java
@@ -8,18 +8,17 @@ import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
-import java.time.Clock;
import com.yahoo.cloud.config.ConfigserverConfig;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.ApplicationName;
import com.yahoo.config.provision.InstanceName;
import com.yahoo.config.provision.TenantName;
+import com.yahoo.container.jdisc.HttpResponse;
import com.yahoo.vespa.config.server.ApplicationRepository;
import com.yahoo.vespa.config.server.TestComponentRegistry;
import com.yahoo.vespa.config.server.application.OrchestratorMock;
import com.yahoo.vespa.config.server.http.SessionHandlerTest;
-import com.yahoo.vespa.config.server.http.SessionResponse;
import com.yahoo.vespa.config.server.session.PrepareParams;
import com.yahoo.vespa.config.server.tenant.Tenant;
import com.yahoo.vespa.config.server.tenant.TenantRepository;
@@ -157,7 +156,7 @@ public class TenantHandlerTest {
return (TenantCreateResponse) handler.handlePUT(testRequest);
}
- private void assertResponseEquals(SessionResponse response, String payload) throws IOException {
+ private void assertResponseEquals(HttpResponse response, String payload) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
response.render(baos);
assertEquals(baos.toString(StandardCharsets.UTF_8), payload);
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java
index c1698718ad1..95cdccf4cb8 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java
@@ -28,7 +28,6 @@ import com.yahoo.security.KeyUtils;
import com.yahoo.security.SignatureAlgorithm;
import com.yahoo.security.X509CertificateBuilder;
import com.yahoo.security.X509CertificateUtils;
-import com.yahoo.slime.Slime;
import com.yahoo.transaction.NestedTransaction;
import com.yahoo.vespa.config.server.MockSecretStore;
import com.yahoo.vespa.config.server.TestComponentRegistry;
@@ -388,8 +387,8 @@ public class SessionPreparerTest {
}
private DeployHandlerLogger getLogger() {
- return new DeployHandlerLogger(new Slime().get(), false /*verbose */,
- new ApplicationId.Builder().tenant("testtenant").applicationName("testapp").build());
+ return DeployHandlerLogger.forApplication(
+ new ApplicationId.Builder().tenant("testtenant").applicationName("testapp").build(), false /*verbose */);
}
diff --git a/container-core/src/main/java/com/yahoo/restapi/SlimeJsonResponse.java b/container-core/src/main/java/com/yahoo/restapi/SlimeJsonResponse.java
index 2473da3578d..a0f8b58fb6a 100644
--- a/container-core/src/main/java/com/yahoo/restapi/SlimeJsonResponse.java
+++ b/container-core/src/main/java/com/yahoo/restapi/SlimeJsonResponse.java
@@ -15,7 +15,11 @@ import java.io.OutputStream;
*/
public class SlimeJsonResponse extends HttpResponse {
- private final Slime slime;
+ protected final Slime slime;
+
+ public SlimeJsonResponse() {
+ this(new Slime());
+ }
public SlimeJsonResponse(Slime slime) {
super(200);