aboutsummaryrefslogtreecommitdiffstats
path: root/configserver
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2020-07-08 15:49:18 +0200
committerHarald Musum <musum@verizonmedia.com>2020-07-08 15:49:18 +0200
commitf41b63cb93755578e6dcda476b6ddeb8180199b0 (patch)
tree5d52066840164dcc906a306f6ef0b5225e147a4d /configserver
parent3a22b246d398944a7c1dc9d47b674d8f16c4ea90 (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')
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java5
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/application/TenantApplications.java9
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java2
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));
}