|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.jgroups.stack.Protocol org.jgroups.protocols.pbcast.NAKACK2
public class NAKACK2
Negative AcKnowledgement layer (NAKs). Messages are assigned a monotonically
increasing sequence number (seqno). Receivers deliver messages ordered
according to seqno and request retransmission of missing messages.
Retransmit requests are usually sent to the original sender of a message, but
this can be changed by xmit_from_random_member (send to random member) or
use_mcast_xmit_req (send to everyone). Responses can also be sent to everyone
instead of the requester by setting use_mcast_xmit to true.
Nested Class Summary | |
---|---|
protected static class |
NAKACK2.Counter
|
protected class |
NAKACK2.RetransmitTask
Retransmitter task which periodically (every xmit_interval ms) looks at all the retransmit tables and sends retransmit request to all members from which we have missing messages |
Field Summary | |
---|---|
protected BoundedList<Message> |
become_server_queue
|
protected int |
become_server_queue_size
|
protected BoundedList<java.lang.String> |
digest_history
Keeps a bounded list of the last N digest sets |
protected boolean |
discard_delivered_msgs
Messages that have been received in order are sent up the stack (= delivered to the application). |
protected boolean |
is_server
|
protected boolean |
leaving
|
protected Address |
local_addr
|
protected boolean |
log_discard_msgs
If true, logs messages discarded because received from other members |
protected boolean |
log_not_found_msgs
|
protected int |
max_msg_batch_size
|
protected long |
max_rebroadcast_timeout
|
protected java.util.List<Address> |
members
|
protected int |
num_messages_received
|
protected int |
num_messages_sent
|
protected static int |
NUM_REBROADCAST_MSGS
|
protected boolean |
print_stability_history_on_failed_xmit
When not finding a message on an XMIT request, include the last N stability messages in the error message |
protected Digest |
rebroadcast_digest
|
protected java.util.concurrent.locks.Lock |
rebroadcast_digest_lock
|
protected java.util.concurrent.locks.Condition |
rebroadcast_done
|
protected java.util.concurrent.locks.Lock |
rebroadcast_lock
|
protected boolean |
rebroadcasting
|
protected boolean |
running
|
protected BoundedList<Digest> |
stability_msgs
BoundedList |
protected SuppressLog<Address> |
suppress_log_non_member
Log to suppress identical warnings for messages from non-members |
protected long |
suppress_time_non_member_warnings
|
protected TimeScheduler |
timer
|
protected boolean |
use_mcast_xmit
Retransmit messages using multicast rather than unicast. |
protected boolean |
use_mcast_xmit_req
Use a multicast to request retransmission of missing messages. |
protected View |
view
|
protected boolean |
xmit_from_random_member
Ask a random member for retransmission of a missing message. |
protected long |
xmit_interval
|
protected java.util.concurrent.atomic.AtomicLong |
xmit_reqs_received
|
protected java.util.concurrent.atomic.AtomicLong |
xmit_reqs_sent
|
protected java.util.concurrent.atomic.AtomicLong |
xmit_rsps_received
|
protected java.util.concurrent.atomic.AtomicLong |
xmit_rsps_sent
|
protected java.util.concurrent.ConcurrentMap<Address,Table<Message>> |
xmit_table
Map to store sent and received messages (keyed by sender) |
protected long |
xmit_table_max_compaction_time
|
protected int |
xmit_table_msgs_per_row
|
protected int |
xmit_table_num_rows
|
protected double |
xmit_table_resize_factor
|
protected java.util.concurrent.Future<?> |
xmit_task
RetransmitTask running every xmit_interval ms |
protected java.util.Map<Address,java.lang.Long> |
xmit_task_map
Used by the retransmit task to keep the last retransmitted seqno per sender (https://issues.jboss.org/browse/JGRP-1539) |
Fields inherited from class org.jgroups.stack.Protocol |
---|
down_prot, ergonomics, id, log, name, stack, stats, up_prot |
Constructor Summary | |
---|---|
NAKACK2()
|
Method Summary | |
---|---|
protected void |
adjustReceivers(java.util.List<Address> new_members)
Remove old members from the retransmission buffers. |
protected void |
cancelRebroadcasting()
|
protected void |
checkForRebroadcasts()
|
void |
clearNonMemberCache()
|
void |
compact()
|
protected Table<Message> |
createTable(long initial_seqno)
|
java.lang.Object |
down(Event evt)
Callback. |
java.util.Map<java.lang.String,java.lang.Object> |
dumpStats()
|
java.lang.String |
dumpXmitTablesNumCurrentRows()
|
protected void |
flushBecomeServerQueue()
Flushes the queue. |
int |
getBecomeServerQueueSizeActual()
|
long |
getCurrentSeqno()
|
Digest |
getDigest()
Returns a message digest: for each member P the highest delivered and received seqno is added |
Digest |
getDigest(Address mbr)
|
boolean |
getLogDiscardMessages()
|
int |
getNonMemberMessages()
|
long |
getSizeOfAllMessages()
|
long |
getSizeOfAllMessagesInclHeaders()
|
Table<Message> |
getWindow(Address sender)
Returns the receive window for sender; only used for testing. |
long |
getXmitRequestsReceived()
|
long |
getXmitRequestsSent()
|
long |
getXmitResponsesReceived()
|
long |
getXmitResponsesSent()
|
long |
getXmitTableCapacity()
|
int |
getXmitTableMissingMessages()
|
int |
getXmitTableNumCompactions()
|
int |
getXmitTableNumCurrentRows()
|
int |
getXmitTableNumMoves()
|
int |
getXmitTableNumPurges()
|
int |
getXmitTableNumResizes()
|
int |
getXmitTableUndeliveredMsgs()
|
protected void |
handleMessage(Message msg,
NakAckHeader2 hdr)
Finds the corresponding retransmit buffer and adds the message to it (according to seqno). |
java.util.Map<java.lang.String,java.lang.String> |
handleProbe(java.lang.String... keys)
Handles a probe. |
protected void |
handleXmitReq(Address xmit_requester,
SeqnoList missing_msgs,
Address original_sender)
Retransmits messsages first_seqno to last_seqno from original_sender from xmit_table to xmit_requester, called when XMIT_REQ is received. |
protected void |
handleXmitRsp(Message msg,
NakAckHeader2 hdr)
|
void |
init()
Called after instance has been created (null constructor) and before protocol is started. |
boolean |
isDiscardDeliveredMsgs()
|
boolean |
isUseMcastXmit()
|
boolean |
isXmitFromRandomMember()
|
boolean |
isXmitTaskRunning()
|
protected void |
mergeDigest(Digest digest)
For all members of the digest, adjust the retransmit buffers in xmit_table. |
protected void |
overwriteDigest(Digest digest)
Overwrites existing entries, but does NOT remove entries not found in the digest |
java.lang.String |
printDigestHistory()
|
java.lang.String |
printMessages()
|
java.lang.String |
printStabilityHistory()
|
java.lang.String |
printStabilityMessages()
|
java.lang.String |
printStats()
|
java.util.List<java.lang.Integer> |
providedUpServices()
List of events that are provided to layers above (they will be handled when sent down from above) |
protected void |
rebroadcastMessages()
Takes the argument highest_seqnos and compares it to the current digest. |
protected void |
reset()
|
void |
resetStats()
|
protected void |
retransmit(long first_seqno,
long last_seqno,
Address sender)
|
protected void |
retransmit(long first_seqno,
long last_seqno,
Address sender,
boolean multicast_xmit_request)
|
protected void |
retransmit(SeqnoList missing_msgs,
Address sender,
boolean multicast_xmit_request)
|
protected void |
send(Event evt,
Message msg)
Adds the message to the sent_msgs table and then passes it down the stack. |
protected void |
sendXmitRsp(Address dest,
Message msg)
Sends a message msg to the requester. |
protected void |
setDigest(Digest digest)
Creates a retransmit buffer for each sender in the digest according to the sender's seqno. |
protected void |
setDigest(Digest digest,
boolean merge)
Sets or merges the digest. |
void |
setDiscardDeliveredMsgs(boolean discard_delivered_msgs)
|
void |
setLogDiscardMessages(boolean flag)
|
void |
setTimer(TimeScheduler timer)
Only used for unit tests, don't use ! |
void |
setUseMcastXmit(boolean use_mcast_xmit)
|
void |
setUseMcastXmitReq(boolean flag)
|
void |
setXmitFromRandomMember(boolean xmit_from_random_member)
|
protected static long |
sizeOfAllMessages(Table<Message> buf,
boolean include_headers)
|
protected void |
stable(Digest digest)
Garbage collect messages that have been seen by all members. |
void |
start()
This method is called on a Channel.connect(String) . |
protected void |
startRetransmitTask()
|
void |
stop()
This method is called on a Channel.disconnect() . |
protected void |
stopRetransmitTask()
|
java.lang.String[] |
supportedKeys()
Returns a list of supported keys |
void |
triggerXmit()
|
java.lang.Object |
up(Event evt)
Callback. |
Methods inherited from class org.jgroups.stack.Protocol |
---|
destroy, enableStats, getConfigurableObjects, getDownProtocol, getDownServices, getId, getIdsAbove, getLevel, getName, getProtocolStack, getSocketFactory, getThreadFactory, getTransport, getUpProtocol, getUpServices, getValue, isErgonomics, providedDownServices, requiredDownServices, requiredUpServices, resetStatistics, setDownProtocol, setErgonomics, setId, setLevel, setProtocolStack, setSocketFactory, setUpProtocol, setValue, setValues, statsEnabled |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
protected static final int NUM_REBROADCAST_MSGS
protected int max_msg_batch_size
protected boolean use_mcast_xmit
protected boolean use_mcast_xmit_req
protected boolean xmit_from_random_member
protected boolean discard_delivered_msgs
protected long max_rebroadcast_timeout
protected boolean print_stability_history_on_failed_xmit
protected boolean log_discard_msgs
protected boolean log_not_found_msgs
protected long xmit_interval
protected int xmit_table_num_rows
protected int xmit_table_msgs_per_row
protected double xmit_table_resize_factor
protected long xmit_table_max_compaction_time
protected int become_server_queue_size
protected long suppress_time_non_member_warnings
protected final java.util.concurrent.atomic.AtomicLong xmit_reqs_received
protected final java.util.concurrent.atomic.AtomicLong xmit_reqs_sent
protected final java.util.concurrent.atomic.AtomicLong xmit_rsps_received
protected final java.util.concurrent.atomic.AtomicLong xmit_rsps_sent
protected int num_messages_sent
protected int num_messages_received
protected volatile boolean is_server
protected Address local_addr
protected volatile java.util.List<Address> members
protected View view
protected final java.util.concurrent.ConcurrentMap<Address,Table<Message>> xmit_table
protected java.util.concurrent.Future<?> xmit_task
protected final java.util.Map<Address,java.lang.Long> xmit_task_map
protected volatile boolean leaving
protected volatile boolean running
protected TimeScheduler timer
protected final java.util.concurrent.locks.Lock rebroadcast_lock
protected final java.util.concurrent.locks.Condition rebroadcast_done
protected volatile boolean rebroadcasting
protected final java.util.concurrent.locks.Lock rebroadcast_digest_lock
protected Digest rebroadcast_digest
protected final BoundedList<Digest> stability_msgs
protected final BoundedList<java.lang.String> digest_history
protected BoundedList<Message> become_server_queue
protected SuppressLog<Address> suppress_log_non_member
Constructor Detail |
---|
public NAKACK2()
Method Detail |
---|
public boolean isXmitTaskRunning()
public int getNonMemberMessages()
public void clearNonMemberCache()
public long getXmitRequestsReceived()
public long getXmitRequestsSent()
public long getXmitResponsesReceived()
public long getXmitResponsesSent()
public boolean isUseMcastXmit()
public boolean isXmitFromRandomMember()
public boolean isDiscardDeliveredMsgs()
public boolean getLogDiscardMessages()
public void setUseMcastXmit(boolean use_mcast_xmit)
public void setUseMcastXmitReq(boolean flag)
public void setLogDiscardMessages(boolean flag)
public void setXmitFromRandomMember(boolean xmit_from_random_member)
public void setDiscardDeliveredMsgs(boolean discard_delivered_msgs)
public int getBecomeServerQueueSizeActual()
public Table<Message> getWindow(Address sender)
public void setTimer(TimeScheduler timer)
public int getXmitTableUndeliveredMsgs()
public int getXmitTableMissingMessages()
public long getXmitTableCapacity()
public int getXmitTableNumCurrentRows()
public long getSizeOfAllMessages()
public long getSizeOfAllMessagesInclHeaders()
public int getXmitTableNumCompactions()
public int getXmitTableNumMoves()
public int getXmitTableNumResizes()
public int getXmitTableNumPurges()
public java.lang.String printMessages()
public long getCurrentSeqno()
public java.lang.String printStabilityMessages()
public java.lang.String printDigestHistory()
public void compact()
public java.lang.String dumpXmitTablesNumCurrentRows()
public void resetStats()
resetStats
in class Protocol
public void init() throws java.lang.Exception
Protocol
init
in class Protocol
java.lang.Exception
- Thrown if protocol cannot be initialized successfully. This will cause the
ProtocolStack to fail, so the channel constructor will throw an exceptionpublic java.util.Map<java.lang.String,java.lang.Object> dumpStats()
dumpStats
in class Protocol
public java.lang.String printStats()
printStats
in class Protocol
public java.lang.String printStabilityHistory()
public java.util.List<java.lang.Integer> providedUpServices()
Protocol
providedUpServices
in class Protocol
public void start() throws java.lang.Exception
Protocol
Channel.connect(String)
. Starts work.
Protocols are connected and queues are ready to receive events.
Will be called from bottom to top. This call will replace
the START and START_OK events.
start
in class Protocol
java.lang.Exception
- Thrown if protocol cannot be started successfully. This will cause the ProtocolStack
to fail, so Channel.connect(String)
will throw an exceptionpublic void stop()
Protocol
Channel.disconnect()
. Stops work (e.g. by closing multicast socket).
Will be called from top to bottom. This means that at the time of the method invocation the
neighbor protocol below is still working. This method will replace the
STOP, STOP_OK, CLEANUP and CLEANUP_OK events. The ProtocolStack guarantees that
when this method is called all messages in the down queue will have been flushed
stop
in class Protocol
public java.lang.Object down(Event evt)
Do not use down_prot.down()
in this
method as the event is passed down by default by the superclass after this method returns !
down
in class Protocol
public java.lang.Object up(Event evt)
Do not use PassUp
in this
method as the event is passed up by default by the superclass after this method returns !
up
in class Protocol
public java.util.Map<java.lang.String,java.lang.String> handleProbe(java.lang.String... keys)
DiagnosticsHandler.ProbeHandler
handleProbe
in interface DiagnosticsHandler.ProbeHandler
public java.lang.String[] supportedKeys()
DiagnosticsHandler.ProbeHandler
supportedKeys
in interface DiagnosticsHandler.ProbeHandler
protected void send(Event evt, Message msg)
protected void handleMessage(Message msg, NakAckHeader2 hdr)
protected void handleXmitReq(Address xmit_requester, SeqnoList missing_msgs, Address original_sender)
xmit_requester
- The sender of the XMIT_REQ, we have to send the requested copy of the message to this addressmissing_msgs
- A list of seqnos that have to be retransmittedoriginal_sender
- The member who originally sent the messsage. Guaranteed to be non-nullprotected void flushBecomeServerQueue()
ClientGmsImpl.installView(org.jgroups.View,org.jgroups.util.Digest)
method (called when a view is installed).
protected void cancelRebroadcasting()
protected void sendXmitRsp(Address dest, Message msg)
dest
- msg
- protected void handleXmitRsp(Message msg, NakAckHeader2 hdr)
protected void rebroadcastMessages()
protected void checkForRebroadcasts()
protected void adjustReceivers(java.util.List<Address> new_members)
members
. This method is not called concurrently multiple times
public Digest getDigest()
public Digest getDigest(Address mbr)
protected void setDigest(Digest digest)
protected void mergeDigest(Digest digest)
protected void overwriteDigest(Digest digest)
digest
- protected void setDigest(Digest digest, boolean merge)
digest
- The digestmerge
- Whether to merge the new digest with our own, or notprotected Table<Message> createTable(long initial_seqno)
protected void stable(Digest digest)
protected void retransmit(long first_seqno, long last_seqno, Address sender)
protected void retransmit(long first_seqno, long last_seqno, Address sender, boolean multicast_xmit_request)
protected void retransmit(SeqnoList missing_msgs, Address sender, boolean multicast_xmit_request)
protected void reset()
protected static long sizeOfAllMessages(Table<Message> buf, boolean include_headers)
protected void startRetransmitTask()
protected void stopRetransmitTask()
public void triggerXmit()
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |