/** * <p>Returns whether or not this message has expired.</p> * * @return True if {@link #getTimeRemainingNow()} is less than or equal to zero. */ public boolean isExpired() { return getTimeRemainingNow() <= 0; }
@Override public void send(Message msg, List<RoutingNode> recipients) { SendContext ctx = new SendContext(this, msg, recipients); double timeout = ctx.msg.getTimeRemainingNow() / 1000.0; for (RoutingNode recipient : ctx.recipients) { RPCServiceAddress address = (RPCServiceAddress)recipient.getServiceAddress(); address.getTarget().resolveVersion(timeout, ctx); } }
public void run() { long timeRemaining = ctx.msg.getTimeRemainingNow(); if (timeRemaining <= 0) { replyError(ctx, ErrorCode.TIMEOUT, "Aborting transmission because zero time remains.");
public DocumentMessage fromDocumentOperation(Processing processing, DocumentOperation documentOperation) { DocumentMessage msg = newMessage(documentOperation); msg.setLoadType(loadType); msg.setPriority(priority); msg.setRoute(requestMsg.getRoute()); msg.setTimeReceivedNow(); msg.setTimeRemaining(requestMsg.getTimeRemainingNow()); msg.getTrace().setLevel(requestMsg.getTrace().getLevel()); if (log.isLoggable(LogLevel.DEBUG)) { log.log(LogLevel.DEBUG, "Created '" + msg.getClass().getName() + "', route = '" + msg.getRoute() + "', priority = '" + msg.getPriority().name() + "', load type = '" + msg.getLoadType() + "', trace level = '" + msg.getTrace().getLevel() + "', time remaining = '" + msg.getTimeRemaining() + "'."); } return msg; }
/** * Schedules the given node for resending, if enabled. This will invoke {@link com.yahoo.messagebus.routing.RoutingNode#prepareForRetry()} * if the node was queued. This method is NOT thread-safe, and should only be called by the messenger thread. * * @param node The node to resend. * @return True if the node was queued. */ public boolean scheduleRetry(RoutingNode node) { Message msg = node.getMessage(); if (!msg.getRetryEnabled()) { return false; } int retry = msg.getRetry() + 1; double delay = node.getReply().getRetryDelay(); if (delay < 0) { delay = retryPolicy.getRetryDelay(retry); } if (msg.getTimeRemainingNow() * 0.001 - delay <= 0) { node.addError(ErrorCode.TIMEOUT, "Timeout exceeded by resender, giving up."); return false; } node.prepareForRetry(); // consumes the reply node.getTrace().trace(TraceLevel.COMPONENT, "Message scheduled for retry " + retry + " in " + delay + " seconds."); msg.setRetry(retry); queue.add(new Entry(node, SystemTimer.INSTANCE.milliTime() + (long)(delay * 1000))); return true; }
@Override public void run() { Message msg = decode(envelope.msg.getProtocol(), payload, Message.class); msg.getTrace().setLevel(envelope.msg.getTrace().getLevel()); msg.setRoute(envelope.msg.getRoute()).getRoute().removeHop(0); msg.setRetryEnabled(envelope.msg.getRetryEnabled()); msg.setRetry(envelope.msg.getRetry()); msg.setTimeRemaining(envelope.msg.getTimeRemainingNow()); msg.pushHandler(new ReplyHandler() { @Override public void handleReply(Reply reply) { new ReplyEnvelope(LocalNetwork.this, envelope, reply).send(); } }); owner.deliverMessage(msg, LocalServiceAddress.class.cast(envelope.recipient.getServiceAddress()) .getSessionName()); } });