Package org.jgroups.protocols
Class RemoveQueueBundler
- java.lang.Object
-
- org.jgroups.protocols.BaseBundler
-
- org.jgroups.protocols.RemoveQueueBundler
-
- All Implemented Interfaces:
Bundler
public class RemoveQueueBundler extends BaseBundler
Bundler implementation which sends message batches (or single messages) as soon as the remove queue is full (or max_bundler_size would be exceeded).
Messages are removed from the main queue and processed as follows (assuming they all fit into the remove queue):
A B B C C A causes the following sends: {AA} -> {CC} -> {BB}
Note that null is also a valid destination (send-to-all).
Contrary toTransferQueueBundler, this bundler uses aRingBufferrather than an ArrayBlockingQueue and the size of the remove queue is fixed. TransferQueueBundler increases the size of the remove queue dynamically, which leads to higher latency if the remove queue grows too much.
JIRA: https://issues.jboss.org/browse/JGRP-2171- Since:
- 4.0.4
- Author:
- Bela Ban
-
-
Field Summary
Fields Modifier and Type Field Description protected AverageMinMaxavg_batch_sizeprotected intqueue_sizeprotected RingBuffer<Message>rbprotected Message[]remove_queueprotected Runnerrunner
-
Constructor Summary
Constructors Constructor Description RemoveQueueBundler()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description intgetQueueSize()If the bundler has a queue and it should be managed by a queuing discipline (like Random Early Detection), then return the number of elements in the queue, else -1.java.util.Map<java.lang.String,java.lang.Object>getStats()Returns stats about the bundler itself.voidinit(TP transport)Called after creation of the bundlervoidresetStats()java.lang.StringrqbAvgBatchSize()intrqbRemoveQueueSize()voidrqbRemoveQueueSize(int size)intrqbRingBufferSize()voidrun()voidsend(Message msg)protected voidsendMessageList(Address dest, Address src, java.util.List<Message> list)intsize()Returns the total number of messages in the hashmapvoidstart()Called afterBundler.init(TP)voidstop()-
Methods inherited from class org.jgroups.protocols.BaseBundler
addMessage, clearMessages, sendBundledMessages, sendSingleMessage, viewChange
-
-
-
-
Field Detail
-
rb
protected RingBuffer<Message> rb
-
runner
protected Runner runner
-
remove_queue
protected Message[] remove_queue
-
avg_batch_size
protected final AverageMinMax avg_batch_size
-
queue_size
protected int queue_size
-
-
Method Detail
-
rqbRemoveQueueSize
public int rqbRemoveQueueSize()
-
rqbRemoveQueueSize
public void rqbRemoveQueueSize(int size)
-
rqbAvgBatchSize
public java.lang.String rqbAvgBatchSize()
-
rqbRingBufferSize
public int rqbRingBufferSize()
-
getStats
public java.util.Map<java.lang.String,java.lang.Object> getStats()
Description copied from interface:BundlerReturns stats about the bundler itself.- Returns:
- Stats, may be null
-
resetStats
public void resetStats()
-
init
public void init(TP transport)
Description copied from interface:BundlerCalled after creation of the bundler- Specified by:
initin interfaceBundler- Overrides:
initin classBaseBundler- Parameters:
transport- the transport, for further reference
-
start
public void start()
Description copied from interface:BundlerCalled afterBundler.init(TP)- Specified by:
startin interfaceBundler- Overrides:
startin classBaseBundler
-
stop
public void stop()
- Specified by:
stopin interfaceBundler- Overrides:
stopin classBaseBundler
-
send
public void send(Message msg) throws java.lang.Exception
- Specified by:
sendin interfaceBundler- Overrides:
sendin classBaseBundler- Throws:
java.lang.Exception
-
run
public void run()
-
getQueueSize
public int getQueueSize()
Description copied from interface:BundlerIf the bundler has a queue and it should be managed by a queuing discipline (like Random Early Detection), then return the number of elements in the queue, else -1. In the latter case, the queue won't be managed.
This method needs to be fast as it might get called on every message to be sent.
-
size
public int size()
Description copied from class:BaseBundlerReturns the total number of messages in the hashmap- Specified by:
sizein interfaceBundler- Overrides:
sizein classBaseBundler
-
sendMessageList
protected void sendMessageList(Address dest, Address src, java.util.List<Message> list)
- Overrides:
sendMessageListin classBaseBundler
-
-