CVS update: JGroups/src/org/jgroups/protocols MFC.java

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

  Modified:    src/org/jgroups/protocols MFC.java
  Log:
  ns
  
  Revision  Changes    Path
  1.2       +25 -45    JGroups/src/org/jgroups/protocols/MFC.java
  
  Index: MFC.java
  ===================================================================
  RCS file: /cvsroot/javagroups/JGroups/src/org/jgroups/protocols/MFC.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- MFC.java	31 Aug 2010 12:21:55 -0000	1.1
  +++ MFC.java	6 Sep 2010 11:08:08 -0000	1.2
  @@ -1,17 +1,13 @@
   package org.jgroups.protocols;
   
  -import org.jgroups.*;
  -import org.jgroups.annotations.*;
  -import org.jgroups.stack.Protocol;
  -import org.jgroups.util.BoundedList;
  -import org.jgroups.util.Util;
  -
  -import java.io.DataInputStream;
  -import java.io.DataOutputStream;
  -import java.io.IOException;
  +import org.jgroups.Address;
  +import org.jgroups.Event;
  +import org.jgroups.Message;
  +import org.jgroups.annotations.GuardedBy;
  +import org.jgroups.annotations.MBean;
  +import org.jgroups.annotations.ManagedOperation;
  +
   import java.util.*;
  -import java.util.concurrent.ConcurrentHashMap;
  -import java.util.concurrent.ConcurrentMap;
   import java.util.concurrent.TimeUnit;
   import java.util.concurrent.locks.Condition;
   import java.util.concurrent.locks.Lock;
  @@ -36,7 +32,7 @@
    * <li>Receivers don't send the full credits (max_credits), but rather the actual number of bytes received
    * <ol/>
    * @author Bela Ban
  - * @version $Id: MFC.java,v 1.1 2010/08/31 12:21:55 belaban Exp $
  + * @version $Id: MFC.java,v 1.2 2010/09/06 11:08:08 belaban Exp $
    */
   @MBean(description="Simple flow control protocol based on a credit system")
   public class MFC extends FlowControl {
  @@ -125,6 +121,10 @@
   
       protected Object handleDownMessage(final Event evt, final Message msg, int length) {
           Address dest=msg.getDest();
  +        if(dest != null && !dest.isMulticastAddress()) {
  +            log.error(getClass().getSimpleName() + " doesn't handle unicast messages; passing message down");
  +            return down_prot.down(evt);
  +        }
   
           if(max_block_times != null) {
               long tmp=getMaxBlockTime(length);
  @@ -140,7 +140,7 @@
                           log.trace("bypassing blocking to avoid deadlocking " + Thread.currentThread());
                   }
                   else {
  -                    determineCreditors(dest, length);
  +                    determineCreditors(length);
                       long start_blocking=System.currentTimeMillis();
                       num_blockings++; // we count overall blockings, not blockings for *all* threads
                       if(log.isTraceEnabled())
  @@ -204,7 +204,7 @@
                   }
               }
   
  -            long tmp=decrementCredit(sent, dest, length);
  +            long tmp=decrementCredit(sent, length);
               if(tmp != -1)
                   lowest_credit=Math.min(tmp, lowest_credit);
           }
  @@ -217,23 +217,13 @@
       }
   
       /**
  -     * Checks whether one member (unicast msg) or all members (multicast msg) have enough credits. Add those
  -     * that don't to the creditors list. Called with lock held
  -     * @param dest
  +     * Adds members which have not enough credits to the creditors list. Called with lock held
        * @param length
        */
  -    protected void determineCreditors(Address dest, int length) {
  -        boolean multicast=dest == null || dest.isMulticastAddress();
  -        if(multicast) {
  -            for(Map.Entry<Address,Credit> entry: sent.entrySet()) {
  -                if(entry.getValue().get() <= length)
  -                    creditors.add(entry.getKey());
  -            }
  -        }
  -        else {
  -            Credit cred=sent.get(dest);
  -            if(cred != null && cred.get() <= length)
  -                creditors.add(dest);
  +    protected void determineCreditors(int length) {
  +        for(Map.Entry<Address,Credit> entry: sent.entrySet()) {
  +            if(entry.getValue().get() <= length)
  +                creditors.add(entry.getKey());
           }
       }
   
  @@ -247,23 +237,13 @@
        * @param credits
        * @return The lowest number of credits left, or -1 if a unicast member was not found
        */
  -    protected long decrementCredit(Map<Address,Credit> map, Address dest, long credits) {
  -        boolean multicast=dest == null || dest.isMulticastAddress();
  +    protected long decrementCredit(Map<Address,Credit> map, long credits) {
  +        if(map.isEmpty())
  +            return -1;
           long lowest=max_credits;
  -
  -        if(multicast) {
  -            if(map.isEmpty())
  -                return -1;
  -            for(Credit cred: map.values())
  -                lowest=Math.min(cred.decrement(credits), lowest);
  -            return lowest;
  -        }
  -        else {
  -            Credit cred=map.get(dest);
  -            if(cred != null)
  -                return lowest=cred.decrement(credits);
  -            }
  -        return -1;
  +        for(Credit cred: map.values())
  +            lowest=Math.min(cred.decrement(credits), lowest);
  +        return lowest;
       }
   
       protected void handleCredit(Address sender, Number increase) {
  
  
  

------------------------------------------------------------------------------
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.