protected void sendJoinResponses(JoinRsp jr, Collection<Address> joiners) { if(jr == null || joiners == null || joiners.isEmpty()) return; Buffer marshalled_jr=marshal(jr); for(Address joiner: joiners) { log.trace("%s: sending join-rsp to %s: view=%s (%d mbrs)", local_addr, joiner, jr.getView(), jr.getView().size()); sendJoinResponse(marshalled_jr, joiner); } }
protected boolean installViewIfValidJoinRsp(final Promise<JoinRsp> join_promise, boolean block_for_rsp) { boolean success=false; JoinRsp rsp=null; try { if(join_promise.hasResult()) rsp=join_promise.getResult(1, true); else if(block_for_rsp) rsp=join_promise.getResult(gms.join_timeout, true); return success=rsp != null && isJoinResponseValid(rsp) && installView(rsp.getView(), rsp.getDigest()); } finally { if(success) gms.sendViewAck(rsp.getView().getCreator()); } }
/** In case we get a different JOIN_RSP from a previous JOIN_REQ sent by us (as a client), we simply apply the * new view if it is greater than ours * * @param join_rsp */ public void handleJoinResponse(JoinRsp join_rsp) { View v=join_rsp.getView(); ViewId tmp_vid=v != null? v.getViewId() : null; ViewId my_view=gms.getViewId(); if(tmp_vid != null && my_view != null && tmp_vid.compareToIDs(my_view) > 0) { Digest d=join_rsp.getDigest(); gms.installView(v, d); } }
protected boolean isJoinResponseValid(final JoinRsp rsp) { if(rsp.getFailReason() != null) throw new SecurityException(rsp.getFailReason()); Digest tmp_digest=rsp.getDigest(); if(tmp_digest == null || tmp_digest.capacity() == 0) { log.warn("%s: digest is empty: digest=%s", gms.local_addr, rsp.getDigest()); return false; } if(!tmp_digest.contains(gms.local_addr)) { log.error("%s: digest in JOIN_RSP does not contain myself; join response: %s", gms.local_addr, rsp); return false; } if(rsp.getView() == null) { log.error("%s: JoinRsp has a null view, skipping it", gms.local_addr); return false; } return true; }
protected void sendJoinResponses(JoinRsp jr, Collection<Address> joiners) { if(jr == null || joiners == null || joiners.isEmpty()) return; Buffer marshalled_jr=marshal(jr); for(Address joiner: joiners) { log.trace("%s: sending join-rsp to %s: view=%s (%d mbrs)", local_addr, joiner, jr.getView(), jr.getView().size()); sendJoinResponse(marshalled_jr, joiner); } }
/** In case we get a different JOIN_RSP from a previous JOIN_REQ sent by us (as a client), we simply apply the * new view if it is greater than ours * * @param join_rsp */ public void handleJoinResponse(JoinRsp join_rsp) { View v=join_rsp.getView(); ViewId tmp_vid=v != null? v.getVid() : null; if(tmp_vid != null && gms.view_id != null && tmp_vid.compareTo(gms.view_id) > 0) { gms.installView(v); } }
protected boolean installViewIfValidJoinRsp(final Promise<JoinRsp> join_promise, boolean block_for_rsp) { boolean success=false; JoinRsp rsp=null; try { if(join_promise.hasResult()) rsp=join_promise.getResult(1, true); else if(block_for_rsp) rsp=join_promise.getResult(gms.join_timeout, true); return success=rsp != null && isJoinResponseValid(rsp) && installView(rsp.getView(), rsp.getDigest()); } finally { if(success) gms.sendViewAck(rsp.getView().getCreator()); } }
/** In case we get a different JOIN_RSP from a previous JOIN_REQ sent by us (as a client), we simply apply the * new view if it is greater than ours * * @param join_rsp */ public void handleJoinResponse(JoinRsp join_rsp) { View v=join_rsp.getView(); ViewId tmp_vid=v != null? v.getViewId() : null; ViewId my_view=gms.getViewId(); if(tmp_vid != null && my_view != null && tmp_vid.compareToIDs(my_view) > 0) { Digest d=join_rsp.getDigest(); gms.installView(v, d); } }
tmp_view=rsp.getView(); if(tmp_digest == null || tmp_view == null) { if(log.isErrorEnabled())
protected boolean isJoinResponseValid(final JoinRsp rsp) { if(rsp.getFailReason() != null) throw new SecurityException(rsp.getFailReason()); Digest tmp_digest=rsp.getDigest(); if(tmp_digest == null || tmp_digest.capacity() == 0) { log.warn("%s: digest is empty: digest=%s", gms.local_addr, rsp.getDigest()); return false; } if(!tmp_digest.contains(gms.local_addr)) { log.error("%s: digest in JOIN_RSP does not contain myself; join response: %s", gms.local_addr, rsp); return false; } if(rsp.getView() == null) { log.error("%s: JoinRsp has a null view, skipping it", gms.local_addr); return false; } return true; }