CVS update: JGroups/src/org/jgroups/util CreditMap.java

"Bela Ban" <[email protected]>
Newsgroups gmane.comp.java.javagroups.cvs
Message-ID <[email protected]>
  User: belaban 
  Date: 10/09/07 15:30:09

  Modified:    src/org/jgroups/util CreditMap.java
  Log:
  ns
  
  Revision  Changes    Path
  1.5       +30 -5     JGroups/src/org/jgroups/util/CreditMap.java
  
  Index: CreditMap.java
  ===================================================================
  RCS file: /cvsroot/javagroups/JGroups/src/org/jgroups/util/CreditMap.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- CreditMap.java	7 Sep 2010 14:00:51 -0000	1.4
  +++ CreditMap.java	7 Sep 2010 15:30:09 -0000	1.5
  @@ -3,9 +3,7 @@
   import org.jgroups.Address;
   import org.jgroups.annotations.GuardedBy;
   
  -import java.util.HashMap;
  -import java.util.Map;
  -import java.util.Set;
  +import java.util.*;
   import java.util.concurrent.TimeUnit;
   import java.util.concurrent.locks.Condition;
   import java.util.concurrent.locks.Lock;
  @@ -14,7 +12,7 @@
   /**
    * Maintains credits for senders, when credits fall below 0, a sender blocks until new credits have been received.
    * @author Bela Ban
  - * @version $Id: CreditMap.java,v 1.4 2010/09/07 14:00:51 belaban Exp $
  + * @version $Id: CreditMap.java,v 1.5 2010/09/07 15:30:09 belaban Exp $
    */
   public class CreditMap {
       protected final long              max_credits;
  @@ -53,7 +51,14 @@
       public Long remove(Address key) {
           lock.lock();
           try {
  -            return credits.remove(key);
  +            Long retval=credits.remove(key);
  +            flushAccumulatedCredits();
  +            long new_min=computeLowestCredit();
  +            if(new_min > min_credits) {
  +                min_credits=new_min;
  +                credits_available.signalAll();
  +            }
  +            return retval;
           }
           finally {
               lock.unlock();
  @@ -73,6 +78,26 @@
       }
   
   
  +    public List<Address> getMembersWithInsufficientCredits(long credit_needed) {
  +        List<Address> retval=new LinkedList<Address>();
  +
  +        lock.lock();
  +        try {
  +            if(credit_needed > min_credits) {
  +                flushAccumulatedCredits();
  +                for(Map.Entry<Address,Long> entry: credits.entrySet()) {
  +                    if(entry.getValue().longValue() < credit_needed)
  +                        retval.add(entry.getKey());
  +                }
  +            }
  +            return retval;
  +        }
  +        finally {
  +            lock.unlock();
  +        }
  +    }
  +    
  +
       /**
        * Decrements credits bytes from all. Returns true if successful, or false if not. Blocks for timeout ms
        * (if greater than 0).
  
  
  

------------------------------------------------------------------------------
This SF.net Dev2Dev email is sponsored by:

Show off your parallel programming skills.
Enter the Intel(R) Threading Challenge 2010.
http://p.sf.net/sfu/intel-thread-sfd
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.