|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.jgroups.stack.Protocol
org.jgroups.protocols.pbcast.NAKACK
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. Retransmitted
messages are bundled into bigger ones, e.g. when getting an xmit request for messages 1-10, instead of sending 10
unicast messages, we bundle all 10 messages into 1 and send it. However, since this protocol typically sits below
FRAG, we cannot count on FRAG to fragement/defragment the (possibly) large message into smaller ones. Therefore we
only bundle messages up to max_xmit_size bytes to prevent too large messages. For example, if the bundled message
size was a total of 34000 bytes, and max_xmit_size=16000, we'd send 3 messages: 2 16K and a 2K message. Note that
max_xmit_size should be the same value as FRAG.frag_size (or smaller).
Retransmit requests are always sent
to the sender. If the sender dies, and not everyone has received its messages, they will be lost. In the future, this
may be changed to have receivers store all messages, so that retransmit requests can be answered by any member.
Trivial to implement, but not done yet. For most apps, the default retransmit properties are sufficient, if not use
vsync.
Field Summary |
Fields inherited from class org.jgroups.stack.Protocol |
down_handler, down_prot, down_queue, down_thread, down_thread_prio, log, observer, props, stack, stats, trace, up_handler, up_prot, up_queue, up_thread, up_thread_prio, warn |
Constructor Summary | |
NAKACK()
|
Method Summary | |
void |
down(Event evt)
Callback. |
java.util.Map |
dumpStats()
|
int |
getGcLag()
|
int |
getMaxXmitBufSize()
|
long |
getMaxXmitSize()
|
long |
getMissingMessagesReceived()
|
java.lang.String |
getName()
|
int |
getPendingRetransmissionRequests()
|
int |
getReceivedTableSize()
|
int |
getSentTableSize()
|
long |
getXmitRequestsReceived()
|
long |
getXmitRequestsSent()
|
long |
getXmitResponsesReceived()
|
long |
getXmitResponsesSent()
|
void |
init()
Called after instance has been created (null constructor) and before protocol is started. |
boolean |
isDiscardDeliveredMsgs()
|
boolean |
isUseMcastXmit()
|
boolean |
isXmitFromRandomMember()
|
void |
missingMessageReceived(long seqno,
Message msg)
|
java.lang.String |
printMessages()
|
java.lang.String |
printSentMsgs()
|
java.lang.String |
printStats()
|
java.util.Vector |
providedDownServices()
List of events that are provided to layers below (they will be handled when sent down from below). |
java.util.Vector |
providedUpServices()
List of events that are provided to layers above (they will be handled when sent down from above). |
void |
resetStats()
|
void |
retransmit(long first_seqno,
long last_seqno,
Address sender)
Implementation of Retransmitter.RetransmitCommand. |
void |
setDiscardDeliveredMsgs(boolean discard_delivered_msgs)
|
void |
setGcLag(int gc_lag)
|
void |
setMaxXmitBufSize(int max_xmit_buf_size)
|
void |
setMaxXmitSize(long max_xmit_size)
|
boolean |
setProperties(java.util.Properties props)
Configures the protocol initially. |
void |
setUseMcastXmit(boolean use_mcast_xmit)
|
void |
setXmitFromRandomMember(boolean xmit_from_random_member)
|
void |
start()
This method is called on a Channel.connect(String) . |
void |
stop()
This method is called on a Channel.disconnect() . |
void |
up(Event evt)
Callback. |
Methods inherited from class org.jgroups.stack.Protocol |
destroy, downThreadEnabled, enableStats, getDownProtocol, getDownQueue, getProperties, getUpProtocol, getUpQueue, handleSpecialDownEvent, isTrace, isWarn, passDown, passUp, receiveDownEvent, receiveUpEvent, requiredDownServices, requiredUpServices, setDownProtocol, setObserver, setPropertiesInternal, setProtocolStack, setTrace, setUpProtocol, setWarn, startDownHandler, startUpHandler, statsEnabled, stopInternal, upThreadEnabled |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
public NAKACK()
Method Detail |
public java.lang.String getName()
getName
in class Protocol
public long getXmitRequestsReceived()
public long getXmitRequestsSent()
public long getXmitResponsesReceived()
public long getXmitResponsesSent()
public long getMissingMessagesReceived()
public int getPendingRetransmissionRequests()
public int getSentTableSize()
public int getReceivedTableSize()
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 int getGcLag()
public void setGcLag(int gc_lag)
public boolean isUseMcastXmit()
public void setUseMcastXmit(boolean use_mcast_xmit)
public boolean isXmitFromRandomMember()
public void setXmitFromRandomMember(boolean xmit_from_random_member)
public boolean isDiscardDeliveredMsgs()
public void setDiscardDeliveredMsgs(boolean discard_delivered_msgs)
public int getMaxXmitBufSize()
public void setMaxXmitBufSize(int max_xmit_buf_size)
public long getMaxXmitSize()
public void setMaxXmitSize(long max_xmit_size)
public boolean setProperties(java.util.Properties props)
Protocol
"loopback=false;unicast_inport=4444"
setProperties
in class Protocol
public java.util.Map dumpStats()
dumpStats
in class Protocol
public java.lang.String printStats()
printStats
in class Protocol
public java.util.Vector providedUpServices()
Protocol
providedUpServices
in class Protocol
public java.util.Vector providedDownServices()
Protocol
providedDownServices
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 void down(Event evt)
Do not use passDown()
in this
method as the event is passed down by default by the superclass after this method returns !
down
in class Protocol
public void 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 void retransmit(long first_seqno, long last_seqno, Address sender)
retransmit
in interface Retransmitter.RetransmitCommand
first_seqno
- The sequence number of the first missing messagelast_seqno
- The sequence number of the last missing messagesender
- The destination of the member to which the retransmit request will be sent
(nak-based scheme), or to which the message will be retransmitted (ack-based scheme).public void missingMessageReceived(long seqno, Message msg)
missingMessageReceived
in interface NakReceiverWindow.Listener
public java.lang.String printMessages()
public java.lang.String printSentMsgs()
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |