Class CreditMap

  • Direct Known Subclasses:
    NonBlockingCreditMap

    public class CreditMap
    extends java.lang.Object
    Maintains credits for senders, when credits fall below 0, a sender blocks until new credits have been received.
    Author:
    Bela Ban
    • Field Detail

      • max_credits

        protected final long max_credits
      • credits

        protected final java.util.Map<Address,​java.lang.Long> credits
      • min_credits

        protected long min_credits
      • accumulated_credits

        protected long accumulated_credits
      • lock

        protected final java.util.concurrent.locks.Lock lock
      • credits_available

        protected final java.util.concurrent.locks.Condition credits_available
      • num_blockings

        protected int num_blockings
      • avg_block_time

        protected final Average avg_block_time
      • done

        protected boolean done
    • Constructor Detail

      • CreditMap

        public CreditMap​(long max_credits)
      • CreditMap

        public CreditMap​(long max_credits,
                         java.util.concurrent.locks.Lock lock)
    • Method Detail

      • getAccumulatedCredits

        public long getAccumulatedCredits()
      • getMinCredits

        public long getMinCredits()
      • getNumBlockings

        public int getNumBlockings()
      • getAverageBlockTime

        public double getAverageBlockTime()
      • keys

        public java.util.Set<Address> keys()
      • get

        public java.lang.Long get​(Address member)
      • remove

        public java.lang.Long remove​(Address key)
      • putIfAbsent

        public java.lang.Long putIfAbsent​(Address key)
      • getMembersWithInsufficientCredits

        public java.util.List<Address> getMembersWithInsufficientCredits​(long credit_needed)
      • getMembersWithCreditsLessThan

        public java.util.List<Tuple<Address,​java.lang.Long>> getMembersWithCreditsLessThan​(long min_credits)
      • decrement

        public boolean decrement​(Message msg,
                                 int credits,
                                 long timeout)
        Decrements credits bytes from all. Returns true if successful, or false if not. Blocks for timeout ms (if greater than 0).
        Parameters:
        msg - The message to be sent
        credits - Number of bytes to decrement from all members
        timeout - Number of milliseconds to wait until more credits have been received
        Returns:
        True if decrementing credits bytes succeeded, false otherwise
      • replenish

        public void replenish​(Address sender,
                              long new_credits)
      • replenishAll

        public void replenishAll()
      • clear

        public void clear()
      • reset

        public CreditMap reset()
        Sets this credit to be done and releases all blocked threads. This is not revertable; a new credit has to be created
      • resetStats

        public void resetStats()
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • decrement

        protected boolean decrement​(long credits)
      • computeLowestCredit

        protected long computeLowestCredit()
        Needs to be called with lock held
      • computeLowestCreditWithAccumulated

        public long computeLowestCreditWithAccumulated()
      • decrementAndAdd

        protected void decrementAndAdd​(Address member,
                                       long new_credits)
        Decrements credits bytes from all elements and adds new_credits to member (if non null). The lowest credit needs to be greater than min_credits. Needs to be called with lock held
        Parameters:
        member - The member to which new_credits are added. NOP if null
        new_credits - Number of bytes to add to member. NOP if 0.
      • flushAccumulatedCredits

        protected void flushAccumulatedCredits()