コード例 #1
0
ファイル: MFC.java プロジェクト: vblagoje/JGroups
  protected void handleViewChange(List<Address> mbrs) {
    super.handleViewChange(mbrs);

    Set<Address> keys = new HashSet<Address>(credits.keys());
    for (Address key : keys) {
      if (!mbrs.contains(key)) credits.remove(key);
    }

    for (Address key : mbrs) credits.putIfAbsent(key);
  }
コード例 #2
0
ファイル: MFC.java プロジェクト: vblagoje/JGroups
 protected void handleCredit(Address sender, long increase) {
   credits.replenish(sender, increase);
   if (log.isTraceEnabled()) {
     StringBuilder sb = new StringBuilder();
     sb.append("received " + increase + " credits from ")
         .append(sender)
         .append(", new credits for " + sender + " : ")
         .append(credits.get(sender) + ", min_credits=" + credits.getMinCredits());
     log.trace(sb);
   }
 }
コード例 #3
0
ファイル: MFC.java プロジェクト: vblagoje/JGroups
  protected Object handleDownMessage(final Event evt, final Message msg, Address dest, int length) {
    if (dest != null) // 2nd line of defense, not really needed
    return down_prot.down(evt);

    long block_time = max_block_times != null ? getMaxBlockTime(length) : max_block_time;
    while (running) {
      boolean rc = credits.decrement(length, block_time);
      if (rc || max_block_times != null || !running) break;

      if (needToSendCreditRequest()) {
        List<Tuple<Address, Long>> targets = credits.getMembersWithCreditsLessThan(min_credits);
        for (Tuple<Address, Long> tuple : targets)
          sendCreditRequest(tuple.getVal1(), Math.min(max_credits, max_credits - tuple.getVal2()));
      }
    }

    // send message - either after regular processing, or after blocking (when enough credits are
    // available again)
    return down_prot.down(evt);
  }
コード例 #4
0
ファイル: MFC.java プロジェクト: vblagoje/JGroups
 public void stop() {
   super.stop();
   credits.clear();
 }
コード例 #5
0
ファイル: MFC.java プロジェクト: vblagoje/JGroups
 @ManagedAttribute(description = "Total time (ms) spent in flow control block")
 public long getTotalTimeBlocked() {
   return credits.getTotalBlockTime();
 }
コード例 #6
0
ファイル: MFC.java プロジェクト: vblagoje/JGroups
 @ManagedAttribute(description = "Number of times flow control blocks sender")
 public int getNumberOfBlockings() {
   return credits.getNumBlockings();
 }
コード例 #7
0
ファイル: MFC.java プロジェクト: vblagoje/JGroups
 @ManagedOperation(description = "Print sender credits")
 public String printSenderCredits() {
   return credits.toString();
 }
コード例 #8
0
ファイル: MFC.java プロジェクト: vblagoje/JGroups
 @ManagedOperation(description = "Print credits")
 public String printCredits() {
   return super.printCredits()
       + "\nsenders min credits: "
       + credits.computeLowestCreditWithAccumulated();
 }
コード例 #9
0
ファイル: MFC.java プロジェクト: vblagoje/JGroups
 /** Allows to unblock a blocked sender from an external program, e.g. JMX */
 @ManagedOperation(description = "Unblock a sender")
 public void unblock() {
   if (log.isTraceEnabled()) log.trace("unblocking the sender and replenishing all members");
   credits.replenishAll();
 }