private NakReceiverWindow createNakReceiverWindow(Address sender, long initial_seqno, long lowest_seqno) { NakReceiverWindow win=new NakReceiverWindow(local_addr, sender, this, initial_seqno, lowest_seqno, timer); win.setRetransmitTimeouts(retransmit_timeout); win.setDiscardDeliveredMessages(discard_delivered_msgs); win.setMaxXmitBufSize(this.max_xmit_buf_size); if(stats) win.setListener(this); return win; }
/** * Reset the retransmitter and the nak window<br> */ public void reset() { lock.writeLock().lock(); try { retransmitter.reset(); _reset(); } finally { lock.writeLock().unlock(); } }
private void reset() { seqno_lock.lock(); try { seqno=0; } finally { seqno_lock.unlock(); } for(NakReceiverWindow win: xmit_table.values()) { win.destroy(); } xmit_table.clear(); }
long low=win.getLowestSeen(), highest_delivered=win.getHighestDelivered(), highest_received=win.getHighestReceived(); return new Digest.Entry(low, highest_delivered, highest_received);
my_highest_rcvd=recv_win.getHighestReceived(); stability_highest_rcvd=high_seqno_received; recv_win.stable(high_seqno_delivered); // delete all messages with seqnos <= seqno
NakReceiverWindow win=xmit_table.get(original_sender); for(long i=first_seqno; i <= last_seqno; i++) { msg=win != null? win.get(i) : null; if(msg == null || msg == NakReceiverWindow.NULL_MSG) { if(log.isErrorEnabled() && !local_addr.equals(xmit_requester)) { sb.append(" not found in retransmission table of "); if(win != null) { sb.append(original_sender).append(": ").append(win.toString());
public double getTotalAverageRetransmissionTime() { double total_avg=0.0, tmp; int i=0; for(Map.Entry<Address,NakReceiverWindow> entry: xmit_table.entrySet()) { tmp=entry.getValue().getAverageXmitTime(); total_avg+=tmp; i++; } return total_avg / i; }
public int getPendingRetransmissionRequests() { int num=0; for(NakReceiverWindow win: xmit_table.values()) { num+=win.getPendingXmits(); } return num; }
msg_id=seqno +1; msg.putHeader(name, new NakAckHeader(NakAckHeader.MSG, msg_id)); win.add(msg_id, msg); seqno=msg_id;
public String printRetransmissionTimes() { StringBuilder sb=new StringBuilder(); double total_avg=0.0, tmp; int i=0; for(Map.Entry<Address,NakReceiverWindow> entry: xmit_table.entrySet()) { tmp=entry.getValue().getAverageXmitTime(); total_avg+=tmp; sb.append(entry.getKey()).append(": ").append(tmp).append("\n"); i++; } sb.append("\ntotal: ").append(total_avg / i); return sb.toString(); }
/** * Stop the retransmitter and reset the nak window<br> */ public void destroy() { lock.writeLock().lock(); try { retransmitter.stop(); _reset(); } finally { lock.writeLock().unlock(); } }