/** Returns the current view and digest. Try to find a matching digest twice (if not found on the first try) */ public Tuple<View,Digest> getViewAndDigest() { MutableDigest digest=new MutableDigest(view.getMembersRaw()).set(getDigest()); return digest.allSet() || digest.set(getDigest()).allSet()? new Tuple<>(view, digest) : null; }
gms.getDownProtocol().down(new Event(Event.SUSPEND_STABLE, MAX_SUSPEND_TIMEOUT)); MutableDigest join_digest=new MutableDigest(new_view.getMembersRaw()).set(gms.getDigest()); for(Address member: new_mbrs) join_digest.set(member,0,0); // ... and set the new members. their first seqno will be 1 if(join_digest.allSet() || join_digest.set(gms.getDigest()).allSet()) join_rsp=new JoinRsp(new_view, join_digest); else
private MergeData getMergeResponse(Address sender, ViewId merge_id) { Digest digest; View view; MergeData retval; if(sender == null) { if(log.isErrorEnabled()) log.error("sender == null; cannot send back a response"); return null; } if(merging) { if(log.isErrorEnabled()) log.error("merge already in progress"); retval=new MergeData(sender, null, null); retval.merge_rejected=true; return retval; } merging=true; setMergeId(merge_id); if(log.isDebugEnabled()) log.debug("sender=" + sender + ", merge_id=" + merge_id); try { digest=gms.getDigest(); view=new View(gms.view_id.copy(), gms.members.getMembers()); retval=new MergeData(sender, view, digest); retval.view=view; retval.digest=digest; } catch(NullPointerException null_ex) { return null; } return retval; }
/** Returns the current view and digest. Try to find a matching digest twice (if not found on the first try) */ public Tuple<View,Digest> getViewAndDigest() { MutableDigest digest=new MutableDigest(view.getMembersRaw()).set(getDigest()); return digest.allSet() || digest.set(getDigest()).allSet()? new Tuple<>(view, digest) : null; }
/** * Get the view and digest and send back both (MergeData) in the form of a MERGE_RSP to the sender. * If a merge is already in progress, send back a MergeData with the merge_rejected field set to true. */ public void handleMergeRequest(Address sender, ViewId merge_id) { Digest digest; View view; if(sender == null) { if(log.isErrorEnabled()) log.error("sender == null; cannot send back a response"); return; } if(merging) { if(log.isErrorEnabled()) log.error("merge already in progress"); sendMergeRejectedResponse(sender, merge_id); return; } merging=true; /* Clears the view handler queue and discards all JOIN/LEAVE/MERGE requests until after the MERGE */ gms.getViewHandler().suspend(merge_id); setMergeId(merge_id); if(log.isDebugEnabled()) log.debug("sender=" + sender + ", merge_id=" + merge_id); digest=gms.getDigest(); view=new View(gms.view_id.copy(), gms.members.getMembers()); sendMergeResponse(sender, view, digest); }
if(log.isWarnEnabled()) log.warn(mbr + " already present; returning existing view " + gms.view); JoinRsp join_rsp=new JoinRsp(new View(gms.view_id, gms.members.getMembers()), gms.getDigest()); sendJoinResponse(join_rsp, mbr); it.remove(); Digest tmp=gms.getDigest(); // get existing digest MutableDigest join_digest=null; if(tmp == null)
gms.getDownProtocol().down(new Event(Event.SUSPEND_STABLE, MAX_SUSPEND_TIMEOUT)); MutableDigest join_digest=new MutableDigest(new_view.getMembersRaw()).set(gms.getDigest()); for(Address member: new_mbrs) join_digest.set(member,0,0); // ... and set the new members. their first seqno will be 1 if(join_digest.allSet() || join_digest.set(gms.getDigest()).allSet()) join_rsp=new JoinRsp(new_view, join_digest); else