/** * Adds a digest to this digest. For each sender in the other digest, the merge() method will be called. */ public MutableDigest merge(Digest digest) { if(digest == null) return this; for(Entry entry: digest) merge(entry.getMember(), entry.getHighestDeliveredSeqno(), entry.getHighestReceivedSeqno()); return this; }
/** * Merge all digests into one. For each sender, the new value is max(highest_delivered), * max(highest_received). This method has a lock on merge_rsps */ protected MutableDigest consolidateDigests(final View new_view, final List<MergeData> merge_rsps) { MutableDigest retval=new MutableDigest(new_view.getMembersRaw()); for(MergeData data: merge_rsps) { Digest tmp_digest=data.getDigest(); if(tmp_digest != null) retval.merge(tmp_digest); } return retval; } }
/** * Merge all digests into one. For each sender, the new value is min(low_seqno), max(high_seqno), * max(high_seqno_seen) */ private Digest consolidateDigests(Vector<MergeData> merge_rsps, int num_mbrs) { MergeData data; Digest tmp_digest; MutableDigest retval=new MutableDigest(num_mbrs); for(int i=0; i < merge_rsps.size(); i++) { data=merge_rsps.elementAt(i); tmp_digest=data.getDigest(); if(tmp_digest == null) { if(log.isErrorEnabled()) log.error("tmp_digest == null; skipping"); continue; } retval.merge(tmp_digest); } return retval.copy(); }
/** * Adds a digest to this digest. This digest must have enough space to add the other digest; otherwise an error * message will be written. For each sender in the other digest, the merge() method will be called. */ public void merge(Digest digest) { if(digest == null) { if(log.isErrorEnabled()) log.error("digest to be merged with is null"); return; } checkSealed(); Map.Entry<Address,Entry> entry; Address sender; Entry val; for(Iterator<Map.Entry<Address,Entry>> it=digest.senders.entrySet().iterator(); it.hasNext();) { entry=it.next(); sender=entry.getKey(); val=entry.getValue(); if(val != null) { merge(sender, val.getLow(), val.getHighestDeliveredSeqno(), val.getHighestReceivedSeqno()); } } }
/** * Adds a digest to this digest. For each sender in the other digest, the merge() method will be called. */ public MutableDigest merge(Digest digest) { if(digest == null) return this; for(Entry entry: digest) merge(entry.getMember(), entry.getHighestDeliveredSeqno(), entry.getHighestReceivedSeqno()); return this; }
/** * Merge all digests into one. For each sender, the new value is max(highest_delivered), * max(highest_received). This method has a lock on merge_rsps */ protected MutableDigest consolidateDigests(final View new_view, final List<MergeData> merge_rsps) { MutableDigest retval=new MutableDigest(new_view.getMembersRaw()); for(MergeData data: merge_rsps) { Digest tmp_digest=data.getDigest(); if(tmp_digest != null) retval.merge(tmp_digest); } return retval; } }