From f41b63cb93755578e6dcda476b6ddeb8180199b0 Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Wed, 8 Jul 2020 15:49:18 +0200 Subject: 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 --- .../com/yahoo/vespa/config/server/ApplicationRepository.java | 5 ++--- .../vespa/config/server/application/TenantApplications.java | 9 +++++---- .../vespa/config/server/http/v2/ApplicationHandlerTest.java | 2 +- 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 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 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)); } -- cgit v1.2.3