protected void retransmit(SeqnoList missing_msgs, final Address sender, boolean multicast_xmit_request) { Address dest=(multicast_xmit_request || this.use_mcast_xmit_req)? null : sender; // to whom do we send the XMIT request ? if(xmit_from_random_member && !local_addr.equals(sender)) { Address random_member=Util.pickRandomElement(members); if(random_member != null && !local_addr.equals(random_member)) dest=random_member; } Message retransmit_msg=new Message(dest).setBuffer(Util.streamableToBuffer(missing_msgs)) .setFlag(Message.Flag.OOB, Message.Flag.INTERNAL) .putHeader(this.id, NakAckHeader2.createXmitRequestHeader(sender)); log.trace("%s: sending XMIT_REQ (%s) to %s", local_addr, missing_msgs, dest); down_prot.down(retransmit_msg); if(stats) xmit_reqs_sent.add(missing_msgs.size()); }
/** * ensure that multicast events are recorded in DMStats */ @Test public void testMulticastStats() throws Exception { Message msg = mock(Message.class); when(msg.getHeader(any(Short.class))).thenReturn(NakAckHeader2.createMessageHeader(1L)); when(msg.size()).thenReturn(150L); Event evt = new Event(Event.MSG, msg); recorder.up(evt); assertTrue("mcastMessagesReceived = " + stats.mcastMessagesReceived, stats.mcastMessagesReceived == 1); assertEquals(stats.mcastMessageBytesReceived, 150); recorder.down(evt); assertTrue("mcastMessagesSent = " + stats.mcastMessagesSent, stats.mcastMessagesSent == 1); assertEquals(stats.mcastMessageBytesSent, 150); msg = mock(Message.class); when(msg.size()).thenReturn(150L); when(msg.getHeader(any(Short.class))).thenReturn(NakAckHeader2.createXmitRequestHeader(null)); evt = new Event(Event.MSG, msg); recorder.down(evt); assertTrue("mcastRetransmitRequests = " + stats.mcastRetransmitRequests, stats.mcastRetransmitRequests == 1); msg = mock(Message.class); when(msg.size()).thenReturn(150L); when(msg.getHeader(any(Short.class))).thenReturn(NakAckHeader2.createXmitResponseHeader()); evt = new Event(Event.MSG, msg); recorder.down(evt); assertTrue("mcastRetransmits = " + stats.mcastRetransmits, stats.mcastRetransmits == 1); }
protected void retransmit(SeqnoList missing_msgs, final Address sender, boolean multicast_xmit_request) { Address dest=(multicast_xmit_request || this.use_mcast_xmit_req)? null : sender; // to whom do we send the XMIT request ? if(xmit_from_random_member && !local_addr.equals(sender)) { Address random_member=Util.pickRandomElement(members); if(random_member != null && !local_addr.equals(random_member)) dest=random_member; } Message retransmit_msg=new Message(dest).setBuffer(Util.streamableToBuffer(missing_msgs)) .setFlag(Message.Flag.OOB, Message.Flag.INTERNAL) .putHeader(this.id, NakAckHeader2.createXmitRequestHeader(sender)); log.trace("%s: sending XMIT_REQ (%s) to %s", local_addr, missing_msgs, dest); down_prot.down(retransmit_msg); if(stats) xmit_reqs_sent.add(missing_msgs.size()); }