summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Musum <musum@yahoo-inc.com>2016-12-11 10:11:02 +0100
committerGitHub <noreply@github.com>2016-12-11 10:11:02 +0100
commitde5aae2629450ebfd5ae2c50b404749b0d5286b1 (patch)
tree0cae4f96cc0acc3bb130b1eb01a960ef1d0d5c93
parentf0b529841383c7fc24fbb6ed84ab0c1b57a88a9d (diff)
parent21ef211263adaa197da80805318d85f3728b114d (diff)
Merge pull request #1289 from yahoo/hmusum/http-handlers-refactoring-part-5
Move tenant checking out of http layer
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java19
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/Utils.java20
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandler.java28
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ListApplicationsHandler.java5
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandler.java7
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionContentHandler.java26
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionContentRequestV2.java2
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionCreateHandler.java9
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandler.java22
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/TenantHandler.java32
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/tenant/Tenants.java10
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationContentHandlerTest.java1
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java2
13 files changed, 92 insertions, 91 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 91b0fdc207b..f46ed8b0aef 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
@@ -5,6 +5,7 @@ import com.yahoo.config.application.api.DeployLogger;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.HostFilter;
import com.yahoo.config.provision.Provisioner;
+import com.yahoo.config.provision.TenantName;
import com.yahoo.config.provision.Zone;
import com.yahoo.container.jdisc.HttpRequest;
import com.yahoo.container.jdisc.HttpResponse;
@@ -17,6 +18,7 @@ import com.yahoo.vespa.config.server.application.TenantApplications;
import com.yahoo.vespa.config.server.deploy.Deployment;
import com.yahoo.vespa.config.server.http.ContentHandler;
import com.yahoo.vespa.config.server.http.NotFoundException;
+import com.yahoo.vespa.config.server.http.Utils;
import com.yahoo.vespa.config.server.http.v2.ApplicationContentRequest;
import com.yahoo.vespa.config.server.provision.HostProvisionerProvider;
import com.yahoo.vespa.config.server.session.LocalSession;
@@ -33,6 +35,7 @@ import java.io.IOException;
import java.net.URI;
import java.time.Clock;
import java.time.Duration;
+import java.util.List;
import java.util.Optional;
import java.util.logging.Logger;
@@ -195,4 +198,20 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye
hostProvisioner.get().restart(applicationId, hostFilter);
}
+ public Tenant verifyTenantAndApplication(ApplicationId applicationId) {
+ final TenantName tenantName = applicationId.tenant();
+ Utils.checkThatTenantExists(tenants, tenantName);
+ Tenant tenant = tenants.getTenant(tenantName);
+ List<ApplicationId> applicationIds = listApplicationIds(tenant);
+ if (!applicationIds.contains(applicationId)) {
+ throw new IllegalArgumentException("No such application id: " + applicationId);
+ }
+ return tenant;
+ }
+
+ private List<ApplicationId> listApplicationIds(Tenant tenant) {
+ TenantApplications applicationRepo = tenant.getApplicationRepo();
+ return applicationRepo.listApplications();
+ }
+
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/Utils.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/Utils.java
index b21dcf18a0e..28730a08e56 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/Utils.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/Utils.java
@@ -43,30 +43,22 @@ public class Utils {
return request.getUri().getScheme() + "://" + request.getHost() + ":" + request.getPort() + pathPrefix;
}
- public static Tenant checkThatTenantExists(Tenants tenants, TenantName tenant) {
- if (!tenants.tenantsCopy().containsKey(tenant)) {
- throw new NotFoundException("Tenant '" + tenant + "' was not found.");
- }
- return tenants.tenantsCopy().get(tenant);
- }
-
- public static void checkThatTenantDoesNotExist(Tenants tenants, TenantName tenant) {
- if (tenants.tenantsCopy().containsKey(tenant)) {
- throw new BadRequestException("There already exists a tenant '" + tenant + "'");
- }
+ public static void checkThatTenantExists(Tenants tenants, TenantName tenantName) {
+ if ( ! tenants.checkThatTenantExists(tenantName))
+ throw new NotFoundException("Tenant '" + tenantName + "' was not found.");
}
- public static TenantName getTenantFromRequest(HttpRequest request) {
+ public static TenantName getTenantNameFromRequest(HttpRequest request) {
BindingMatch<?> bm = getBindingMatch(request, "http://*/application/v2/tenant/*");
return TenantName.from(bm.group(2));
}
- public static TenantName getTenantFromSessionRequest(HttpRequest request) {
+ public static TenantName getTenantNameFromSessionRequest(HttpRequest request) {
BindingMatch<?> bm = getBindingMatch(request, "http://*/application/v2/tenant/*/session*");
return TenantName.from(bm.group(2));
}
- public static TenantName getTenantFromApplicationsRequest(HttpRequest request) {
+ public static TenantName getTenantNameFromApplicationsRequest(HttpRequest request) {
BindingMatch<?> bm = getBindingMatch(request, "http://*/application/v2/tenant/*/application*");
return TenantName.from(bm.group(2));
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandler.java
index 18a3b8fb207..21e97cf0fa8 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandler.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandler.java
@@ -13,22 +13,18 @@ import com.yahoo.jdisc.Response;
import com.yahoo.jdisc.application.BindingMatch;
import com.yahoo.vespa.config.server.http.HttpConfigResponse;
import com.yahoo.vespa.config.server.tenant.Tenant;
-import com.yahoo.vespa.config.server.tenant.Tenants;
import com.yahoo.vespa.config.server.TimeoutBudget;
-import com.yahoo.vespa.config.server.application.TenantApplications;
import com.yahoo.vespa.config.server.ApplicationRepository;
import com.yahoo.vespa.config.server.http.HttpErrorResponse;
import com.yahoo.vespa.config.server.http.HttpHandler;
import com.yahoo.vespa.config.server.http.JSONResponse;
import com.yahoo.vespa.config.server.http.NotFoundException;
-import com.yahoo.vespa.config.server.http.Utils;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
import java.time.Clock;
import java.time.Duration;
-import java.util.List;
import java.util.concurrent.Executor;
/**
@@ -41,17 +37,15 @@ import java.util.concurrent.Executor;
public class ApplicationHandler extends HttpHandler {
private static final String REQUEST_PROPERTY_TIMEOUT = "timeout";
- private final Tenants tenants;
private final Zone zone;
private final ApplicationRepository applicationRepository;
- public ApplicationHandler(Executor executor, AccessLog accessLog,
- Tenants tenants,
+ public ApplicationHandler(Executor executor,
+ AccessLog accessLog,
Zone zone,
ApplicationRepository applicationRepository) {
super(executor, accessLog);
- this.tenants = tenants;
this.zone = zone;
this.applicationRepository = applicationRepository;
}
@@ -87,7 +81,7 @@ public class ApplicationHandler extends HttpHandler {
}
}
if (isServiceConvergeListRequest(request)) {
- return applicationRepository.listConfigConvergence(tenant, applicationId, request.getUri());
+ return applicationRepository.listConfigConvergence(tenant, applicationId, request.getUri());
}
return new GetApplicationResponse(Response.Status.OK, applicationRepository.getApplicationGeneration(tenant, applicationId));
}
@@ -137,12 +131,11 @@ public class ApplicationHandler extends HttpHandler {
}
private Tenant verifyTenantAndApplication(ApplicationId applicationId) {
- Tenant tenant = Utils.checkThatTenantExists(tenants, applicationId.tenant());
- List<ApplicationId> applicationIds = listApplicationIds(tenant);
- if ( ! applicationIds.contains(applicationId)) {
- throw new NotFoundException("No such application id: " + applicationId);
+ try {
+ return applicationRepository.verifyTenantAndApplication(applicationId);
+ } catch (IllegalArgumentException e) {
+ throw new NotFoundException(e.getMessage());
}
- return tenant;
}
private Duration durationFromRequestTimeout(HttpRequest request) {
@@ -153,12 +146,6 @@ public class ApplicationHandler extends HttpHandler {
return Duration.ofSeconds(timeoutInSeconds);
}
-
- private List<ApplicationId> listApplicationIds(Tenant tenant) {
- TenantApplications applicationRepo = tenant.getApplicationRepo();
- return applicationRepo.listApplications();
- }
-
// Note: Update src/main/resources/configserver-app/services.xml if you do any changes to the bindings
private static BindingMatch<?> getBindingMatch(HttpRequest request) {
return HttpConfigRequests.getBindingMatch(request,
@@ -187,7 +174,6 @@ public class ApplicationHandler extends HttpHandler {
request.getUri().getPath().contains("/serviceconverge/");
}
-
private static boolean isContentRequest(HttpRequest request) {
return getBindingMatch(request).groupCount() > 7;
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ListApplicationsHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ListApplicationsHandler.java
index 8b7c138642a..aaf10db3991 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ListApplicationsHandler.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ListApplicationsHandler.java
@@ -37,7 +37,7 @@ public class ListApplicationsHandler extends HttpHandler {
@Override
public HttpResponse handleGET(HttpRequest request) {
- TenantName tenantName = Utils.getTenantFromApplicationsRequest(request);
+ TenantName tenantName = Utils.getTenantNameFromApplicationsRequest(request);
final String urlBase = Utils.getUrlBase(request, "/application/v2/tenant/" + tenantName + "/application/");
List<ApplicationId> applicationIds = listApplicationIds(tenantName);
@@ -51,7 +51,8 @@ public class ListApplicationsHandler extends HttpHandler {
}
private List<ApplicationId> listApplicationIds(TenantName tenantName) {
- Tenant tenant = Utils.checkThatTenantExists(tenants, tenantName);
+ Utils.checkThatTenantExists(tenants, tenantName);
+ Tenant tenant = tenants.getTenant(tenantName);
TenantApplications applicationRepo = tenant.getApplicationRepo();
return applicationRepo.listApplications();
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandler.java
index a3793237fc6..135ddef4e6a 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandler.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandler.java
@@ -9,7 +9,6 @@ import com.yahoo.config.provision.Zone;
import com.yahoo.container.jdisc.HttpRequest;
import com.yahoo.container.jdisc.HttpResponse;
import com.yahoo.container.logging.AccessLog;
-import com.yahoo.log.LogLevel;
import com.yahoo.vespa.config.server.ApplicationRepository;
import com.yahoo.vespa.config.server.tenant.Tenant;
import com.yahoo.vespa.config.server.tenant.Tenants;
@@ -44,9 +43,9 @@ public class SessionActiveHandler extends SessionActiveHandlerBase {
@Override
protected HttpResponse handlePUT(HttpRequest request) {
TimeoutBudget timeoutBudget = getTimeoutBudget(request, SessionHandler.DEFAULT_ACTIVATE_TIMEOUT);
- TenantName tenantName = Utils.getTenantFromSessionRequest(request);
- log.log(LogLevel.DEBUG, "Found tenant '" + tenantName + "' in request");
- Tenant tenant = Utils.checkThatTenantExists(tenants, tenantName);
+ final TenantName tenantName = Utils.getTenantNameFromSessionRequest(request);
+ Utils.checkThatTenantExists(tenants, tenantName);
+ Tenant tenant = tenants.getTenant(tenantName);
LocalSession localSession = applicationRepository.getLocalSession(tenant, getSessionIdV2(request));
activate(request, tenant.getLocalSessionRepo(), tenant.getActivateLock(), timeoutBudget, localSession);
return new SessionActiveResponse(localSession.getMetaData().getSlime(), tenantName, request, localSession, zone);
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionContentHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionContentHandler.java
index 27ffbfd2d71..7b55fdea11a 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionContentHandler.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionContentHandler.java
@@ -6,16 +6,13 @@ import com.yahoo.config.provision.TenantName;
import com.yahoo.container.jdisc.HttpRequest;
import com.yahoo.container.jdisc.HttpResponse;
import com.yahoo.container.logging.AccessLog;
-import com.yahoo.log.LogLevel;
import com.yahoo.vespa.config.server.ApplicationRepository;
import com.yahoo.vespa.config.server.tenant.Tenant;
import com.yahoo.vespa.config.server.tenant.Tenants;
import com.yahoo.vespa.config.server.http.ContentHandler;
-import com.yahoo.vespa.config.server.http.NotFoundException;
import com.yahoo.vespa.config.server.http.SessionHandler;
import com.yahoo.vespa.config.server.http.Utils;
import com.yahoo.vespa.config.server.session.LocalSession;
-import com.yahoo.vespa.config.server.session.LocalSessionRepo;
import java.util.concurrent.Executor;
@@ -41,28 +38,27 @@ public class SessionContentHandler extends SessionHandler {
@Override
public HttpResponse handleGET(HttpRequest request) {
- TenantName tenantName = Utils.getTenantFromSessionRequest(request);
- log.log(LogLevel.DEBUG, "Found tenant '" + tenantName + "' in request");
- Tenant tenant = Utils.checkThatTenantExists(tenants, tenantName);
- LocalSession session = applicationRepository.getLocalSession(tenant, getSessionIdV2(request));
+ LocalSession session = validateRequestAndGetSession(request);
return contentHandler.get(SessionContentRequestV2.create(request, session));
}
@Override
public HttpResponse handlePUT(HttpRequest request) {
- TenantName tenantName = Utils.getTenantFromSessionRequest(request);
- log.log(LogLevel.DEBUG, "Found tenant '" + tenantName + "' in request");
- Tenant tenant = Utils.checkThatTenantExists(tenants, tenantName);
- LocalSession session = applicationRepository.getLocalSession(tenant, getSessionIdV2(request));
+ LocalSession session = validateRequestAndGetSession(request);
return contentHandler.put(SessionContentRequestV2.create(request, session));
}
@Override
public HttpResponse handleDELETE(HttpRequest request) {
- TenantName tenantName = Utils.getTenantFromSessionRequest(request);
- log.log(LogLevel.DEBUG, "Found tenant '" + tenantName + "' in request");
- Tenant tenant = Utils.checkThatTenantExists(tenants, tenantName);
- LocalSession session = applicationRepository.getLocalSession(tenant, getSessionIdV2(request));
+ LocalSession session = validateRequestAndGetSession(request);
return contentHandler.delete(SessionContentRequestV2.create(request, session));
}
+
+ private LocalSession validateRequestAndGetSession(HttpRequest request) {
+ final TenantName tenantName = Utils.getTenantNameFromSessionRequest(request);
+ Utils.checkThatTenantExists(tenants, tenantName);
+ Tenant tenant = tenants.getTenant(tenantName);
+ return applicationRepository.getLocalSession(tenant, getSessionIdV2(request));
+ }
+
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionContentRequestV2.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionContentRequestV2.java
index 1bdd37dd685..30af00dd4d1 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionContentRequestV2.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionContentRequestV2.java
@@ -27,7 +27,7 @@ class SessionContentRequestV2 extends ContentRequest {
}
static ContentRequest create(HttpRequest request, LocalSession session) {
- return new SessionContentRequestV2(request, session, Utils.getTenantFromSessionRequest(request));
+ return new SessionContentRequestV2(request, session, Utils.getTenantNameFromSessionRequest(request));
}
@Override
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 b7bbe171f9e..e33cf6dcda0 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
@@ -9,7 +9,6 @@ import com.yahoo.container.jdisc.HttpRequest;
import com.yahoo.container.jdisc.HttpResponse;
import com.yahoo.container.logging.AccessLog;
import com.yahoo.jdisc.application.UriPattern;
-import com.yahoo.log.LogLevel;
import com.yahoo.slime.Slime;
import com.yahoo.vespa.config.server.ApplicationRepository;
import com.yahoo.vespa.config.server.tenant.Tenant;
@@ -25,7 +24,6 @@ import com.yahoo.vespa.config.server.session.LocalSession;
import java.net.URI;
import java.time.Duration;
import java.util.concurrent.Executor;
-import java.util.logging.Logger;
/**
* A handler that is able to create a session from an application package,
@@ -36,7 +34,6 @@ import java.util.logging.Logger;
* @since 5.1
*/
public class SessionCreateHandler extends SessionHandler {
- private static final Logger log = Logger.getLogger(SessionCreateHandler.class.getName());
private final Tenants tenants;
private static final String fromPattern = "http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*";
private final ConfigserverConfig configserverConfig;
@@ -55,9 +52,9 @@ public class SessionCreateHandler extends SessionHandler {
@Override
protected HttpResponse handlePOST(HttpRequest request) {
Slime deployLog = createDeployLog();
- TenantName tenantName = Utils.getTenantFromSessionRequest(request);
- log.log(LogLevel.DEBUG, "Found tenant '" + tenantName + "' in request");
- Tenant tenant = Utils.checkThatTenantExists(tenants, tenantName);
+ final TenantName tenantName = Utils.getTenantNameFromSessionRequest(request);
+ Utils.checkThatTenantExists(tenants, tenantName);
+ Tenant tenant = tenants.getTenant(tenantName);
final SessionCreate sessionCreate = new SessionCreate(tenant.getSessionFactory(), tenant.getLocalSessionRepo(),
new SessionCreateResponseV2(tenant, deployLog, deployLog.get()));
TimeoutBudget timeoutBudget = SessionHandler.getTimeoutBudget(request, Duration.ofSeconds(configserverConfig.zookeeper().barrierTimeout()));
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 2da3b07aeb2..9ae2966c425 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
@@ -56,10 +56,10 @@ public class SessionPrepareHandler extends SessionHandler {
@Override
protected HttpResponse handlePUT(HttpRequest request) {
- TenantName tenantName = Utils.getTenantFromSessionRequest(request);
- Tenant tenantContext = Utils.checkThatTenantExists(tenants, tenantName);
+ Tenant tenant = getExistingTenant(request);
+ TenantName tenantName = tenant.getName();
long sessionId = getSessionIdV2(request);
- LocalSession session = applicationRepository.getLocalSession(tenantContext, getSessionIdV2(request));
+ LocalSession session = applicationRepository.getLocalSession(tenant, getSessionIdV2(request));
if (Session.Status.ACTIVATE.equals(session.getStatus())) {
throw new IllegalArgumentException("Session is active: " + sessionId);
}
@@ -72,11 +72,11 @@ public class SessionPrepareHandler extends SessionHandler {
DeployLogger logger = createLogger(rawDeployLog, verbose, appId);
ConfigChangeActions actions = session.prepare(logger,
prepParams,
- getCurrentActiveApplicationSet(tenantContext, appId),
- tenantContext.getPath());
+ getCurrentActiveApplicationSet(tenant, appId),
+ tenant.getPath());
logConfigChangeActions(actions, logger);
log.log(LogLevel.INFO, Tenants.logPre(appId) + "Session " + sessionId + " prepared successfully. ");
- return new SessionPrepareResponse(rawDeployLog, tenantContext, request, session, actions);
+ return new SessionPrepareResponse(rawDeployLog, tenant, request, session, actions);
}
private static void logConfigChangeActions(ConfigChangeActions actions, DeployLogger logger) {
@@ -94,9 +94,7 @@ public class SessionPrepareHandler extends SessionHandler {
@Override
protected HttpResponse handleGET(HttpRequest request) {
- TenantName tenantName = Utils.getTenantFromSessionRequest(request);
- log.log(LogLevel.DEBUG, "Found tenant '" + tenantName + "' in request");
- Tenant tenant = Utils.checkThatTenantExists(tenants, tenantName);
+ Tenant tenant = getExistingTenant(request);
long sessionId = getSessionIdV2(request);
RemoteSession session = applicationRepository.getRemoteSession(tenant, getSessionIdV2(request));
if (Session.Status.ACTIVATE.equals(session.getStatus()))
@@ -120,4 +118,10 @@ public class SessionPrepareHandler extends SessionHandler {
}
return currentActiveApplicationSet;
}
+
+ private Tenant getExistingTenant(HttpRequest request) {
+ TenantName tenantName = Utils.getTenantNameFromSessionRequest(request);
+ Utils.checkThatTenantExists(tenants, tenantName);
+ return tenants.getTenant(tenantName);
+ }
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/TenantHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/TenantHandler.java
index e409181f4c6..04cb9a038c5 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/TenantHandler.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/TenantHandler.java
@@ -35,13 +35,13 @@ public class TenantHandler extends HttpHandler {
@Override
protected HttpResponse handlePUT(HttpRequest request) {
- TenantName tenant = getAndValidateTenantFromRequest(request);
+ TenantName tenantName = getAndValidateTenantFromRequest(request);
try {
- tenants.writeTenantPath(tenant);
+ tenants.writeTenantPath(tenantName);
} catch (Exception e) {
throw new InternalServerException(Exceptions.toMessageString(e));
}
- return new TenantCreateResponse(tenant);
+ return new TenantCreateResponse(tenantName);
}
/**
@@ -51,10 +51,10 @@ public class TenantHandler extends HttpHandler {
* @return tenant name
*/
private TenantName getAndValidateTenantFromRequest(HttpRequest request) {
- TenantName tenant = Utils.getTenantFromRequest(request);
- Utils.checkThatTenantDoesNotExist(tenants, tenant);
- validateTenantName(tenant);
- return tenant;
+ final TenantName tenantName = Utils.getTenantNameFromRequest(request);
+ checkThatTenantDoesNotExist(tenantName);
+ validateTenantName(tenantName);
+ return tenantName;
}
private void validateTenantName(TenantName tenant) {
@@ -65,14 +65,16 @@ public class TenantHandler extends HttpHandler {
@Override
protected HttpResponse handleGET(HttpRequest request) {
- TenantName tenant = getExistingTenant(request);
- return new TenantGetResponse(tenant);
+ final TenantName tenantName = Utils.getTenantNameFromRequest(request);
+ Utils.checkThatTenantExists(tenants, tenantName);
+ return new TenantGetResponse(tenantName);
}
@Override
protected HttpResponse handleDELETE(HttpRequest request) {
- TenantName tenantName = getExistingTenant(request);
- Tenant tenant = Utils.checkThatTenantExists(tenants, tenantName);
+ final TenantName tenantName = Utils.getTenantNameFromRequest(request);
+ Utils.checkThatTenantExists(tenants, tenantName);
+ Tenant tenant = tenants.getTenant(tenantName);
TenantApplications applicationRepo = tenant.getApplicationRepo();
final List<ApplicationId> activeApplications = applicationRepo.listApplications();
if (activeApplications.isEmpty()) {
@@ -88,9 +90,9 @@ public class TenantHandler extends HttpHandler {
return new TenantDeleteResponse(tenantName);
}
- private TenantName getExistingTenant(HttpRequest request) {
- TenantName tenant = Utils.getTenantFromRequest(request);
- Utils.checkThatTenantExists(tenants, tenant);
- return tenant;
+ private void checkThatTenantDoesNotExist(TenantName tenantName) {
+ if (tenants.checkThatTenantExists(tenantName))
+ throw new BadRequestException("There already exists a tenant '" + tenantName + "'");
}
+
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/Tenants.java b/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/Tenants.java
index 5402b14a337..42fce5e4d3b 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/Tenants.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/Tenants.java
@@ -19,7 +19,6 @@ import org.apache.curator.framework.state.ConnectionState;
import org.apache.curator.framework.state.ConnectionStateListener;
import org.apache.zookeeper.KeeperException;
-import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -53,6 +52,7 @@ import java.util.logging.Logger;
* @author lulf
* @since 5.1.26
*/
+//TODO Rename to TenantRepository
public class Tenants implements ConnectionStateListener, PathChildrenCacheListener {
private static final Logger log = Logger.getLogger(Tenants.class.getName());
@@ -345,6 +345,14 @@ public class Tenants implements ConnectionStateListener, PathChildrenCacheListen
}
}
+ public boolean checkThatTenantExists(TenantName tenant) {
+ return tenantsCopy().containsKey(tenant);
+ }
+
+ public Tenant getTenant(TenantName tenantName) {
+ return tenantsCopy().get(tenantName);
+ }
+
private static int redeployProgress(Tenant tenant, int applicationsRedeployed, int totalNumberOfApplications) {
int size = tenant.getApplicationRepo().listApplications().size();
if (size > 0) {
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationContentHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationContentHandlerTest.java
index c629765f8fe..81ade07fd5a 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationContentHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationContentHandlerTest.java
@@ -57,7 +57,6 @@ public class ApplicationContentHandlerTest extends ContentHandlerTestBase {
testTenantBuilder.tenants().get(tenant2).getApplicationRepo().createPutApplicationTransaction(idTenant2, 3l).commit();
handler = new ApplicationHandler(command -> command.run(),
AccessLog.voidAccessLog(),
- testTenantBuilder.createTenants(),
Zone.defaultZone(),
new ApplicationRepository(testTenantBuilder.createTenants(),
HostProvisionerProvider.empty(),
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java
index 7a73e975e23..c4090c96f04 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java
@@ -96,7 +96,6 @@ public class ApplicationHandlerTest {
return new ApplicationHandler(
Runnable::run,
AccessLog.voidAccessLog(),
- tenants,
Zone.defaultZone(),
new ApplicationRepository(tenants,
HostProvisionerProvider.withProvisioner(provisioner),
@@ -109,7 +108,6 @@ public class ApplicationHandlerTest {
return new ApplicationHandler(
Runnable::run,
AccessLog.voidAccessLog(),
- tenants,
Zone.defaultZone(),
new ApplicationRepository(tenants,
HostProvisionerProvider.withProvisioner(provisioner),