aboutsummaryrefslogtreecommitdiffstats
path: root/vespaclient-container-plugin/src/main
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2021-12-21 16:35:13 +0100
committerJon Marius Venstad <venstad@gmail.com>2021-12-21 16:35:13 +0100
commite26a12f0419ebf6cfbb1452ec8b590b1254b7095 (patch)
tree8e3973e6baa84c3c4d07e6257765f4df0d240637 /vespaclient-container-plugin/src/main
parent7a8ed56455a729716d1c334777df0c9856578e93 (diff)
Add metric for update-doc-not-found, and update httpapi metrics from /doc/v1
Diffstat (limited to 'vespaclient-container-plugin/src/main')
-rw-r--r--vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/resource/DocumentV1ApiHandler.java40
-rw-r--r--vespaclient-container-plugin/src/main/java/com/yahoo/documentapi/metrics/DocumentOperationStatus.java9
-rw-r--r--vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/FeedReplyReader.java11
-rw-r--r--vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/MetricNames.java1
4 files changed, 44 insertions, 17 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 a102e8fffd4..2a7e69a0bf4 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
@@ -34,6 +34,7 @@ import com.yahoo.documentapi.DocumentAccess;
import com.yahoo.documentapi.DocumentOperationParameters;
import com.yahoo.documentapi.DocumentResponse;
import com.yahoo.documentapi.ProgressToken;
+import com.yahoo.documentapi.Response.Outcome;
import com.yahoo.documentapi.Result;
import com.yahoo.documentapi.VisitorControlHandler;
import com.yahoo.documentapi.VisitorDataHandler;
@@ -65,6 +66,7 @@ import com.yahoo.restapi.Path;
import com.yahoo.search.query.ParameterParser;
import com.yahoo.text.Text;
import com.yahoo.vespa.config.content.AllClustersBucketSpacesConfig;
+import com.yahoo.vespa.http.server.MetricNames;
import com.yahoo.yolean.Exceptions;
import com.yahoo.yolean.Exceptions.RunnableThrowingIOException;
@@ -93,8 +95,6 @@ import java.util.concurrent.Executors;
import java.util.concurrent.Phaser;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.locks.Lock;
@@ -450,7 +450,8 @@ public class DocumentV1ApiHandler extends AbstractRequestHandler {
DocumentOperationParameters parameters = parametersFromRequest(request, ROUTE)
.withResponseHandler(response -> {
outstanding.decrementAndGet();
- handle(path, handler, response);
+ updatePutMetrics(response.outcome());
+ handleFeedOperation(path, handler, response);
});
return () -> dispatchOperation(() -> asyncSession.put(put, parameters));
});
@@ -467,7 +468,8 @@ public class DocumentV1ApiHandler extends AbstractRequestHandler {
DocumentOperationParameters parameters = parametersFromRequest(request, ROUTE)
.withResponseHandler(response -> {
outstanding.decrementAndGet();
- handle(path, handler, response);
+ updateUpdateMetrics(response.outcome());
+ handleFeedOperation(path, handler, response);
});
return () -> dispatchOperation(() -> asyncSession.update(update, parameters));
});
@@ -482,7 +484,8 @@ public class DocumentV1ApiHandler extends AbstractRequestHandler {
DocumentOperationParameters parameters = parametersFromRequest(request, ROUTE)
.withResponseHandler(response -> {
outstanding.decrementAndGet();
- handle(path, handler, response);
+ updateRemoveMetrics(response.outcome());
+ handleFeedOperation(path, handler, response);
});
return () -> dispatchOperation(() -> asyncSession.remove(remove, parameters));
});
@@ -1032,10 +1035,35 @@ public class DocumentV1ApiHandler extends AbstractRequestHandler {
}
}
- private static void handle(DocumentPath path, ResponseHandler handler, com.yahoo.documentapi.Response response) {
+ private static void handleFeedOperation(DocumentPath path, ResponseHandler handler, com.yahoo.documentapi.Response response) {
handle(path, handler, response, (document, jsonResponse) -> jsonResponse.commit(Response.Status.OK));
}
+ private void updatePutMetrics(Outcome outcome) {
+ switch (outcome) {
+ case SUCCESS: metric.add(MetricNames.SUCCEEDED, 1, null); break;
+ case CONDITION_FAILED: metric.add(MetricNames.CONDITION_NOT_MET, 1, null); break;
+ default: metric.add(MetricNames.FAILED, 1, null); break;
+ }
+ }
+
+ private void updateUpdateMetrics(Outcome outcome) {
+ switch (outcome) {
+ case SUCCESS: metric.add(MetricNames.SUCCEEDED, 1, null); break;
+ case NOT_FOUND: metric.add(MetricNames.NOT_FOUND, 1, null); break;
+ case CONDITION_FAILED: metric.add(MetricNames.CONDITION_NOT_MET, 1, null); break;
+ default: metric.add(MetricNames.FAILED, 1, null); break;
+ }
+ }
+
+ private void updateRemoveMetrics(Outcome outcome) {
+ switch (outcome) {
+ case SUCCESS: metric.add(MetricNames.SUCCEEDED, 1, null); break;
+ case CONDITION_FAILED: metric.add(MetricNames.CONDITION_NOT_MET, 1, null); break;
+ default: metric.add(MetricNames.FAILED, 1, null); break;
+ }
+ }
+
// ------------------------------------------------- Visits ------------------------------------------------
private VisitorParameters parseGetParameters(HttpRequest request, DocumentPath path, boolean streamed) {
diff --git a/vespaclient-container-plugin/src/main/java/com/yahoo/documentapi/metrics/DocumentOperationStatus.java b/vespaclient-container-plugin/src/main/java/com/yahoo/documentapi/metrics/DocumentOperationStatus.java
index 522652212a9..97e5e9e63d8 100644
--- a/vespaclient-container-plugin/src/main/java/com/yahoo/documentapi/metrics/DocumentOperationStatus.java
+++ b/vespaclient-container-plugin/src/main/java/com/yahoo/documentapi/metrics/DocumentOperationStatus.java
@@ -19,15 +19,6 @@ public enum DocumentOperationStatus {
OK, REQUEST_ERROR, SERVER_ERROR;
- public static DocumentOperationStatus fromHttpStatusCode(int httpStatus) {
- switch (httpStatus / 100) {
- case 2: return OK;
- case 4: return REQUEST_ERROR;
- case 5: return SERVER_ERROR;
- default: return null;
- }
- }
-
public static DocumentOperationStatus fromMessageBusErrorCodes(Set<Integer> errorCodes) {
if (errorCodes.size() == 1 && errorCodes.contains(DocumentProtocol.ERROR_NO_SPACE))
return SERVER_ERROR;
diff --git a/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/FeedReplyReader.java b/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/FeedReplyReader.java
index 50f79c0a828..b71b5d79520 100644
--- a/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/FeedReplyReader.java
+++ b/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/FeedReplyReader.java
@@ -2,6 +2,7 @@
package com.yahoo.vespa.http.server;
import com.yahoo.documentapi.messagebus.protocol.DocumentProtocol;
+import com.yahoo.documentapi.messagebus.protocol.UpdateDocumentReply;
import com.yahoo.documentapi.metrics.DocumentApiMetrics;
import com.yahoo.documentapi.metrics.DocumentOperationStatus;
import com.yahoo.documentapi.metrics.DocumentOperationType;
@@ -54,14 +55,20 @@ public class FeedReplyReader implements ReplyHandler {
} else {
metricsHelper.reportSuccessful(type, latencyInSeconds);
metric.add(MetricNames.SUCCEEDED, 1, null);
- if (!conditionMet)
+ if ( ! conditionMet)
metric.add(MetricNames.CONDITION_NOT_MET, 1, testAndSetMetricCtx);
+ if ( ! updateNotFound(reply))
+ metric.add(MetricNames.NOT_FOUND, 1, null);
enqueue(context, "Document processed.", ErrorCode.OK, !conditionMet, reply.getTrace());
}
}
private static boolean conditionMet(Reply reply) {
- return !reply.hasErrors() || reply.getError(0).getCode() != DocumentProtocol.ERROR_TEST_AND_SET_CONDITION_FAILED;
+ return ! reply.hasErrors() || reply.getError(0).getCode() != DocumentProtocol.ERROR_TEST_AND_SET_CONDITION_FAILED;
+ }
+
+ private static boolean updateNotFound(Reply reply) {
+ return reply instanceof UpdateDocumentReply && ! ((UpdateDocumentReply) reply).wasFound();
}
private void enqueue(ReplyContext context, String message, ErrorCode status, boolean isConditionNotMet, Trace trace) {
diff --git a/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/MetricNames.java b/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/MetricNames.java
index 6ded410ff68..a5987f2398e 100644
--- a/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/MetricNames.java
+++ b/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/MetricNames.java
@@ -19,6 +19,7 @@ public final class MetricNames {
public static final String LATENCY = PREFIX + "latency";
public static final String FAILED = PREFIX + "failed";
public static final String CONDITION_NOT_MET = PREFIX + "condition_not_met";
+ public static final String NOT_FOUND = PREFIX + "not_found";
public static final String PARSE_ERROR = PREFIX + "parse_error";
public static final String SUCCEEDED = PREFIX + "succeeded";
public static final String PENDING = PREFIX + "pending";