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

"Bela Ban" <[email protected]> Mon, 4 Oct 2010 12:55:34 +0000
Newsgroups gmane.comp.java.javagroups.cvs
Message-ID <[email protected]>
  User: belaban 
  Date: 10/10/04 12:55:34

  Modified:    src/org/jgroups/protocols FD_SOCK.java
  Log:
  reduced number of suspect messages (https://jira.jboss.org/browse/JGRP-1243)
  
  Revision  Changes    Path
  1.124     +38 -12    JGroups/src/org/jgroups/protocols/FD_SOCK.java
  
  Index: FD_SOCK.java
  ===================================================================
  RCS file: /cvsroot/javagroups/JGroups/src/org/jgroups/protocols/FD_SOCK.java,v
  retrieving revision 1.123
  retrieving revision 1.124
  diff -u -r1.123 -r1.124
  --- FD_SOCK.java	4 Oct 2010 11:40:12 -0000	1.123
  +++ FD_SOCK.java	4 Oct 2010 12:55:33 -0000	1.124
  @@ -32,7 +32,7 @@
    * monitors the client side of the socket connection (to monitor a peer) and another one that manages the
    * server socket. However, those threads will be idle as long as both peers are running.
    * @author Bela Ban May 29 2001
  - * @version $Id: FD_SOCK.java,v 1.123 2010/10/04 11:40:12 belaban Exp $
  + * @version $Id: FD_SOCK.java,v 1.124 2010/10/04 12:55:33 belaban Exp $
    */
   @MBean(description="Failure detection protocol based on sockets connecting members")
   @DeprecatedProperty(names={"srv_sock_bind_addr"})
  @@ -83,7 +83,11 @@
   
       
       private final Vector<Address> members=new Vector<Address>(11); // list of group members (updated on VIEW_CHANGE)
  -    private final Vector<Address> pingable_mbrs=new Vector<Address>(11); 
  +
  +    protected final Set<Address> suspected_mbrs=new HashSet<Address>();
  +
  +    private final Vector<Address> pingable_mbrs=new Vector<Address>(11);
  +
       volatile boolean srv_sock_sent=false; // has own socket been broadcast yet ?
       /** Used to rendezvous on GET_CACHE and GET_CACHE_RSP */
       private final Promise<Map<Address,IpAddress>> get_cache_promise=new Promise<Map<Address,IpAddress>>();
  @@ -167,6 +171,7 @@
           stopPingerThread();        
           stopServerSocket(true); // graceful close
           bcast_task.removeAll();
  +        suspected_mbrs.clear();
       }
   
       public void resetStats() {
  @@ -191,16 +196,7 @@
                           if(hdr.mbrs != null) {
                               if(log.isTraceEnabled())
                                   log.trace("received SUSPECT message from " + msg.getSrc() + ": suspects=" + hdr.mbrs);
  -                            for(Address m: hdr.mbrs) {
  -                                if(local_addr != null && m.equals(local_addr)) {
  -                                    if(log.isWarnEnabled() && log_suspected_msgs)
  -                                        log.warn("I (" + local_addr + ") was suspected by " + msg.getSrc() +
  -                                                "; ignoring the SUSPECT message");
  -                                    continue;
  -                                }
  -                                up_prot.up(new Event(Event.SUSPECT, m));
  -                                down_prot.down(new Event(Event.SUSPECT, m));
  -                            }
  +                            suspect(hdr.mbrs);
                           }
                           break;
   
  @@ -304,6 +300,7 @@
                   synchronized(this) {
                       members.removeAllElements();
                       members.addAll(new_mbrs);
  +                    suspected_mbrs.retainAll(new_mbrs);
                       cache.keySet().retainAll(members); // remove all entries in 'cache' which are not in the new membership
                       bcast_task.adjustSuspectedMembers(members);
                       pingable_mbrs.removeAllElements();
  @@ -428,6 +425,35 @@
       /* ----------------------------------- Private Methods -------------------------------------- */
   
   
  +    void suspect(Set<Address> suspects) {
  +        if(suspects == null)
  +            return;
  +
  +        final List<Address> eligible_mbrs=new ArrayList<Address>();
  +        synchronized(this) {
  +            for(Address suspect: suspects) {
  +                suspect_history.add(suspect);
  +                suspected_mbrs.add(suspect);
  +            }
  +            eligible_mbrs.addAll(members);
  +            eligible_mbrs.removeAll(suspected_mbrs);
  +        }
  +
  +        // Check if we're coord, then send up the stack
  +        if(local_addr != null && !eligible_mbrs.isEmpty()) {
  +            Address first=eligible_mbrs.get(0);
  +            if(local_addr.equals(first)) {
  +                if(log.isDebugEnabled())
  +                    log.debug("suspecting " + suspected_mbrs);
  +                for(Address suspect: suspects) {
  +                    up_prot.up(new Event(Event.SUSPECT, suspect));
  +                    down_prot.down(new Event(Event.SUSPECT, suspect));
  +                }
  +            }
  +        }
  +    }
  +
  +
       void handleSocketClose(Exception ex) {
           teardownPingSocket();     // make sure we have no leftovers
           if(!regular_sock_close) { // only suspect if socket was not closed regularly (by interruptPingerThread())
  
  
  

------------------------------------------------------------------------------
Virtualization is moving to the mainstream and overtaking non-virtualized
environment for deploying applications. Does it make network security 
easier or more difficult to achieve? Read this whitepaper to separate the 
two and get a better understanding.
http://p.sf.net/sfu/hp-phase2-d2d