Refine search
/** Called by the sender to resend messages for which no ACK has been received yet */ protected void retransmit(Message msg) { if(is_trace) { UnicastHeader3 hdr=msg.getHeader(id); long seqno=hdr != null? hdr.seqno : -1; log.trace("%s --> XMIT(%s: #%d)", local_addr, msg.getDest(), seqno); } down_prot.down(msg); num_xmits++; }
public Object up(Message msg) { if(msg.getDest() == null || msg.isFlagSet(Message.Flag.NO_RELIABILITY)) // only handle unicast messages return up_prot.up(msg); // pass up UnicastHeader3 hdr=msg.getHeader(this.id); if(hdr == null) return up_prot.up(msg); Address sender=msg.getSrc(); switch(hdr.type) { case UnicastHeader3.DATA: // received regular message if(is_trace) log.trace("%s <-- DATA(%s: #%d, conn_id=%d%s)", local_addr, sender, hdr.seqno, hdr.conn_id, hdr.first? ", first" : ""); if(Objects.equals(local_addr, sender)) handleDataReceivedFromSelf(sender, hdr.seqno, msg); else handleDataReceived(sender, hdr.seqno, hdr.conn_id, hdr.first, msg); break; // we pass the deliverable message up in handleDataReceived() default: handleUpEvent(sender, msg, hdr); break; } return null; }
public Object up(Message msg) { Frag3Header hdr=msg.getHeader(this.id); if(hdr != null) { // needs to be defragmented Message assembled_msg=unfragment(msg, hdr); if(assembled_msg != null) { assembled_msg.setSrc(msg.getSrc()); // needed ? YES, because fragments have a null src !! up_prot.up(assembled_msg); avg_size_up.add(assembled_msg.length()); } return null; } return up_prot.up(msg); }
/** * Sends a message msg to the requester. We have to wrap the original message into a retransmit message, as we need * to preserve the original message's properties, such as src, headers etc. * @param dest * @param msg */ protected void sendXmitRsp(Address dest, Message msg) { if(msg == null) return; if(stats) xmit_rsps_sent.increment(); if(msg.getSrc() == null) msg.setSrc(local_addr); if(use_mcast_xmit) { // we simply send the original multicast message down_prot.down(msg); return; } Message xmit_msg=msg.copy(true, true).dest(dest); // copy payload and headers NakAckHeader2 hdr=xmit_msg.getHeader(id); NakAckHeader2 newhdr=hdr.copy(); newhdr.type=NakAckHeader2.XMIT_RSP; // change the type in the copy from MSG --> XMIT_RSP xmit_msg.putHeader(id, newhdr); down_prot.down(xmit_msg); }
public boolean handleUpMessage(Message msg) { ChallengeResponseHeader hdr=msg.getHeader(ID); if(hdr == null) return true; switch(hdr.type) { case ChallengeResponseHeader.CHALLENGE: long hash=hash(encrypt(hdr.payload)); Message response=new Message(msg.getSrc()).setFlag(Message.Flag.OOB) .putHeader(ID, new ChallengeResponseHeader(hash)); log.trace("%s: received CHALLENGE from %s; sending RESPONSE (hash=%d)", auth.getAddress(), msg.src(), hash); auth.getDownProtocol().down(response); break; case ChallengeResponseHeader.RESPONSE: log.trace("%s: received RESPONSE from %s", auth.getAddress(), msg.getSrc()); Entry entry=pending_requests.get(msg.getSrc()); if(entry != null) entry.setResponse(hdr.hash); break; } return false; // don't pass up }
pingPonger.sendPongMessage(myChannel, jgAddress, jgmsg.getSrc()); } catch (Exception e) { logger.info("Failed sending Pong response to " + jgmsg.getSrc()); NakAckHeader2 header = (NakAckHeader2) jgmsg.getHeader(nackack2HeaderId); if (header != null && !jgmsg.isFlagSet(Flag.OOB)) { recordScheduledSeqno(msg.getSender(), header.getSeqno());
public Object up(Message msg) { FdHeader hdr=msg.getHeader(this.id); if(hdr == null) { if(msg_counts_as_heartbeat) updateTimestamp(msg.getSrc()); return up_prot.up(msg); // message did not originate from FD layer, just pass up Address hb_sender=msg.getSrc(); log.trace("%s: received are-you-alive from %s, sending response", local_addr, hb_sender); sendHeartbeatResponse(hb_sender); break; // don't pass up ! if(hdr.mbrs == null) return null; log.trace("%s: received suspect message: %s", local_addr, hdr); log.warn("%s: I was suspected by %s; ignoring the SUSPECT message and sending back a HEARTBEAT_ACK", local_addr, msg.src()); sendHeartbeatResponse(msg.getSrc()); continue; if(!suspects.isEmpty()) { log.debug("%s: suspecting %s", local_addr, suspects); up_prot.up(new Event(Event.SUSPECT, suspects)); down_prot.down(new Event(Event.SUSPECT, suspects));
public Object up(Message msg) { FragHeader hdr=msg.getHeader(this.id); if(hdr != null) { // needs to be defragmented Message assembled_msg=unfragment(msg, hdr); if(assembled_msg != null) { assembled_msg.setSrc(msg.getSrc()); // needed ? YES, because fragments have a null src !! up_prot.up(assembled_msg); avg_size_up.add(assembled_msg.length()); } return null; } return up_prot.up(msg); }
protected void deliverBatch(MessageBatch batch) { try { if(batch.isEmpty()) return; if(is_trace) { Message first=batch.first(), last=batch.last(); StringBuilder sb=new StringBuilder(local_addr + ": delivering"); if(first != null && last != null) { UnicastHeader3 hdr1=first.getHeader(id), hdr2=last.getHeader(id); sb.append(" #").append(hdr1.seqno).append(" - #").append(hdr2.seqno); } sb.append(" (" + batch.size()).append(" messages)"); log.trace(sb); } up_prot.up(batch); } catch(Throwable t) { log.warn(Util.getMessage("FailedToDeliverMsg"), local_addr, "batch", batch, t); } }
public void receive(Message msg) { MPerfHeader hdr=msg.getHeader(ID); switch(hdr.type) { case MPerfHeader.DATA: handleData(msg.getSrc(), hdr.seqno, num_threads == 1 && !oob); break; result_collector=msg.getSrc(); sendMessages(); break; Address sender=msg.getSrc(); Stats tmp=received_msgs.get(sender); if(tmp != null)
public boolean handleUpMessage(Message msg) { ChallengeResponseHeader hdr=msg.getHeader(ID); if(hdr == null) return true; switch(hdr.type) { case ChallengeResponseHeader.CHALLENGE: long hash=hash(encrypt(hdr.payload)); Message response=new Message(msg.getSrc()).setFlag(Message.Flag.OOB) .putHeader(ID, new ChallengeResponseHeader(hash)); log.trace("%s: received CHALLENGE from %s; sending RESPONSE (hash=%d)", auth.getAddress(), msg.src(), hash); auth.getDownProtocol().down(response); break; case ChallengeResponseHeader.RESPONSE: log.trace("%s: received RESPONSE from %s", auth.getAddress(), msg.getSrc()); Entry entry=pending_requests.get(msg.getSrc()); if(entry != null) entry.setResponse(hdr.hash); break; } return false; // don't pass up }
public Object up(Message message) { ToaHeader header=message.getHeader(this.id); if (header == null) return up_prot.up(message); switch (header.getType()) { case ToaHeader.DATA_MESSAGE: handleDataMessage(message, header); break; case ToaHeader.PROPOSE_MESSAGE: handleSequenceNumberPropose(message.getSrc(), header); break; case ToaHeader.FINAL_MESSAGE: handleFinalSequenceNumber(header); break; case ToaHeader.SINGLE_DESTINATION_MESSAGE: if (log.isTraceEnabled()) { log.trace("Received message %s with SINGLE_DESTINATION header. delivering...", message); } deliverManager.deliverSingleDestinationMessage(message, header.getMessageID()); break; default: throw new IllegalStateException("Unknown header type received " + header); } return null; }
public Object up(Message msg) { Address sender=msg.getSrc(); Header hdr=msg.getHeader(this.id); if(hdr != null) { update(sender); // updates the heartbeat entry for 'sender' num_heartbeats_received++; unsuspect(sender); return null; // consume heartbeat message, do not pass to the layer above } else if(msg_counts_as_heartbeat) { // message did not originate from FD_ALL layer, but still count as heartbeat update(sender); // update when data is received too ? maybe a bit costly if(has_suspected_mbrs) unsuspect(sender); } return up_prot.up(msg); // pass up to the layer above us }
protected void deliverBatch(MessageBatch batch) { try { if(batch == null || batch.isEmpty()) return; if(is_trace) { Message first=batch.first(), last=batch.last(); StringBuilder sb=new StringBuilder(local_addr + ": delivering " + batch.sender()); if(first != null && last != null) { NakAckHeader2 hdr1=first.getHeader(id), hdr2=last.getHeader(id); sb.append("#").append(hdr1.seqno).append("-").append(hdr2.seqno); } sb.append(" (" + batch.size()).append(" messages)"); log.trace(sb); } up_prot.up(batch); } catch(Throwable t) { log.error(Util.getMessage("FailedToDeliverMsg"), local_addr, "batch", batch, t); } }
/** * Handles a message coming from a layer below * @return true if the message was consumed, don't pass it further up, else false */ public boolean receiveMessage(Message msg) { Header hdr=msg.getHeader(this.corr_id); // Check if the message was sent by a request correlator with the same name; // there may be multiple request correlators in the same protocol stack if(hdr == null || hdr.corrId != this.corr_id) { log.trace("ID of request correlator header (%s) is different from ours (%d). Msg not accepted, passed up", hdr != null? String.valueOf(hdr.corrId) : "null", this.corr_id); return false; } if(hdr instanceof MultiDestinationHeader) { // if we are part of the exclusion list, then we discard the request (addressed to different members) Address[] exclusion_list=((MultiDestinationHeader)hdr).exclusion_list; if(exclusion_list != null && local_addr != null && Util.contains(local_addr, exclusion_list)) { log.trace("%s: dropped req from %s as we are in the exclusion list, hdr=%s", local_addr, msg.src(), hdr); return true; // don't pass this message further up } } dispatch(msg, hdr); return true; // message was consumed }