diff options
author | HÃ¥vard Pettersen <3535158+havardpe@users.noreply.github.com> | 2023-04-28 14:28:49 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-28 14:28:49 +0200 |
commit | 3fdedbe3684fd4d924ec71ddc0f85428a57b898c (patch) | |
tree | 7d19ce4e42d00a7db7fb03aa941b704d5eebe112 /vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/resource/DocumentV1ApiHandler.java | |
parent | 5eed7c893f438d0c643e56133e87a8895d138698 (diff) | |
parent | ec495469099fc26c64736fd103facc25f8370a26 (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/src/main/java/com/yahoo/document/restapi/resource/DocumentV1ApiHandler.java')
-rw-r--r-- | vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/resource/DocumentV1ApiHandler.java | 15 |
1 files changed, 9 insertions, 6 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(); |