diff options
author | Harald Musum <musum@verizonmedia.com> | 2020-07-08 15:49:18 +0200 |
---|---|---|
committer | Harald Musum <musum@verizonmedia.com> | 2020-07-08 15:49:18 +0200 |
commit | f41b63cb93755578e6dcda476b6ddeb8180199b0 (patch) | |
tree | 5d52066840164dcc906a306f6ef0b5225e147a4d /configserver | |
parent | 3a22b246d398944a7c1dc9d47b674d8f16c4ea90 (diff) |
Handle no active session existing better
* Add check for application existing and throw with exception
about missing application id if missing
* Do not throw exception in activeSessionOf(), requireActiveSessionOf() does
that and can be used when necessary
Diffstat (limited to 'configserver')
3 files changed, 8 insertions, 8 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 8ba4581e158..bd86052c0dd 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 @@ -619,9 +619,8 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye private long getSessionIdForApplication(Tenant tenant, ApplicationId applicationId) { TenantApplications applicationRepo = tenant.getApplicationRepo(); - if (applicationRepo == null) - throw new NotFoundException("Application repo for tenant '" + tenant.getName() + "' not found"); - + if (! applicationRepo.exists(applicationId)) + throw new NotFoundException("Unknown application id '" + applicationId + "'"); return applicationRepo.requireActiveSessionOf(applicationId); } diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/application/TenantApplications.java b/configserver/src/main/java/com/yahoo/vespa/config/server/application/TenantApplications.java index 7337dc446f5..5567de6dadc 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/application/TenantApplications.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/application/TenantApplications.java @@ -127,11 +127,12 @@ public class TenantApplications implements RequestHandler, HostValidator<Applica return curator.exists(applicationPath(id)); } - /** Returns the id of the currently active session for the given application, if any. Throws on unknown applications. */ + /** Returns the active session id for the given application. Returns Optional.empty if application not found or no active session exists. */ public Optional<Long> activeSessionOf(ApplicationId id) { - String data = curator.getData(applicationPath(id)).map(Utf8::toString) - .orElseThrow(() -> new NotFoundException("No active session found for application id: '" + id + "'")); - return data.isEmpty() ? Optional.empty() : Optional.of(Long.parseLong(data)); + Optional<byte[]> data = curator.getData(applicationPath(id)); + return (data.isEmpty() || data.get().length == 0) + ? Optional.empty() + : data.map(bytes -> Long.parseLong(Utf8.toString(bytes))); } public boolean hasLocalSession(long sessionId) { 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 3438fbecc59..eca32cd364a 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 @@ -235,7 +235,7 @@ public class ApplicationHandlerTest { ApplicationId unknown = new ApplicationId.Builder().applicationName("unknown").tenant("default").build(); HttpResponse responseForUnknown = fileDistributionStatus(unknown, zone); assertEquals(404, responseForUnknown.getStatus()); - assertEquals("{\"error-code\":\"NOT_FOUND\",\"message\":\"No active session found for application id: 'default.unknown'\"}", + assertEquals("{\"error-code\":\"NOT_FOUND\",\"message\":\"Unknown application id 'default.unknown'\"}", getRenderedString(responseForUnknown)); } |