protected void handleXmitRequest(Address sender, SeqnoList missing) { if(is_trace) log.trace("%s <-- XMIT(%s: #%s)", local_addr, sender, missing); SenderEntry entry=send_table.get(sender); xmit_reqs_received.add(missing.size()); Table<Message> win=entry != null? entry.msgs : null; if(win != null) { for(long seqno: missing) { Message msg=win.get(seqno); if(msg == null) { if(log.isWarnEnabled() && log_not_found_msgs && !local_addr.equals(sender) && seqno > win.getLow()) log.warn(Util.getMessage("MessageNotFound"), local_addr, sender, seqno); continue; } down_prot.down(msg); xmit_rsps_sent.increment(); } } }
/** * Retransmits messsages first_seqno to last_seqno from original_sender from xmit_table to xmit_requester, * called when XMIT_REQ is received. * @param xmit_requester The sender of the XMIT_REQ, we have to send the requested copy of the message to this address * @param missing_msgs A list of seqnos that have to be retransmitted * @param original_sender The member who originally sent the messsage. Guaranteed to be non-null */ protected void handleXmitReq(Address xmit_requester, SeqnoList missing_msgs, Address original_sender) { log.trace("%s: received xmit request from %s for %s%s", local_addr, xmit_requester, original_sender, missing_msgs); if(stats) xmit_reqs_received.add(missing_msgs.size()); Table<Message> buf=xmit_table.get(original_sender); if(buf == null) { log.error(Util.getMessage("SenderNotFound"), local_addr, original_sender); return; } for(long i: missing_msgs) { Message msg=buf.get(i); if(msg == null) { if(log.isWarnEnabled() && log_not_found_msgs && !local_addr.equals(xmit_requester) && i > buf.getLow()) log.warn(Util.getMessage("MessageNotFound"), local_addr, original_sender, i); continue; } if(is_trace) log.trace(local_addr + ": resending " + original_sender + "::" + i); sendXmitRsp(xmit_requester, msg); } }
/** * We need to resend the first message with our conn_id * @param sender */ protected void handleResendingOfFirstMessage(Address sender, int timestamp) { log.trace("%s <-- SEND_FIRST_SEQNO(%s)", local_addr, sender); SenderEntry entry=send_table.get(sender); Table<Message> win=entry != null? entry.msgs : null; if(win == null) { log.warn(Util.getMessage("SenderNotFound"), local_addr, sender); return; } if(!entry.updateLastTimestamp(timestamp)) return; Message rsp=win.get(win.getLow() +1); if(rsp != null) { // We need to copy the UnicastHeader and put it back into the message because Message.copy() doesn't copy // the headers and therefore we'd modify the original message in the sender retransmission window // (https://jira.jboss.org/jira/browse/JGRP-965) Message copy=rsp.copy(); UnicastHeader3 hdr=copy.getHeader(this.id); UnicastHeader3 newhdr=hdr.copy(); newhdr.first=true; copy.putHeader(this.id, newhdr); down_prot.down(copy); } }
protected void handleXmitRequest(Address sender, SeqnoList missing) { if(is_trace) log.trace("%s <-- XMIT(%s: #%s)", local_addr, sender, missing); SenderEntry entry=send_table.get(sender); xmit_reqs_received.add(missing.size()); Table<Message> win=entry != null? entry.msgs : null; if(win != null) { for(long seqno: missing) { Message msg=win.get(seqno); if(msg == null) { if(log.isWarnEnabled() && log_not_found_msgs && !local_addr.equals(sender) && seqno > win.getLow()) log.warn(Util.getMessage("MessageNotFound"), local_addr, sender, seqno); continue; } down_prot.down(msg); xmit_rsps_sent.increment(); } } }
/** * Retransmits messsages first_seqno to last_seqno from original_sender from xmit_table to xmit_requester, * called when XMIT_REQ is received. * @param xmit_requester The sender of the XMIT_REQ, we have to send the requested copy of the message to this address * @param missing_msgs A list of seqnos that have to be retransmitted * @param original_sender The member who originally sent the messsage. Guaranteed to be non-null */ protected void handleXmitReq(Address xmit_requester, SeqnoList missing_msgs, Address original_sender) { log.trace("%s: received xmit request from %s for %s%s", local_addr, xmit_requester, original_sender, missing_msgs); if(stats) xmit_reqs_received.add(missing_msgs.size()); Table<Message> buf=xmit_table.get(original_sender); if(buf == null) { log.error(Util.getMessage("SenderNotFound"), local_addr, original_sender); return; } for(long i: missing_msgs) { Message msg=buf.get(i); if(msg == null) { if(log.isWarnEnabled() && log_not_found_msgs && !local_addr.equals(xmit_requester) && i > buf.getLow()) log.warn(Util.getMessage("MessageNotFound"), local_addr, original_sender, i); continue; } if(is_trace) log.trace(local_addr + ": resending " + original_sender + "::" + i); sendXmitRsp(xmit_requester, msg); } }
/** * We need to resend the first message with our conn_id * @param sender */ protected void handleResendingOfFirstMessage(Address sender, int timestamp) { log.trace("%s <-- SEND_FIRST_SEQNO(%s)", local_addr, sender); SenderEntry entry=send_table.get(sender); Table<Message> win=entry != null? entry.msgs : null; if(win == null) { log.warn(Util.getMessage("SenderNotFound"), local_addr, sender); return; } if(!entry.updateLastTimestamp(timestamp)) return; Message rsp=win.get(win.getLow() +1); if(rsp != null) { // We need to copy the UnicastHeader and put it back into the message because Message.copy() doesn't copy // the headers and therefore we'd modify the original message in the sender retransmission window // (https://jira.jboss.org/jira/browse/JGRP-965) Message copy=rsp.copy(); UnicastHeader3 hdr=copy.getHeader(this.id); UnicastHeader3 newhdr=hdr.copy(); newhdr.first=true; copy.putHeader(this.id, newhdr); down_prot.down(copy); } }