Пример #1
1
  protected Object handleDownMessage(final Event evt, final Message msg, Address dest, int length) {
    if (dest == null) { // 2nd line of defense, not really needed
      log.error(
          getClass().getSimpleName() + " doesn't handle multicast messages; passing message down");
      return down_prot.down(evt);
    }

    Credit cred = sent.get(dest);
    if (cred == null) return down_prot.down(evt);

    long block_time = max_block_times != null ? getMaxBlockTime(length) : max_block_time;

    while (running && sent.containsKey(dest)) {
      boolean rc = cred.decrementIfEnoughCredits(length, block_time);
      if (rc || !running || max_block_times != null) break;

      if (cred.needToSendCreditRequest())
        sendCreditRequest(dest, Math.max(0, max_credits - cred.get()));
    }

    // send message - either after regular processing, or after blocking (when enough credits
    // available again)
    return down_prot.down(evt);
  }
Пример #2
0
  protected void handleCredit(Address sender, long increase) {
    Credit cred;
    if (sender == null || (cred = sent.get(sender)) == null || increase <= 0) return;

    long new_credit = Math.min(max_credits, cred.get() + increase);
    if (log.isTraceEnabled()) {
      StringBuilder sb = new StringBuilder();
      sb.append("received " + increase + " credits from ")
          .append(sender)
          .append(", old credits: ")
          .append(cred)
          .append(", new credits: ")
          .append(new_credit);
      log.trace(sb);
    }
    cred.increment(increase);
  }