Package org.jgroups.protocols
Class BatchBundler
java.lang.Object
org.jgroups.protocols.NoBundler
org.jgroups.protocols.BatchBundler
- All Implemented Interfaces:
Bundler
Bundler based on
BATCH. Batches messages, keeping a max_size for every destination.
When the accumulated size of the messages for a given destination P would exceed max_bytes, a MessageBatch is
created and sent to P.
Additionally, a timer runs every flush_interval milliseconds, sending messages whose size hasn't yet
reached max_size.
Contrary to TransferQueueBundler, which maintains a max_size for all messages, BatchBundler maintains
it for every destination separately. This causes batches to be fuller than with TransferQueueBundler:
assuming 4 members, everyone sending to everyone else, and max_size = 60000: with TransferQueueBundler, a batch is
sent with ~15'000 bytes of messages (60'000/4), but with BatchBundler, it has ~60'000 bytes. Fuller batches means
more amortization of costs of handling single messages.
- Since:
- 5.2
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected classprotected class -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected longprotected Future<?> protected Addressintprotected intMaximum number of bytes for messages to be queued until they are sent.protected ConcurrentMap<Address, BatchBundler.Buffer> protected final NullAddressprotected longprotected longprotected longprotected longprotected longprotected booleanprotected TimeScheduler -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected void_send(Message msg, ByteArrayDataOutputStream out) doublevoidflush()intIf the bundler implementation supports a capacity (e.g.intMaximum number of bytes for messages to be queued until they are sentintIf 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.voidCalled after creation of the bundlervoidvoidsetMaxSize(int s) intsize()The number of unsent messages in the bundlervoidstart()Called afterBundler.init(TP)protected voidvoidstop()protected voidvoidviewChange(View view) Methods inherited from class org.jgroups.protocols.NoBundler
sendSingleMessageMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.jgroups.protocols.Bundler
renameThread
-
Field Details
-
max_size
protected int max_sizeMaximum number of bytes for messages to be queued until they are sent. This value needs to be smaller than the largest datagram packet size in case of UDP -
flush_interval
protected long flush_interval -
max_batch_size
public int max_batch_size -
local_addr
-
num_msgs_sent
protected long num_msgs_sent -
num_ebs_sent
protected long num_ebs_sent -
num_ebs_sent_due_to_full_queue
protected long num_ebs_sent_due_to_full_queue -
num_ebs_sent_due_to_max_number_of_msgs
protected long num_ebs_sent_due_to_max_number_of_msgs -
num_ebs_sent_due_to_timeout
protected long num_ebs_sent_due_to_timeout -
msgMap
-
nullAddress
-
timer
-
running
protected volatile boolean running -
flush_task
-
-
Constructor Details
-
BatchBundler
public BatchBundler()
-
-
Method Details
-
avgBatchSize
public double avgBatchSize() -
resetStats
public void resetStats() -
viewChange
-
init
Description copied from interface:BundlerCalled after creation of the bundler -
start
public void start()Description copied from interface:BundlerCalled afterBundler.init(TP) -
stop
public void stop() -
send
-
size
public int size()Description copied from interface:BundlerThe number of unsent messages in the bundler -
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.
- Specified by:
getQueueSizein interfaceBundler- Overrides:
getQueueSizein classNoBundler
-
getCapacity
public int getCapacity()Description copied from interface:BundlerIf the bundler implementation supports a capacity (e.g.RingBufferBundler, then return it, else return -1 -
getMaxSize
public int getMaxSize()Description copied from interface:BundlerMaximum number of bytes for messages to be queued until they are sent- Specified by:
getMaxSizein interfaceBundler- Overrides:
getMaxSizein classNoBundler
-
setMaxSize
-
startFlushTask
protected void startFlushTask() -
stopFlushTask
protected void stopFlushTask() -
_send
-
flush
public void flush()
-