public void becomeParticipant() { ParticipantGmsImpl tmp=(ParticipantGmsImpl)impls.get(PART); if(tmp == null) { tmp=new ParticipantGmsImpl(this); impls.put(PART, tmp); } try { tmp.init(); } catch(Exception e) { log.error(Util.getMessage("ExceptionSwitchingToParticipant"), e); } setImpl(tmp); }
public void suspect(Address mbr) { Collection<Request> suspected=new LinkedHashSet<>(1); suspected.add(new Request(Request.SUSPECT, mbr)); handleMembershipChange(suspected); }
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 join(Address mbr, boolean useFlushIfPresent) { wrongMethod("join"); }
/** * Loop: determine coord. If coord is me --> handleLeave(). * Else send handleLeave() to coord until success */ public void leave(Address mbr) { Address coord=gms.determineCoordinator(); if(coord != null) sendLeaveReqTo(coord); gms.becomeClient(); }
public void handleMergeRequest(Address sender, ViewId merge_id) { // only coords handle this method; reject it if we're not coord sendMergeRejectedResponse(sender, merge_id); }
/** * Loop: determine coord. If coord is me --> handleLeave(). * Else send handleLeave() to coord until success */ public void leave(Address mbr) { Address coord; int max_tries=3; Object result; leave_promise.reset(); if(mbr.equals(gms.local_addr)) leaving=true; while((coord=gms.determineCoordinator()) != null && max_tries-- > 0) { if(gms.local_addr.equals(coord)) { // I'm the coordinator gms.becomeCoordinator(); // gms.getImpl().handleLeave(mbr, false); // regular leave gms.getImpl().leave(mbr); // regular leave return; } if(log.isDebugEnabled()) log.debug("sending LEAVE request to " + coord + " (local_addr=" + gms.local_addr + ")"); sendLeaveMessage(coord, mbr); result=leave_promise.getResult(gms.leave_timeout); if(result != null) break; } gms.becomeClient(); }
public void joinWithStateTransfer(Address mbr,boolean useFlushIfPresent) { wrongMethod("join"); }
/** * Loop: determine coord. If coord is me --> handleLeave(). * Else send handleLeave() to coord until success */ public void leave(Address mbr) { Address coord=gms.determineCoordinator(); if(coord != null) sendLeaveReqTo(coord); gms.becomeClient(); }
public void becomeParticipant() { ParticipantGmsImpl tmp=(ParticipantGmsImpl)impls.get(PART); if(tmp == null) { tmp=new ParticipantGmsImpl(this); impls.put(PART, tmp); } try { tmp.init(); } catch(Exception e) { log.error("exception switching to participant", e); } setImpl(tmp); }
public void join(Address mbr) { wrongMethod("join"); }
public void suspect(Address mbr) { Collection emptyVector=new LinkedHashSet(0); Collection suspected=new LinkedHashSet(1); suspected.add(mbr); handleMembershipChange(emptyVector, emptyVector, suspected); }
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 becomeParticipant() { ParticipantGmsImpl tmp=(ParticipantGmsImpl)impls.get(PART); if(tmp == null) { tmp=new ParticipantGmsImpl(this); impls.put(PART, tmp); } try { tmp.init(); } catch(Exception e) { log.error(Util.getMessage("ExceptionSwitchingToParticipant"), e); } setImpl(tmp); }
public void join(Address mbr, boolean useFlushIfPresent) { wrongMethod("join"); }
public void suspect(Address mbr) { Collection<Request> suspected=new LinkedHashSet<>(1); suspected.add(new Request(Request.SUSPECT, mbr)); handleMembershipChange(suspected); }
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 joinWithStateTransfer(Address mbr,boolean useFlushIfPresent) { wrongMethod("join"); }