@Override public void destroy() { session.destroy(); }
@Override public Result get(DocumentId id) { return get(id, DocumentProtocol.Priority.NORMAL_1); }
@Override public String getRoute() { return session.getRoute(); }
private void syncSendPutDocumentMessage(PutDocumentMessage putDocumentMessage) { Reply reply = syncSend(putDocumentMessage); if (reply.hasErrors()) { throw new DocumentAccessException(MessageBusAsyncSession.getErrorMessage(reply), reply.getErrorCodes()); } } }
@Override public Result remove(DocumentId id, DocumentProtocol.Priority pri) { RemoveDocumentMessage msg = new RemoveDocumentMessage(id); msg.setPriority(pri); return send(msg); }
@Override public MessageBusAsyncSession createAsyncSession(AsyncParameters parameters) { return new MessageBusAsyncSession(parameters, messageBus(), this.params); }
@Override public Result remove(DocumentId id) { return remove(id, DocumentProtocol.Priority.NORMAL_2); }
@Override public int getTraceLevel() { return session.getTraceLevel(); }
@Override public Result put(Document document) { return put(document, DocumentProtocol.Priority.NORMAL_3); }
private static Result toResult(long reqId, com.yahoo.messagebus.Result mbusResult) { if (mbusResult.isAccepted()) { return new Result(reqId); } return new Result( messageBusErrorToResultType(mbusResult.getError().getCode()), new Error(mbusResult.getError().getMessage() + " (" + mbusResult.getError().getCode() + ")")); }
private boolean remove(RemoveDocumentMessage msg) { Reply reply = syncSend(msg); if (reply.hasErrors()) { throw new DocumentAccessException(MessageBusAsyncSession.getErrorMessage(reply)); } if (reply.getType() != DocumentProtocol.REPLY_REMOVEDOCUMENT) { throw new DocumentAccessException("Received unknown response: " + reply); } return ((RemoveDocumentReply)reply).wasFound(); }
@Override public Result update(DocumentUpdate update, DocumentProtocol.Priority pri) { UpdateDocumentMessage msg = new UpdateDocumentMessage(update); msg.setPriority(pri); return send(msg); }
/** * Creates a new sync session running on message bus logic. * * @param syncParams Common syncsession parameters, not used. * @param bus The message bus on which to run. * @param mbusParams Parameters concerning message bus configuration. */ MessageBusSyncSession(SyncParameters syncParams, MessageBus bus, MessageBusParams mbusParams) { session = new MessageBusAsyncSession(new AsyncParameters(), bus, mbusParams, this); defaultTimeout = syncParams.defaultTimeout().orElse(null); }
@Override public boolean update(DocumentUpdate update, DocumentProtocol.Priority pri) { UpdateDocumentMessage msg = new UpdateDocumentMessage(update); msg.setPriority(pri); Reply reply = syncSend(msg); if (reply.hasErrors()) { throw new DocumentAccessException(MessageBusAsyncSession.getErrorMessage(reply), reply.getErrorCodes()); } if (reply.getType() != DocumentProtocol.REPLY_UPDATEDOCUMENT) { throw new DocumentAccessException("Received unknown response: " + reply); } return ((UpdateDocumentReply)reply).wasFound(); }
@Override public Result get(DocumentId id, DocumentProtocol.Priority pri) { GetDocumentMessage msg = new GetDocumentMessage(id, "[all]"); msg.setPriority(pri); return send(msg); }
@Override @Deprecated // TODO: Remove on Vespa 8 public Result get(DocumentId id, boolean headersOnly, DocumentProtocol.Priority pri) { return get(id, pri); }
@Override public Document get(DocumentId id, String fieldSet, DocumentProtocol.Priority pri, Duration timeout) { GetDocumentMessage msg = new GetDocumentMessage(id, fieldSet); msg.setPriority(pri); Reply reply = syncSend(msg, timeout != null ? timeout : defaultTimeout); if (reply.hasErrors()) { throw new DocumentAccessException(MessageBusAsyncSession.getErrorMessage(reply)); } if (reply.getType() != DocumentProtocol.REPLY_GETDOCUMENT) { throw new DocumentAccessException("Received unknown response: " + reply); } GetDocumentReply docReply = ((GetDocumentReply)reply); Document doc = docReply.getDocument(); if (doc != null) { doc.setLastModified(docReply.getLastModified()); } return doc; }
@Override public Result put(Document document, DocumentProtocol.Priority pri) { PutDocumentMessage msg = new PutDocumentMessage(new DocumentPut(document)); msg.setPriority(pri); return send(msg); }
private static Response toError(Reply reply, long reqId) { Message msg = reply.getMessage(); String err = getErrorMessage(reply); switch (msg.getType()) { case DocumentProtocol.MESSAGE_PUTDOCUMENT: return new DocumentResponse(reqId, ((PutDocumentMessage)msg).getDocumentPut().getDocument(), err, false); case DocumentProtocol.MESSAGE_UPDATEDOCUMENT: return new DocumentUpdateResponse(reqId, ((UpdateDocumentMessage)msg).getDocumentUpdate(), err, false); case DocumentProtocol.MESSAGE_REMOVEDOCUMENT: return new DocumentIdResponse(reqId, ((RemoveDocumentMessage)msg).getDocumentId(), err, false); case DocumentProtocol.MESSAGE_GETDOCUMENT: return new DocumentIdResponse(reqId, ((GetDocumentMessage)msg).getDocumentId(), err, false); default: return new Response(reqId, err, false); } }
private Reply syncSend(Message msg, Duration timeout) { if (timeout != null) { msg.setTimeRemaining(timeout.toMillis()); } try { RequestMonitor monitor = new RequestMonitor(); msg.setContext(monitor); msg.pushHandler(this); // store monitor Result result = null; while (result == null || result.type() == Result.ResultType.TRANSIENT_ERROR) { result = session.send(msg); if (result != null && result.isSuccess()) { break; } Thread.sleep(100); } if (!result.isSuccess()) { throw new DocumentAccessException(result.getError().toString()); } return monitor.waitForReply(); } catch (InterruptedException e) { throw new DocumentAccessException(e); } }