E - the type of the elements in the ringbuffer.public class RingbufferProxy<E> extends AbstractDistributedObject<RingbufferService> implements Ringbuffer<E>
Ringbuffer.| Modifier and Type | Field and Description |
|---|---|
static int |
MAX_BATCH_SIZE
The maximum number of items that can be retrieved in 1 go using the
readManyAsync(long, int, int, IFunction)
method. |
PARTITIONING_STRATEGY| Constructor and Description |
|---|
RingbufferProxy(NodeEngine nodeEngine,
RingbufferService service,
String name,
RingbufferConfig config) |
| Modifier and Type | Method and Description |
|---|---|
long |
add(E item)
Adds an item to the tail of the Ringbuffer.
|
ICompletableFuture<Long> |
addAllAsync(Collection<? extends E> collection,
OverflowPolicy overflowPolicy)
Adds all the items of a collection to the tail of the Ringbuffer.
|
ICompletableFuture<Long> |
addAsync(E item,
OverflowPolicy overflowPolicy)
Asynchronously writes an item with a configurable
OverflowPolicy. |
long |
capacity()
Returns the capacity of this Ringbuffer.
|
String |
getName()
Returns the unique name for this DistributedObject.
|
String |
getServiceName()
Returns the service name for this object.
|
long |
headSequence()
Returns the sequence of the head.
|
ICompletableFuture<ReadResultSet<E>> |
readManyAsync(long startSequence,
int minCount,
int maxCount,
IFunction<E,Boolean> filter)
Reads a batch of items from the Ringbuffer.
|
E |
readOne(long sequence)
Reads one item from the Ringbuffer.
|
long |
remainingCapacity()
Returns the remaining capacity of the ringbuffer.
|
long |
size()
Returns number of items in the ringbuffer.
|
long |
tailSequence()
Returns the sequence of the tail.
|
String |
toString() |
destroy, equals, getNameAsPartitionAwareData, getNodeEngine, getOperationService, getPartitionId, getPartitionKey, getService, hashCode, invalidate, postDestroy, throwNotActiveExceptionclone, finalize, getClass, notify, notifyAll, wait, wait, waitdestroy, getPartitionKeypublic static final int MAX_BATCH_SIZE
readManyAsync(long, int, int, IFunction)
method.public RingbufferProxy(NodeEngine nodeEngine, RingbufferService service, String name, RingbufferConfig config)
public String getName()
DistributedObjectgetName in interface DistributedObjectpublic String getServiceName()
DistributedObjectgetServiceName in interface DistributedObjectgetServiceName in class AbstractDistributedObject<RingbufferService>public long capacity()
Ringbuffercapacity in interface Ringbuffer<E>public long size()
Ringbuffersize in interface Ringbuffer<E>public long tailSequence()
RingbuffertailSequence in interface Ringbuffer<E>public long headSequence()
RingbufferheadSequence in interface Ringbuffer<E>public long remainingCapacity()
RingbufferremainingCapacity in interface Ringbuffer<E>public long add(E item)
RingbufferRingbuffer.addAsync(Object, OverflowPolicy) and the OverflowPolicy.
The returned value is the sequence of the added item. Using this sequence you can read the added item.
add in interface Ringbuffer<E>item - the item to add.Ringbuffer.addAsync(Object, OverflowPolicy)public ICompletableFuture<Long> addAsync(E item, OverflowPolicy overflowPolicy)
RingbufferOverflowPolicy.
If there is space in the ringbuffer, the call will return the sequence of the written item.
If there is no space, it depends on the overflow policy what happens:
OverflowPolicy.OVERWRITE: we just overwrite the oldest item in the ringbuffer and we violate
the ttlOverflowPolicy.FAIL: we return -1
long sleepMs = 100;
for (; ; ) {
long result = ringbuffer.addAsync(item, FAIL).get();
if (result != -1) {
break;
}
TimeUnit.MILLISECONDS.sleep(sleepMs);
sleepMs = min(5000, sleepMs * 2);
}
addAsync in interface Ringbuffer<E>item - the item to addoverflowPolicy - the OverflowPolicy to use.public E readOne(long sequence) throws InterruptedException
Ringbuffer
Ringbuffer<String> ringbuffer = hz.getRingbuffer("rb");
long seq = ringbuffer.headSequence();
while(true){
String item = ringbuffer.readOne(seq);
seq++;
... process item
}
This method is not destructive unlike e.g. a queue.take. So the same item can be read by multiple readers or it can be
read multiple times by the same reader.
Currently it isn't possible to control how long this call is going to block. In the future we could add e.g.
tryReadOne(long sequence, long timeout, TimeUnit unit).readOne in interface Ringbuffer<E>sequence - the sequence of the item to read.InterruptedException - if the call is interrupted while blocking.public ICompletableFuture<Long> addAllAsync(Collection<? extends E> collection, OverflowPolicy overflowPolicy)
RingbufferRingbuffer.add(Object) due to better io utilization and a reduced number
of executed operations.
If the batch is empty, the call is ignored.
When the collection is not empty, the content is copied into a different data-structure. This means that:
addAllAsync in interface Ringbuffer<E>collection - the batch of items to add.public ICompletableFuture<ReadResultSet<E>> readManyAsync(long startSequence, int minCount, int maxCount, IFunction<E,Boolean> filter)
RingbufferreadManyAsync in interface Ringbuffer<E>startSequence - the startSequence of the first item to read.minCount - the minimum number of items to read.maxCount - the maximum number of items to read.filter - the filter. Filter is allowed to be null, indicating there is no filter.public String toString()
toString in class AbstractDistributedObject<RingbufferService>Copyright © 2016 Hazelcast, Inc.. All Rights Reserved.