summaryrefslogtreecommitdiffstats
path: root/vespaclient-container-plugin
diff options
context:
space:
mode:
Diffstat (limited to 'vespaclient-container-plugin')
-rw-r--r--vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/resource/RestApi.java14
-rw-r--r--vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/ClientFeederV3.java9
-rw-r--r--vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/resource/RestApiTest.java18
3 files changed, 31 insertions, 10 deletions
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 fe24759ba63..80769909b9f 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
@@ -212,14 +212,16 @@ public class RestApi extends LoggingRequestHandler {
}
private HttpResponse handleVisit(RestUri restUri, HttpRequest request) throws RestApiException {
+ String documentSelection = Optional.ofNullable(request.getProperty(SELECTION)).orElse("");
if (restUri.getGroup().isPresent() && ! restUri.getGroup().get().value.isEmpty()) {
- return Response.createErrorResponse(
- 400,
- "Visiting does not support setting value for group/value, try using expression parameter instead.",
- restUri);
-
+ if (! documentSelection.isEmpty()) {
+ return Response.createErrorResponse(
+ 400,
+ "Visiting does not support setting value for group/value in combination with expression, try using only expression parameter instead.",
+ restUri);
+ }
+ documentSelection = "id.group='" + restUri.getGroup().get().value + "'";
}
- String documentSelection = Optional.ofNullable(request.getProperty(SELECTION)).orElse("");
Optional<String> cluster = Optional.ofNullable(request.getProperty(CLUSTER));
Optional<String> continuation = Optional.ofNullable(request.getProperty(CONTINUATION));
final OperationHandler.VisitResult visit = operationHandler.visit(restUri, documentSelection, cluster, continuation);
diff --git a/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/ClientFeederV3.java b/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/ClientFeederV3.java
index d27ebc551d9..301b81f040c 100644
--- a/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/ClientFeederV3.java
+++ b/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/ClientFeederV3.java
@@ -133,7 +133,7 @@ class ClientFeederV3 {
* We try 10 for now. This should only kick in with very massive feeding to few gateway nodes.
*/
if (feederSettings.denyIfBusy && threadsAvailableForFeeding.get() < -10) {
- return new ErrorHttpResponse(429, "Gateway overloaded");
+ return new ErrorHttpResponse(getOverloadReturnCode(request), "Gateway overloaded");
}
InputStream inputStream = StreamReaderV3.unzipStreamIfNeeded(request);
@@ -166,6 +166,13 @@ class ClientFeederV3 {
}
}
+ private int getOverloadReturnCode(HttpRequest request) {
+ if (request.getHeader(Headers.SILENTUPGRADE) != null ) {
+ return 299;
+ }
+ return 429;
+ }
+
private Optional<DocumentOperationMessageV3> pullMessageFromRequest(
FeederSettings settings, InputStream requestInputStream, BlockingQueue<OperationStatus> repliesFromOldMessages) {
while (true) {
diff --git a/vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/resource/RestApiTest.java b/vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/resource/RestApiTest.java
index f098e00ec6d..3971b4320b5 100644
--- a/vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/resource/RestApiTest.java
+++ b/vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/resource/RestApiTest.java
@@ -271,8 +271,8 @@ public class RestApiTest {
assertThat(rest, containsString(visit_response_part3));
}
- String visit_test_bad_uri = "/document/v1/namespace/document-type/group/abc?continuation=abc";
- String visit_test_bad_response = "Visiting does not support setting value for group/value,";
+ String visit_test_bad_uri = "/document/v1/namespace/document-type/group/abc?continuation=abc&selection=foo";
+ String visit_test_bad_response = "Visiting does not support setting value for group/value in combination with expression";
@Test
@@ -283,10 +283,22 @@ public class RestApiTest {
assertThat(rest, containsString(visit_test_bad_response));
}
+ String visit_test_uri_selection_rewrite = "/document/v1/namespace/document-type/group/abc?continuation=abc";
+ String visit_test_response_selection_rewrite = "doc selection: 'id.group='abc''";
+
+
+ @Test
+ public void testUseExpressionOnVisit() throws Exception {
+ Request request = new Request("http://localhost:" + getFirstListenPort() + visit_test_uri_selection_rewrite);
+ HttpGet get = new HttpGet(request.getUri());
+ String rest = doRest(get);
+ assertThat(rest, containsString(visit_test_response_selection_rewrite));
+ }
+
private String doRest(HttpRequestBase request) throws IOException {
HttpClient client = HttpClientBuilder.create().build();
HttpResponse response = client.execute(request);
- assertThat(response.getEntity().getContentType().getValue().toString(), is("application/json;charset=utf-8"));
+ assertThat(response.getEntity().getContentType().getValue().toString(), startsWith("application/json;"));
HttpEntity entity = response.getEntity();
return EntityUtils.toString(entity);
}