summaryrefslogtreecommitdiffstats
path: root/vespaclient-container-plugin
diff options
context:
space:
mode:
authorHÃ¥vard Pettersen <3535158+havardpe@users.noreply.github.com>2023-04-28 14:28:49 +0200
committerGitHub <noreply@github.com>2023-04-28 14:28:49 +0200
commit3fdedbe3684fd4d924ec71ddc0f85428a57b898c (patch)
tree7d19ce4e42d00a7db7fb03aa941b704d5eebe112 /vespaclient-container-plugin
parent5eed7c893f438d0c643e56133e87a8895d138698 (diff)
parentec495469099fc26c64736fd103facc25f8370a26 (diff)
Merge pull request #26905 from vespa-engine/havardpe/put-create-from-feed
pick up create flag for put operations
Diffstat (limited to 'vespaclient-container-plugin')
-rw-r--r--vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/resource/DocumentV1ApiHandler.java15
-rw-r--r--vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/resource/DocumentV1ApiTest.java3
2 files changed, 11 insertions, 7 deletions
diff --git a/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/resource/DocumentV1ApiHandler.java b/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/resource/DocumentV1ApiHandler.java
index f11a9519c66..5d8d4576bad 100644
--- a/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/resource/DocumentV1ApiHandler.java
+++ b/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/resource/DocumentV1ApiHandler.java
@@ -460,15 +460,17 @@ public class DocumentV1ApiHandler extends AbstractRequestHandler {
return new ForwardingContentChannel(in -> {
enqueueAndDispatch(request, handler, () -> {
- ParsedDocumentOperation put = parser.parsePut(in, path.id().toString());
- getProperty(request, CONDITION).map(TestAndSetCondition::new).ifPresent(c -> put.operation().setCondition(c));
+ ParsedDocumentOperation parsed = parser.parsePut(in, path.id().toString());
+ DocumentPut put = (DocumentPut)parsed.operation();
+ getProperty(request, CONDITION).map(TestAndSetCondition::new).ifPresent(c -> put.setCondition(c));
+ getProperty(request, CREATE, booleanParser).ifPresent(put::setCreateIfNonExistent);
DocumentOperationParameters parameters = parametersFromRequest(request, ROUTE)
.withResponseHandler(response -> {
outstanding.decrementAndGet();
- updatePutMetrics(response.outcome(), latencyOf(request));
- handleFeedOperation(path, put.fullyApplied(), handler, response);
+ updatePutMetrics(response.outcome(), latencyOf(request), put.getCreateIfNonExistent());
+ handleFeedOperation(path, parsed.fullyApplied(), handler, response);
});
- return () -> dispatchOperation(() -> asyncSession.put((DocumentPut)put.operation(), parameters));
+ return () -> dispatchOperation(() -> asyncSession.put(put, parameters));
});
});
}
@@ -1091,7 +1093,8 @@ public class DocumentV1ApiHandler extends AbstractRequestHandler {
private static double latencyOf(HttpRequest r) { return (System.nanoTime() - r.relativeCreatedAtNanoTime()) / 1e+9d; }
- private void updatePutMetrics(Outcome outcome, double latency) {
+ private void updatePutMetrics(Outcome outcome, double latency, boolean create) {
+ if (create && outcome == Outcome.NOT_FOUND) outcome = Outcome.SUCCESS; // >_<
incrementMetricNumOperations(); incrementMetricNumPuts(); sampleLatency(latency);
switch (outcome) {
case SUCCESS -> incrementMetricSucceeded();
diff --git a/vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/resource/DocumentV1ApiTest.java b/vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/resource/DocumentV1ApiTest.java
index 9d58028f8e3..dec546b4294 100644
--- a/vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/resource/DocumentV1ApiTest.java
+++ b/vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/resource/DocumentV1ApiTest.java
@@ -721,6 +721,7 @@ public class DocumentV1ApiTest {
access.session.expect((put, parameters) -> {
DocumentPut expectedPut = new DocumentPut(doc2);
expectedPut.setCondition(new TestAndSetCondition("test it"));
+ expectedPut.setCreateIfNonExistent(true);
assertEquals(expectedPut, put);
assertEquals(parameters().withTraceLevel(9), parameters);
Trace trace = new Trace(9);
@@ -731,7 +732,7 @@ public class DocumentV1ApiTest {
parameters.responseHandler().get().handleResponse(new DocumentResponse(0, doc2, trace));
return new Result();
});
- response = driver.sendRequest("http://localhost/document/v1/space/music/number/1/two?condition=test%20it&tracelevel=9", POST,
+ response = driver.sendRequest("http://localhost/document/v1/space/music/number/1/two?create=true&condition=test%20it&tracelevel=9", POST,
"{" +
" \"fields\": {" +
" \"artist\": \"Asa-Chan & Jun-Ray\"," +