public void handleMembershipChange(Collection<Request> requests) { Collection<Address> leaving_mbrs=new LinkedHashSet<>(requests.size()); requests.forEach(r -> { if(r.type == Request.SUSPECT) suspected_mbrs.add(r.mbr); else if(r.type == Request.LEAVE) leaving_mbrs.add(r.mbr); }); if(suspected_mbrs.isEmpty() && leaving_mbrs.isEmpty()) return; if(wouldIBeCoordinator(leaving_mbrs)) { log.debug("%s: members are %s, coord=%s: I'm the new coordinator", gms.local_addr, gms.members, gms.local_addr); gms.becomeCoordinator(); Collection<Request> leavingOrSuspectedMembers=new LinkedHashSet<>(); leaving_mbrs.forEach(mbr -> leavingOrSuspectedMembers.add(new Request(Request.LEAVE, mbr))); suspected_mbrs.forEach(mbr -> { leavingOrSuspectedMembers.add(new Request(Request.SUSPECT, mbr)); gms.ack_collector.suspect(mbr); }); suspected_mbrs.clear(); gms.getViewHandler().add(leavingOrSuspectedMembers); } }
public void handleMembershipChange(Collection newMembers, Collection leavingMembers, Collection suspectedMembers) { if(suspectedMembers == null || suspectedMembers.isEmpty()) return; for(Iterator i=suspectedMembers.iterator(); i.hasNext();) { Address mbr=(Address)i.next(); if(!suspected_mbrs.contains(mbr)) suspected_mbrs.addElement(mbr); } if(log.isDebugEnabled()) log.debug("suspected members=" + suspectedMembers + ", suspected_mbrs=" + suspected_mbrs); if(wouldIBeCoordinator()) { if(log.isDebugEnabled()) log.debug("members are " + gms.members + ", coord=" + gms.local_addr + ": I'm the new coord !"); suspected_mbrs.removeAllElements(); gms.becomeCoordinator(); for(Iterator i=suspectedMembers.iterator(); i.hasNext();) { Address mbr=(Address)i.next(); gms.getViewHandler().add(new GMS.Request(GMS.Request.SUSPECT, mbr, true, null)); gms.ack_collector.suspect(mbr); } } }
public void handleMembershipChange(Collection<Request> requests) { Collection<Address> leaving_mbrs=new LinkedHashSet<>(requests.size()); requests.forEach(r -> { if(r.type == Request.SUSPECT) suspected_mbrs.add(r.mbr); else if(r.type == Request.LEAVE) leaving_mbrs.add(r.mbr); }); if(suspected_mbrs.isEmpty() && leaving_mbrs.isEmpty()) return; if(wouldIBeCoordinator(leaving_mbrs)) { log.debug("%s: members are %s, coord=%s: I'm the new coordinator", gms.local_addr, gms.members, gms.local_addr); gms.becomeCoordinator(); Collection<Request> leavingOrSuspectedMembers=new LinkedHashSet<>(); leaving_mbrs.forEach(mbr -> leavingOrSuspectedMembers.add(new Request(Request.LEAVE, mbr))); suspected_mbrs.forEach(mbr -> { leavingOrSuspectedMembers.add(new Request(Request.SUSPECT, mbr)); gms.ack_collector.suspect(mbr); }); suspected_mbrs.clear(); gms.getViewHandler().add(leavingOrSuspectedMembers); } }