Class MutableDigest

  • All Implemented Interfaces:
    java.io.Externalizable, java.io.Serializable, Streamable

    public class MutableDigest
    extends Digest
    A mutable version of Digest (which is immutable
    Version:
    $Id: MutableDigest.java,v 1.6 2007/05/29 10:10:47 belaban Exp $
    Author:
    Bela Ban
    See Also:
    Serialized Form
    • Constructor Detail

      • MutableDigest

        public MutableDigest()
        Used for externalization
      • MutableDigest

        public MutableDigest​(int size)
      • MutableDigest

        public MutableDigest​(Digest digest)
    • Method Detail

      • getSenders

        public java.util.Map<Address,​Digest.Entry> getSenders()
        Description copied from class: Digest
        Returns an unmodifiable map, so modifications will result in exceptions
        Overrides:
        getSenders in class Digest
      • add

        public void add​(Address sender,
                        long low_seqno,
                        long highest_delivered_seqno)
      • add

        public void add​(Address sender,
                        long low_seqno,
                        long highest_delivered_seqno,
                        long highest_received_seqno)
      • add

        public void add​(Digest digest)
      • replace

        public void replace​(Digest d)
      • set

        public boolean set​(Address sender,
                           long low_seqno,
                           long highest_delivered_seqno,
                           long highest_received_seqno)
      • merge

        public void merge​(Digest digest)
        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.
      • merge

        public void merge​(Address sender,
                          long low_seqno,
                          long highest_delivered_seqno,
                          long highest_received_seqno)
        Similar to add(), but if the sender already exists, its seqnos will be modified (no new entry) as follows:
        1. this.low_seqno=min(this.low_seqno, low_seqno)
        2. this.highest_delivered_seqno=max(this.highest_delivered_seqno, highest_delivered_seqno)
        3. this.highest_received_seqno=max(this.highest_received_seqno, highest_received_seqno)
        If the sender doesn not exist, a new entry will be added (provided there is enough space)
      • incrementHighestDeliveredSeqno

        public void incrementHighestDeliveredSeqno​(Address sender)
        Increments the sender's high_seqno by 1.
      • resetAt

        public void resetAt​(Address sender)
        Resets the seqnos for the sender at 'index' to 0. This happens when a member has left the group, but it is still in the digest. Resetting its seqnos ensures that no-one will request a message retransmission from the dead member.
      • clear

        public void clear()
      • setHighestDeliveredAndSeenSeqnos

        public void setHighestDeliveredAndSeenSeqnos​(Address sender,
                                                     long low_seqno,
                                                     long highest_delivered_seqno,
                                                     long highest_received_seqno)
      • seal

        public boolean seal()
        Seals the instance against modifications