diff options
author | Jon Marius Venstad <venstad@gmail.com> | 2020-09-24 21:18:25 +0200 |
---|---|---|
committer | Jon Marius Venstad <venstad@gmail.com> | 2020-09-24 21:36:38 +0200 |
commit | ba878c027385ac2db61dd849d39705c704786f62 (patch) | |
tree | d66f675d72c92e19dae9046e3d561d6d2cdd128f /documentapi | |
parent | bea49fe5bd3f4d02b003617dc8a7b4091ec3a632 (diff) |
Use trace level from parameters, and pass on to Response
Diffstat (limited to 'documentapi')
8 files changed, 129 insertions, 71 deletions
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/DocumentIdResponse.java b/documentapi/src/main/java/com/yahoo/documentapi/DocumentIdResponse.java index 34ab47571cf..e4a44fb88cd 100644 --- a/documentapi/src/main/java/com/yahoo/documentapi/DocumentIdResponse.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/DocumentIdResponse.java @@ -2,6 +2,7 @@ package com.yahoo.documentapi; import com.yahoo.document.DocumentId; +import com.yahoo.messagebus.Trace; /** * The asynchronous response to a document remove operation. @@ -61,7 +62,19 @@ public class DocumentIdResponse extends Response { * @param outcome the outcome of the operation */ public DocumentIdResponse(long requestId, DocumentId documentId, String textMessage, Outcome outcome) { - super(requestId, textMessage, outcome); + this(requestId, documentId, textMessage, outcome, null); + } + + + /** + * Creates a response containing a textual message and/or a document id + * + * @param documentId the DocumentId to encapsulate in the Response + * @param textMessage the message to encapsulate in the Response + * @param outcome the outcome of the operation + */ + public DocumentIdResponse(long requestId, DocumentId documentId, String textMessage, Outcome outcome, Trace trace) { + super(requestId, textMessage, outcome, null); this.documentId = documentId; } diff --git a/documentapi/src/main/java/com/yahoo/documentapi/DocumentResponse.java b/documentapi/src/main/java/com/yahoo/documentapi/DocumentResponse.java index 172e5fd11c0..a4d81a5e145 100644 --- a/documentapi/src/main/java/com/yahoo/documentapi/DocumentResponse.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/DocumentResponse.java @@ -2,6 +2,7 @@ package com.yahoo.documentapi; import com.yahoo.document.Document; +import com.yahoo.messagebus.Trace; /** * The asynchronous response to a document put or get operation. @@ -72,7 +73,19 @@ public class DocumentResponse extends Response { * @param outcome the outcome of this operation */ public DocumentResponse(long requestId, Document document, String textMessage, Outcome outcome) { - super(requestId, textMessage, outcome); + this(requestId, document, textMessage, outcome, null); + } + + + /** + * Creates a response containing a textual message and/or a document + * + * @param document the Document to encapsulate in the Response + * @param textMessage the message to encapsulate in the Response + * @param outcome the outcome of this operation + */ + public DocumentResponse(long requestId, Document document, String textMessage, Outcome outcome, Trace trace) { + super(requestId, textMessage, outcome, trace); this.document = document; } diff --git a/documentapi/src/main/java/com/yahoo/documentapi/DocumentUpdateResponse.java b/documentapi/src/main/java/com/yahoo/documentapi/DocumentUpdateResponse.java index 3294c216d96..d34873aeaa6 100644 --- a/documentapi/src/main/java/com/yahoo/documentapi/DocumentUpdateResponse.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/DocumentUpdateResponse.java @@ -2,6 +2,7 @@ package com.yahoo.documentapi; import com.yahoo.document.DocumentUpdate; +import com.yahoo.messagebus.Trace; /** * The asynchronous response to a document update operation. @@ -71,7 +72,19 @@ public class DocumentUpdateResponse extends Response { * @param outcome the outcome of this operation */ public DocumentUpdateResponse(long requestId, DocumentUpdate documentUpdate, String textMessage, Outcome outcome) { - super(requestId, textMessage, outcome); + this(requestId, documentUpdate, textMessage, outcome, null); + } + + + /** + * Creates a response containing a textual message and/or a document update + * + * @param documentUpdate the DocumentUpdate to encapsulate in the Response + * @param textMessage the message to encapsulate in the Response + * @param outcome the outcome of this operation + */ + public DocumentUpdateResponse(long requestId, DocumentUpdate documentUpdate, String textMessage, Outcome outcome, Trace trace) { + super(requestId, textMessage, outcome, trace); this.documentUpdate = documentUpdate; } diff --git a/documentapi/src/main/java/com/yahoo/documentapi/RemoveResponse.java b/documentapi/src/main/java/com/yahoo/documentapi/RemoveResponse.java index 2a7c6f45d95..2d3f2934890 100644 --- a/documentapi/src/main/java/com/yahoo/documentapi/RemoveResponse.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/RemoveResponse.java @@ -1,6 +1,8 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.documentapi; +import com.yahoo.messagebus.Trace; + /** * This response is provided for successful document remove operations. Use the * wasFound() method to check whether or not the document was actually found. @@ -12,7 +14,11 @@ public class RemoveResponse extends Response { private final boolean wasFound; public RemoveResponse(long requestId, boolean wasFound) { - super(requestId, null, wasFound ? Outcome.SUCCESS : Outcome.NOT_FOUND); + this(requestId, wasFound, null); + } + + public RemoveResponse(long requestId, boolean wasFound, Trace trace) { + super(requestId, null, wasFound ? Outcome.SUCCESS : Outcome.NOT_FOUND, trace); this.wasFound = wasFound; } diff --git a/documentapi/src/main/java/com/yahoo/documentapi/Response.java b/documentapi/src/main/java/com/yahoo/documentapi/Response.java index 4c95a648949..0a541a92c6a 100644 --- a/documentapi/src/main/java/com/yahoo/documentapi/Response.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/Response.java @@ -1,6 +1,8 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.documentapi; +import com.yahoo.messagebus.Trace; + import java.util.Objects; import static com.yahoo.documentapi.Response.Outcome.ERROR; @@ -19,6 +21,7 @@ public class Response { private final long requestId; private final String textMessage; private final Outcome outcome; + private final Trace trace; /** Creates a successful response containing no information */ public Response(long requestId) { @@ -52,9 +55,20 @@ public class Response { * @param outcome the outcome of the operation */ public Response(long requestId, String textMessage, Outcome outcome) { + this(requestId, textMessage, outcome, null); + } + + /** + * Creates a response containing a textual message + * + * @param textMessage the message to encapsulate in the Response + * @param outcome the outcome of the operation + */ + public Response(long requestId, String textMessage, Outcome outcome, Trace trace) { this.requestId = requestId; this.textMessage = textMessage; this.outcome = outcome; + this.trace = trace; } /** @@ -76,6 +90,9 @@ public class Response { public long getRequestId() { return requestId; } + /** Returns the trace of this operation, or null if there is none. */ + public Trace getTrace() { return trace; } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/documentapi/src/main/java/com/yahoo/documentapi/UpdateResponse.java b/documentapi/src/main/java/com/yahoo/documentapi/UpdateResponse.java index aca34a92a30..54c338dc6c9 100644 --- a/documentapi/src/main/java/com/yahoo/documentapi/UpdateResponse.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/UpdateResponse.java @@ -1,6 +1,8 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.documentapi; +import com.yahoo.messagebus.Trace; + /** * This response is provided for successful document update operations. Use the * wasFound() method to check whether or not the document was actually found. @@ -12,7 +14,11 @@ public class UpdateResponse extends Response { private final boolean wasFound; public UpdateResponse(long requestId, boolean wasFound) { - super(requestId, null, wasFound ? Outcome.SUCCESS : Outcome.NOT_FOUND); + this(requestId, wasFound, null); + } + + public UpdateResponse(long requestId, boolean wasFound, Trace trace) { + super(requestId, null, wasFound ? Outcome.SUCCESS : Outcome.NOT_FOUND, trace); this.wasFound = wasFound; } diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusAsyncSession.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusAsyncSession.java index 98e7aec7b11..d1da3c7dc03 100644 --- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusAsyncSession.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusAsyncSession.java @@ -17,7 +17,6 @@ import com.yahoo.documentapi.Response; import com.yahoo.documentapi.ResponseHandler; import com.yahoo.documentapi.Result; import com.yahoo.documentapi.UpdateResponse; -import com.yahoo.documentapi.messagebus.protocol.DocumentMessage; import com.yahoo.documentapi.messagebus.protocol.DocumentProtocol; import com.yahoo.documentapi.messagebus.protocol.GetDocumentMessage; import com.yahoo.documentapi.messagebus.protocol.GetDocumentReply; @@ -35,7 +34,6 @@ import com.yahoo.messagebus.ReplyHandler; import com.yahoo.messagebus.SourceSession; import com.yahoo.messagebus.StaticThrottlePolicy; import com.yahoo.messagebus.ThrottlePolicy; -import com.yahoo.messagebus.routing.Route; import java.util.Queue; import java.util.concurrent.BlockingQueue; @@ -48,6 +46,7 @@ import static com.yahoo.documentapi.DocumentOperationParameters.parameters; import static com.yahoo.documentapi.Response.Outcome.CONDITION_FAILED; import static com.yahoo.documentapi.Response.Outcome.ERROR; import static com.yahoo.documentapi.Response.Outcome.NOT_FOUND; +import static com.yahoo.documentapi.Response.Outcome.SUCCESS; /** * An access session which wraps a messagebus source session sending document messages. @@ -111,8 +110,8 @@ public class MessageBusAsyncSession implements MessageBusSession, AsyncSession { @Override public Result put(DocumentPut documentPut, DocumentOperationParameters parameters) { PutDocumentMessage msg = new PutDocumentMessage(documentPut); - setParameters(msg, parameters, DocumentProtocol.Priority.NORMAL_3); - return send(msg); + msg.setPriority(parameters.priority().orElse(DocumentProtocol.Priority.NORMAL_3)); + return send(msg, parameters); } @Override @@ -134,8 +133,8 @@ public class MessageBusAsyncSession implements MessageBusSession, AsyncSession { @Override public Result get(DocumentId id, DocumentOperationParameters parameters) { GetDocumentMessage msg = new GetDocumentMessage(id, parameters.fieldSet().orElse(AllFields.NAME)); - setParameters(msg, parameters, DocumentProtocol.Priority.NORMAL_1); - return send(msg); + msg.setPriority(parameters.priority().orElse(DocumentProtocol.Priority.NORMAL_1)); + return send(msg, parameters); } @Override @@ -151,8 +150,8 @@ public class MessageBusAsyncSession implements MessageBusSession, AsyncSession { @Override public Result remove(DocumentId id, DocumentOperationParameters parameters) { RemoveDocumentMessage msg = new RemoveDocumentMessage(id); - setParameters(msg, parameters, DocumentProtocol.Priority.NORMAL_2); - return send(msg); + msg.setPriority(parameters.priority().orElse(DocumentProtocol.Priority.NORMAL_2)); + return send(msg, parameters); } @Override @@ -168,8 +167,8 @@ public class MessageBusAsyncSession implements MessageBusSession, AsyncSession { @Override public Result update(DocumentUpdate update, DocumentOperationParameters parameters) { UpdateDocumentMessage msg = new UpdateDocumentMessage(update); - setParameters(msg, parameters, DocumentProtocol.Priority.NORMAL_2); - return send(msg); + msg.setPriority(parameters.priority().orElse(DocumentProtocol.Priority.NORMAL_2)); + return send(msg, parameters); } // TODO jonmv: Was this done to remedy get route no longer being possible to set through doc/v1 after default-get was added? @@ -182,21 +181,13 @@ public class MessageBusAsyncSession implements MessageBusSession, AsyncSession { && ("default".equals(route) || "route:default".equals(route))); } - /** - * A convenience method for assigning the internal trace level and route string to a message before sending it - * through the internal mbus session object. - * - * @param msg the message to send. - * @return the document api result object. - */ - public Result send(Message msg) { + Result send(Message msg, DocumentOperationParameters parameters) { try { long reqId = requestId.incrementAndGet(); msg.setContext(reqId); - msg.getTrace().setLevel(traceLevel); - // Use message route if set, or session route if non-default, or finally, defaults for get and non-get, if set. Phew! - String toRoute = msg.getRoute() != null ? msg.getRoute().toString() - : (mayOverrideWithGetOnlyRoute(msg) ? routeForGet : route); + msg.getTrace().setLevel(parameters.traceLevel().orElse(traceLevel)); + // Use route from parameters, or session route if non-default, or finally, defaults for get and non-get, if set. Phew! + String toRoute = parameters.route().orElse(mayOverrideWithGetOnlyRoute(msg) ? routeForGet : route); if (toRoute != null) { return toResult(reqId, session.send(msg, toRoute, true)); } else { @@ -207,6 +198,17 @@ public class MessageBusAsyncSession implements MessageBusSession, AsyncSession { } } + /** + * A convenience method for assigning the internal trace level and route string to a message before sending it + * through the internal mbus session object. + * + * @param msg the message to send. + * @return the document api result object. + */ + public Result send(Message msg) { + return send(msg, null); + } + @Override public Response getNext() { return responses.poll(); @@ -284,7 +286,7 @@ public class MessageBusAsyncSession implements MessageBusSession, AsyncSession { } private static Response toResponse(Reply reply) { - long reqId = (Long)reply.getContext(); + long reqId = (Long) reply.getContext(); return reply.hasErrors() ? toError(reply, reqId) : toSuccess(reply, reqId); } @@ -297,15 +299,15 @@ public class MessageBusAsyncSession implements MessageBusSession, AsyncSession { String err = getErrorMessage(reply); switch (msg.getType()) { case DocumentProtocol.MESSAGE_PUTDOCUMENT: - return new DocumentResponse(reqId, ((PutDocumentMessage)msg).getDocumentPut().getDocument(), err, outcome); + return new DocumentResponse(reqId, ((PutDocumentMessage)msg).getDocumentPut().getDocument(), err, outcome, reply.getTrace()); case DocumentProtocol.MESSAGE_UPDATEDOCUMENT: - return new DocumentUpdateResponse(reqId, ((UpdateDocumentMessage)msg).getDocumentUpdate(), err, outcome); + return new DocumentUpdateResponse(reqId, ((UpdateDocumentMessage)msg).getDocumentUpdate(), err, outcome, reply.getTrace()); case DocumentProtocol.MESSAGE_REMOVEDOCUMENT: - return new DocumentIdResponse(reqId, ((RemoveDocumentMessage)msg).getDocumentId(), err, outcome); + return new DocumentIdResponse(reqId, ((RemoveDocumentMessage)msg).getDocumentId(), err, outcome, reply.getTrace()); case DocumentProtocol.MESSAGE_GETDOCUMENT: - return new DocumentIdResponse(reqId, ((GetDocumentMessage)msg).getDocumentId(), err, outcome); + return new DocumentIdResponse(reqId, ((GetDocumentMessage)msg).getDocumentId(), err, outcome, reply.getTrace()); default: - return new Response(reqId, err, outcome); + return new Response(reqId, err, outcome, reply.getTrace()); } } @@ -317,26 +319,26 @@ public class MessageBusAsyncSession implements MessageBusSession, AsyncSession { if (getDoc != null) { getDoc.setLastModified(docReply.getLastModified()); } - return new DocumentResponse(reqId, getDoc); + return new DocumentResponse(reqId, getDoc, reply.getTrace()); case DocumentProtocol.REPLY_REMOVEDOCUMENT: - return new RemoveResponse(reqId, ((RemoveDocumentReply)reply).wasFound()); + return new RemoveResponse(reqId, ((RemoveDocumentReply)reply).wasFound(), reply.getTrace()); case DocumentProtocol.REPLY_UPDATEDOCUMENT: - return new UpdateResponse(reqId, ((UpdateDocumentReply)reply).wasFound()); + return new UpdateResponse(reqId, ((UpdateDocumentReply)reply).wasFound(), reply.getTrace()); case DocumentProtocol.REPLY_PUTDOCUMENT: break; default: - return new Response(reqId); + return new Response(reqId, null, SUCCESS, reply.getTrace()); } Message msg = reply.getMessage(); switch (msg.getType()) { case DocumentProtocol.MESSAGE_PUTDOCUMENT: - return new DocumentResponse(reqId, ((PutDocumentMessage)msg).getDocumentPut().getDocument()); + return new DocumentResponse(reqId, ((PutDocumentMessage)msg).getDocumentPut().getDocument(), null, SUCCESS, reply.getTrace()); case DocumentProtocol.MESSAGE_REMOVEDOCUMENT: - return new DocumentIdResponse(reqId, ((RemoveDocumentMessage)msg).getDocumentId()); + return new DocumentIdResponse(reqId, ((RemoveDocumentMessage)msg).getDocumentId(), null, SUCCESS, reply.getTrace()); case DocumentProtocol.MESSAGE_UPDATEDOCUMENT: - return new DocumentUpdateResponse(reqId, ((UpdateDocumentMessage)msg).getDocumentUpdate()); + return new DocumentUpdateResponse(reqId, ((UpdateDocumentMessage)msg).getDocumentUpdate(), null, SUCCESS, reply.getTrace()); default: - return new Response(reqId); + return new Response(reqId, null, SUCCESS, reply.getTrace()); } } @@ -364,11 +366,4 @@ public class MessageBusAsyncSession implements MessageBusSession, AsyncSession { } } - static void setParameters(DocumentMessage message, DocumentOperationParameters parameters, - DocumentProtocol.Priority defaultPriority) { - message.setPriority(parameters.priority().orElse(defaultPriority)); - parameters.route().map(Route::parse).ifPresent(message::setRoute); - parameters.traceLevel().ifPresent(message.getTrace()::setLevel); - } - } diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusSyncSession.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusSyncSession.java index 7bf0976f249..c7ab8a23e11 100755 --- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusSyncSession.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusSyncSession.java @@ -26,12 +26,10 @@ import com.yahoo.messagebus.Message; import com.yahoo.messagebus.MessageBus; import com.yahoo.messagebus.Reply; import com.yahoo.messagebus.ReplyHandler; -import com.yahoo.messagebus.routing.Route; import java.time.Duration; import static com.yahoo.documentapi.DocumentOperationParameters.parameters; -import static com.yahoo.documentapi.messagebus.MessageBusAsyncSession.setParameters; /** * An implementation of the SyncSession interface running over message bus. @@ -89,10 +87,14 @@ public class MessageBusSyncSession implements MessageBusSession, SyncSession, Re * @return The reply received. */ public Reply syncSend(Message msg) { - return syncSend(msg, defaultTimeout); + return syncSend(msg, parameters()); } - private Reply syncSend(Message msg, Duration timeout) { + private Reply syncSend(Message msg, DocumentOperationParameters parameters) { + return syncSend(msg, defaultTimeout, parameters()); + } + + private Reply syncSend(Message msg, Duration timeout, DocumentOperationParameters parameters) { if (timeout != null) { msg.setTimeRemaining(timeout.toMillis()); } @@ -102,7 +104,7 @@ public class MessageBusSyncSession implements MessageBusSession, SyncSession, Re msg.pushHandler(this); // store monitor Result result = null; while (result == null || result.type() == Result.ResultType.TRANSIENT_ERROR) { - result = session.send(msg); + result = session.send(msg, parameters); if (result != null && result.isSuccess()) { break; } @@ -130,8 +132,11 @@ public class MessageBusSyncSession implements MessageBusSession, SyncSession, Re @Override public void put(DocumentPut documentPut, DocumentOperationParameters parameters) { PutDocumentMessage msg = new PutDocumentMessage(documentPut); - setParameters(msg, parameters, DocumentProtocol.Priority.NORMAL_3); - syncSendPutDocumentMessage(msg); + msg.setPriority(parameters.priority().orElse(DocumentProtocol.Priority.NORMAL_3)); + Reply reply = syncSend(msg, parameters); + if (reply.hasErrors()) { + throw new DocumentAccessException(MessageBusAsyncSession.getErrorMessage(reply), reply.getErrorCodes()); + } } @Override @@ -147,9 +152,9 @@ public class MessageBusSyncSession implements MessageBusSession, SyncSession, Re @Override public Document get(DocumentId id, DocumentOperationParameters parameters, Duration timeout) { GetDocumentMessage msg = new GetDocumentMessage(id, parameters.fieldSet().orElse(AllFields.NAME)); - setParameters(msg, parameters, DocumentProtocol.Priority.NORMAL_1); + msg.setPriority(parameters.priority().orElse(DocumentProtocol.Priority.NORMAL_1)); - Reply reply = syncSend(msg, timeout != null ? timeout : defaultTimeout); + Reply reply = syncSend(msg, timeout != null ? timeout : defaultTimeout, parameters); if (reply.hasErrors()) { throw new DocumentAccessException(MessageBusAsyncSession.getErrorMessage(reply)); } @@ -177,13 +182,9 @@ public class MessageBusSyncSession implements MessageBusSession, SyncSession, Re @Override public boolean remove(DocumentRemove documentRemove, DocumentOperationParameters parameters) { RemoveDocumentMessage msg = new RemoveDocumentMessage(documentRemove.getId()); - setParameters(msg, parameters, DocumentProtocol.Priority.NORMAL_2); + msg.setPriority(parameters.priority().orElse(DocumentProtocol.Priority.NORMAL_2)); msg.setCondition(documentRemove.getCondition()); - return remove(msg); - } - - private boolean remove(RemoveDocumentMessage msg) { - Reply reply = syncSend(msg); + Reply reply = syncSend(msg, parameters); if (reply.hasErrors()) { throw new DocumentAccessException(MessageBusAsyncSession.getErrorMessage(reply)); } @@ -206,8 +207,8 @@ public class MessageBusSyncSession implements MessageBusSession, SyncSession, Re @Override public boolean update(DocumentUpdate update, DocumentOperationParameters parameters) { UpdateDocumentMessage msg = new UpdateDocumentMessage(update); - setParameters(msg, parameters, DocumentProtocol.Priority.NORMAL_2); - Reply reply = syncSend(msg); + msg.setPriority(parameters.priority().orElse(DocumentProtocol.Priority.NORMAL_2)); + Reply reply = syncSend(msg, parameters); if (reply.hasErrors()) { throw new DocumentAccessException(MessageBusAsyncSession.getErrorMessage(reply), reply.getErrorCodes()); } @@ -256,10 +257,4 @@ public class MessageBusSyncSession implements MessageBusSession, SyncSession, Re } } - private void syncSendPutDocumentMessage(PutDocumentMessage putDocumentMessage) { - Reply reply = syncSend(putDocumentMessage); - if (reply.hasErrors()) { - throw new DocumentAccessException(MessageBusAsyncSession.getErrorMessage(reply), reply.getErrorCodes()); - } - } } |