/** * Returns a list of missing (= null) elements * @return A SeqnoList of missing messages, or null if no messages are missing */ public SeqnoList getMissing() { return getMissing(0); }
@ManagedOperation(description="Triggers the retransmission task, asking all senders for missing messages") public void triggerXmit() { SeqnoList missing; for(Map.Entry<Address,Table<Message>> entry: xmit_table.entrySet()) { Address target=entry.getKey(); // target to send retransmit requests to Table<Message> buf=entry.getValue(); if(buf != null && buf.getNumMissing() > 0 && (missing=buf.getMissing(max_xmit_req_size)) != null) { // getNumMissing() is fast long highest=missing.getLast(); Long prev_seqno=xmit_task_map.get(target); if(prev_seqno == null) { xmit_task_map.put(target, highest); // no retransmission } else { missing.removeHigherThan(prev_seqno); // we only retransmit the 'previous batch' if(highest > prev_seqno) xmit_task_map.put(target, highest); if(!missing.isEmpty()) retransmit(missing, target, false); } } else if(!xmit_task_map.isEmpty()) xmit_task_map.remove(target); // no current gaps for target } if(resend_last_seqno && last_seqno_resender != null) last_seqno_resender.execute(seqno.get()); }
if(win != null && win.getNumMissing() > 0 && (missing=win.getMissing(max_xmit_req_size)) != null) { long highest=missing.getLast(); Long prev_seqno=xmit_task_map.get(target);
/** * Returns a list of missing (= null) elements * @return A SeqnoList of missing messages, or null if no messages are missing */ public SeqnoList getMissing() { return getMissing(0); }
@ManagedOperation(description="Triggers the retransmission task, asking all senders for missing messages") public void triggerXmit() { SeqnoList missing; for(Map.Entry<Address,Table<Message>> entry: xmit_table.entrySet()) { Address target=entry.getKey(); // target to send retransmit requests to Table<Message> buf=entry.getValue(); if(buf != null && buf.getNumMissing() > 0 && (missing=buf.getMissing(max_xmit_req_size)) != null) { // getNumMissing() is fast long highest=missing.getLast(); Long prev_seqno=xmit_task_map.get(target); if(prev_seqno == null) { xmit_task_map.put(target, highest); // no retransmission } else { missing.removeHigherThan(prev_seqno); // we only retransmit the 'previous batch' if(highest > prev_seqno) xmit_task_map.put(target, highest); if(!missing.isEmpty()) retransmit(missing, target, false); } } else if(!xmit_task_map.isEmpty()) xmit_task_map.remove(target); // no current gaps for target } if(resend_last_seqno && last_seqno_resender != null) last_seqno_resender.execute(seqno.get()); }
if(win != null && win.getNumMissing() > 0 && (missing=win.getMissing(max_xmit_req_size)) != null) { long highest=missing.getLast(); Long prev_seqno=xmit_task_map.get(target);