Example usage for org.apache.hadoop.hdfs.protocol.datatransfer PipelineAck UNKOWN_SEQNO

List of usage examples for org.apache.hadoop.hdfs.protocol.datatransfer PipelineAck UNKOWN_SEQNO

Introduction

In this page you can find the example usage for org.apache.hadoop.hdfs.protocol.datatransfer PipelineAck UNKOWN_SEQNO.

Prototype

long UNKOWN_SEQNO

To view the source code for org.apache.hadoop.hdfs.protocol.datatransfer PipelineAck UNKOWN_SEQNO.

Click Source Link

Usage

From source file:com.mellanox.r4h.DataXceiverBase.java

License:Apache License

private void processPacketReply(Msg msg) throws IOException {
    boolean readAckfields = false;
    Msg origMsg = msg.getMirror(false);/*from ww w.j a  v a2  s  .  c  o m*/
    PacketMessageContext pmc = PacketMessageContext.getPacketMessageContext(origMsg);
    if (LOG.isTraceEnabled()) {
        LOG.trace("origMsg isMirror=" + origMsg.getIsMirror());
    }
    long expected = PipelineAck.UNKOWN_SEQNO;
    long seqno = PipelineAck.UNKOWN_SEQNO;
    R4HPipelineAck ack = new R4HPipelineAck();
    try {
        msg.getIn().position(0);
        ack.readFields(new DataInputStream(new ByteBufferInputStream(msg.getIn())));
        readAckfields = true;

        if (LOG.isDebugEnabled()) {
            LOG.debug("PacketResponder " + oprHeader.getNumTargets() + " for block " + blockReceiver.getBlock()
                    + " got " + ack);
        }
        msg.getOut().position(0);
        seqno = ack.getSeqno();
        expected = pmc.getSeqno();
        boolean isLastPkt = pmc.isLastPacketInBlock();

        // verify seqno
        if (seqno != expected) {
            if (LOG.isTraceEnabled()) {
                LOG.trace(String.format("MSG user context: msg ref=%s , context ref=%s",
                        Integer.toHexString(System.identityHashCode(msg)),
                        Integer.toHexString(System.identityHashCode(msg.getUserContext()))));
            }
            throw new IOException("PacketResponder " + oprHeader.getNumTargets() + " for block "
                    + oprHeader.getBlock() + " expected seqno:" + expected + " received:" + seqno);
        }

        // If this is the last packet in block, then close block
        // file and finalize the block before responding success
        if (isLastPkt) {
            blockReceiver.finalizeBlock();
            asyncCloseClientSession();
        }

        PipelineAck ackReadyForReply = preparePipelineAck(origMsg, expected, ack, SUCCESS);
        pmc.setMessageAck(ackReadyForReply);

    } catch (Throwable e) {
        LOG.error("Failed during processing packet reply: " + blockReceiver.getBlock() + " "
                + oprHeader.getNumTargets() + " Exception " + StringUtils.stringifyException(e));
        if ((clientSession != null) && (!clientSession.getIsClosing())) {
            asyncCloseClientSession();
        }
    } finally {
        if (serverSession != null) {
            if (!readAckfields) {
                PipelineAck brokenPipelineError = prepareBrokenPipelineAck(origMsg, expected);
                pmc.setMessageAck(brokenPipelineError);
            } else if ((clientSession == null) && (!pmc.isLastPacketInBlock())) {
                PipelineAck errorAck = preparePipelineAck(origMsg, expected, ack, ERROR);
                pmc.setMessageAck(errorAck);
            }
        }

        int refCount = pmc.decrementReferenceCounter();
        if (refCount == 0) {
            msgCallbacks.onMessageAction(origMsg);
        }
    }
}