Package org.jgroups.util
Class FixedBuffer<T>
- java.lang.Object
-
- org.jgroups.util.Buffer<T>
-
- org.jgroups.util.FixedBuffer<T>
-
- All Implemented Interfaces:
java.io.Closeable,java.lang.AutoCloseable,java.lang.Iterable<T>
public class FixedBuffer<T> extends Buffer<T>
Ring buffer of fixed capacity. Indices low and high point to the beginning and end of the buffer. Sequence numbers (seqnos) are mapped to an index byseqno % capacity
. High can never pass low, and drops the element or blocks when that's the case.
Note that 'null' is not a valid element, but signifies a missing element
The design is described in doc/design/FixedBuffer.txt.- Since:
- 5.4
- Author:
- Bela Ban
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected classFixedBuffer.FixedBufferIterator-
Nested classes/interfaces inherited from class org.jgroups.util.Buffer
Buffer.HighestDeliverable, Buffer.Missing, Buffer.NumDeliverable, Buffer.Remover<R>, Buffer.Visitor<T>
-
-
Field Summary
Fields Modifier and Type Field Description protected AverageMinMaxavg_time_blockedprotected T[]bufHolds the elementsprotected java.util.concurrent.locks.Conditionbuffer_fullprotected java.util.concurrent.atomic.LongAddernum_blockingsprotected java.util.concurrent.atomic.LongAddernum_dropped_msgsNumber of received messages dropped due to full bufferprotected booleanopenUsed to unblock blocked senders on close().
-
Constructor Summary
Constructors Constructor Description FixedBuffer()FixedBuffer(int capacity, long offset)Creates a RingBufferFixedBuffer(long offset)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description T_get(long seqno)Only used for testing !!booleanadd(long seqno, T element, java.util.function.Predicate<T> remove_filter, boolean block_if_full)Adds an element if the element at the given index is null.booleanadd(java.util.List<LongTuple<T>> list, boolean remove_added_elements, T const_value)Adds elements from the listbooleanadd(MessageBatch batch, java.util.function.Function<T,java.lang.Long> seqno_getter, boolean remove_from_batch, T const_value)AverageMinMaxavgTimeBlocked()protected booleanblock(long seqno)intcapacity()Returns the current capacity in the buffer.voidchangeCapacity(int new_capacity)Changes the size of the buffer.protected voiddecreaseCapacity(int new_cap)voidforEach(long from, long to, Buffer.Visitor<T> visitor, boolean nullify)voidforEach(long from, long to, Buffer.Visitor<T> visitor, boolean nullify, boolean respect_stop)Tget(long seqno)protected voidincreaseCapacity(int new_cap)protected intindex(long seqno)java.util.Iterator<T>iterator()Returns an iterator over the elements of the ring buffer in the range [LOW+1 ..java.util.Iterator<T>iterator(long from, long to)longnumBlockings()longnumDroppedMessages()voidopen(boolean b)intpurge(long seqno, boolean force)Purges (nulls) all elements <= seqno.Tremove(boolean nullify)Removes the next non-null element and advances hdjava.util.List<T>removeMany(boolean nullify, int max_results, java.util.function.Predicate<T> filter)<R> RremoveMany(boolean nullify, int max_results, java.util.function.Predicate<T> filter, java.util.function.Supplier<R> result_creator, java.util.function.BiConsumer<R,T> accumulator)voidresetStats()java.util.stream.Stream<T>stream()java.util.stream.Stream<T>stream(long from, long to)-
Methods inherited from class org.jgroups.util.Buffer
add, close, computeSize, dump, forEach, getAdders, getDigest, getHighestDeliverable, getMissing, getMissing, getNumDeliverable, hd, high, highestDelivered, highestDelivered, isEmpty, lock, low, numMissing, offset, purge, remove, removeMany, size, toString
-
-
-
-
Field Detail
-
buf
protected T[] buf
Holds the elements
-
buffer_full
protected final java.util.concurrent.locks.Condition buffer_full
-
open
protected boolean open
Used to unblock blocked senders on close(). When false, senders don't block when full but discard element
-
num_blockings
protected final java.util.concurrent.atomic.LongAdder num_blockings
-
avg_time_blocked
protected final AverageMinMax avg_time_blocked
-
num_dropped_msgs
protected final java.util.concurrent.atomic.LongAdder num_dropped_msgs
Number of received messages dropped due to full buffer
-
-
Constructor Detail
-
FixedBuffer
public FixedBuffer()
-
FixedBuffer
public FixedBuffer(long offset)
-
FixedBuffer
public FixedBuffer(int capacity, long offset)Creates a RingBuffer- Parameters:
capacity- The number of elements the ring buffer's array should hold.offset- The offset. The first element to be added has to be offset +1.
-
-
Method Detail
-
capacity
public int capacity()
Description copied from class:BufferReturns the current capacity in the buffer. This value is fixed in a fixed-size buffer (e.g.FixedBuffer), but can change in a dynamic buffer (DynamicBuffer)
-
numBlockings
public long numBlockings()
-
avgTimeBlocked
public AverageMinMax avgTimeBlocked()
-
numDroppedMessages
public long numDroppedMessages()
-
add
public boolean add(long seqno, T element, java.util.function.Predicate<T> remove_filter, boolean block_if_full)Description copied from class:BufferAdds an element if the element at the given index is null. Returns true if no element existed at the given index, else returns false and doesn't set the element.- Specified by:
addin classBuffer<T>- Parameters:
seqno- The seqno of the elementelement- The element to be addedremove_filter- A filter used to remove all consecutive messages passing the filter (and non-null). This doesn't necessarily null a removed message, but may simply advance an index (e.g. highest delivered). Ignored if null.block_if_full- If true: blocks when an element is to be added to the buffer, else drops the element- Returns:
- True if the element at the computed index was null, else false
-
add
public boolean add(MessageBatch batch, java.util.function.Function<T,java.lang.Long> seqno_getter, boolean remove_from_batch, T const_value)
-
add
public boolean add(java.util.List<LongTuple<T>> list, boolean remove_added_elements, T const_value)
Description copied from class:BufferAdds elements from the list- Specified by:
addin classBuffer<T>- Parameters:
list- The list of tuples of seqnos and elements. If remove_added_elements is true, if elements could not be added (e.g. because they were already present or the seqno was < HD), those elements will be removed from listremove_added_elements- If true, elements that could not be added to the table are removed from listconst_value- If non-null, this value should be used rather than the values of the list tuples- Returns:
- True if at least 1 element was added successfully, false otherwise.
-
remove
public T remove(boolean nullify)
Removes the next non-null element and advances hd
-
removeMany
public java.util.List<T> removeMany(boolean nullify, int max_results, java.util.function.Predicate<T> filter)
- Specified by:
removeManyin classBuffer<T>
-
removeMany
public <R> R removeMany(boolean nullify, int max_results, java.util.function.Predicate<T> filter, java.util.function.Supplier<R> result_creator, java.util.function.BiConsumer<R,T> accumulator)- Specified by:
removeManyin classBuffer<T>
-
purge
public int purge(long seqno, boolean force)Description copied from class:BufferPurges (nulls) all elements <= seqno.
-
changeCapacity
public void changeCapacity(int new_capacity)
Changes the size of the buffer. This method should NOT be used; it is only here to change config in perf tests dynamically!!
-
forEach
public void forEach(long from, long to, Buffer.Visitor<T> visitor, boolean nullify)
-
forEach
public void forEach(long from, long to, Buffer.Visitor<T> visitor, boolean nullify, boolean respect_stop)
-
resetStats
public void resetStats()
- Overrides:
resetStatsin classBuffer<T>
-
iterator
public java.util.Iterator<T> iterator()
Returns an iterator over the elements of the ring buffer in the range [LOW+1 .. HIGH]- Returns:
- FixedBufferIterator
- Throws:
java.util.NoSuchElementException- is HD is moved forward during the iteration
-
iterator
public java.util.Iterator<T> iterator(long from, long to)
-
stream
public java.util.stream.Stream<T> stream(long from, long to)
-
index
protected int index(long seqno)
-
block
protected boolean block(long seqno)
-
increaseCapacity
protected void increaseCapacity(int new_cap)
-
decreaseCapacity
protected void decreaseCapacity(int new_cap)
-
-