diff options
author | Tor Brede Vekterli <vekterli@verizonmedia.com> | 2019-07-19 15:05:07 +0200 |
---|---|---|
committer | Tor Brede Vekterli <vekterli@verizonmedia.com> | 2019-07-19 15:05:07 +0200 |
commit | 76e142fd3b7dd90e6ba0bc9cd85ee83c207aff43 (patch) | |
tree | 5dec598e4632675e4643c549fd9d2dc38e7486b5 /vespaclient-container-plugin/src/main/java | |
parent | 2d3c0e73105c65c5d3649b09f79d81a5f97cb661 (diff) |
Support `cluster` parameter for Document V1 Get operations
Makes point lookup cluster routing functionality equal to that of
visiting operations. Especially useful as the difference between
these is minimal when used via the Document V1 REST API.
Diffstat (limited to 'vespaclient-container-plugin/src/main/java')
3 files changed, 18 insertions, 4 deletions
diff --git a/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/OperationHandler.java b/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/OperationHandler.java index a6fdcb10a00..848fe4b5726 100644 --- a/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/OperationHandler.java +++ b/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/OperationHandler.java @@ -101,6 +101,10 @@ public interface OperationHandler { default Optional<String> get(RestUri restUri, Optional<String> fieldSet) throws RestApiException { return get(restUri); } + + default Optional<String> get(RestUri restUri, Optional<String> fieldSet, Optional<String> cluster) throws RestApiException { + return get(restUri, fieldSet); + } /** Called just before this is disposed of */ default void shutdown() {} diff --git a/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/OperationHandlerImpl.java b/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/OperationHandlerImpl.java index 4ca43f5fde2..333f1d2f8c9 100644 --- a/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/OperationHandlerImpl.java +++ b/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/OperationHandlerImpl.java @@ -279,9 +279,13 @@ public class OperationHandlerImpl implements OperationHandler { } @Override - public Optional<String> get(RestUri restUri, Optional<String> fieldSet) throws RestApiException { + public Optional<String> get(RestUri restUri, Optional<String> fieldSet, Optional<String> cluster) throws RestApiException { SyncSession syncSession = syncSessions.alloc(); - setRoute(syncSession, Optional.empty()); + // Explicit unary used instead of map() due to unhandled exceptions, blargh. + Optional<String> route = cluster.isPresent() + ? Optional.of(clusterDefToRoute(resolveClusterDef(cluster, clusterEnumerator.enumerateClusters()))) + : Optional.empty(); + setRoute(syncSession, route); try { DocumentId id = new DocumentId(restUri.generateFullId()); final Document document = syncSession.get(id, fieldSet.orElse(restUri.getDocumentType() + ":[document]"), DocumentProtocol.Priority.NORMAL_1); @@ -301,6 +305,11 @@ public class OperationHandlerImpl implements OperationHandler { } @Override + public Optional<String> get(RestUri restUri, Optional<String> fieldSet) throws RestApiException { + return get(restUri, fieldSet, Optional.empty()); + } + + @Override public Optional<String> get(RestUri restUri) throws RestApiException { return get(restUri, Optional.empty()); } diff --git a/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/resource/RestApi.java b/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/resource/RestApi.java index d2fd8d92495..7e572dae941 100644 --- a/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/resource/RestApi.java +++ b/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/resource/RestApi.java @@ -262,8 +262,9 @@ public class RestApi extends LoggingRequestHandler { } private HttpResponse handleGet(RestUri restUri, HttpRequest request) throws RestApiException { - final Optional<String> fieldSet = requestProperty("fieldSet", request); - final Optional<String> getDocument = operationHandler.get(restUri, fieldSet); + final Optional<String> fieldSet = requestProperty(FIELD_SET, request); + final Optional<String> cluster = requestProperty(CLUSTER, request); + final Optional<String> getDocument = operationHandler.get(restUri, fieldSet, cluster); final ObjectNode resultNode = mapper.createObjectNode(); if (getDocument.isPresent()) { final JsonNode parseNode; |