Java Code Examples for org.apache.hadoop.hdfs.protocol.proto.DataTransferProtos.BlockOpResponseProto#getMessage()

The following examples show how to use org.apache.hadoop.hdfs.protocol.proto.DataTransferProtos.BlockOpResponseProto#getMessage() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: DataTransferProtoUtil.java    From hadoop with Apache License 2.0 6 votes vote down vote up
public static void checkBlockOpStatus(
        BlockOpResponseProto response,
        String logInfo) throws IOException {
  if (response.getStatus() != Status.SUCCESS) {
    if (response.getStatus() == Status.ERROR_ACCESS_TOKEN) {
      throw new InvalidBlockTokenException(
        "Got access token error"
        + ", status message " + response.getMessage()
        + ", " + logInfo
      );
    } else {
      throw new IOException(
        "Got error"
        + ", status message " + response.getMessage()
        + ", " + logInfo
      );
    }
  }
}
 
Example 2
Source File: DataTransferProtoUtil.java    From big-c with Apache License 2.0 6 votes vote down vote up
public static void checkBlockOpStatus(
        BlockOpResponseProto response,
        String logInfo) throws IOException {
  if (response.getStatus() != Status.SUCCESS) {
    if (response.getStatus() == Status.ERROR_ACCESS_TOKEN) {
      throw new InvalidBlockTokenException(
        "Got access token error"
        + ", status message " + response.getMessage()
        + ", " + logInfo
      );
    } else {
      throw new IOException(
        "Got error"
        + ", status message " + response.getMessage()
        + ", " + logInfo
      );
    }
  }
}
 
Example 3
Source File: BlockReaderFactory.java    From hadoop with Apache License 2.0 4 votes vote down vote up
/**
 * Request file descriptors from a DomainPeer.
 *
 * @param peer   The peer to use for communication.
 * @param slot   If non-null, the shared memory slot to associate with the 
 *               new ShortCircuitReplica.
 * 
 * @return  A ShortCircuitReplica object if we could communicate with the
 *          datanode; null, otherwise. 
 * @throws  IOException If we encountered an I/O exception while communicating
 *          with the datanode.
 */
private ShortCircuitReplicaInfo requestFileDescriptors(DomainPeer peer,
        Slot slot) throws IOException {
  ShortCircuitCache cache = clientContext.getShortCircuitCache();
  final DataOutputStream out =
      new DataOutputStream(new BufferedOutputStream(peer.getOutputStream()));
  SlotId slotId = slot == null ? null : slot.getSlotId();
  new Sender(out).requestShortCircuitFds(block, token, slotId, 1,
      failureInjector.getSupportsReceiptVerification());
  DataInputStream in = new DataInputStream(peer.getInputStream());
  BlockOpResponseProto resp = BlockOpResponseProto.parseFrom(
      PBHelper.vintPrefixed(in));
  DomainSocket sock = peer.getDomainSocket();
  failureInjector.injectRequestFileDescriptorsFailure();
  switch (resp.getStatus()) {
  case SUCCESS:
    byte buf[] = new byte[1];
    FileInputStream fis[] = new FileInputStream[2];
    sock.recvFileInputStreams(fis, buf, 0, buf.length);
    ShortCircuitReplica replica = null;
    try {
      ExtendedBlockId key =
          new ExtendedBlockId(block.getBlockId(), block.getBlockPoolId());
      if (buf[0] == USE_RECEIPT_VERIFICATION.getNumber()) {
        LOG.trace("Sending receipt verification byte for slot " + slot);
        sock.getOutputStream().write(0);
      }
      replica = new ShortCircuitReplica(key, fis[0], fis[1], cache,
          Time.monotonicNow(), slot);
      return new ShortCircuitReplicaInfo(replica);
    } catch (IOException e) {
      // This indicates an error reading from disk, or a format error.  Since
      // it's not a socket communication problem, we return null rather than
      // throwing an exception.
      LOG.warn(this + ": error creating ShortCircuitReplica.", e);
      return null;
    } finally {
      if (replica == null) {
        IOUtils.cleanup(DFSClient.LOG, fis[0], fis[1]);
      }
    }
  case ERROR_UNSUPPORTED:
    if (!resp.hasShortCircuitAccessVersion()) {
      LOG.warn("short-circuit read access is disabled for " +
          "DataNode " + datanode + ".  reason: " + resp.getMessage());
      clientContext.getDomainSocketFactory()
          .disableShortCircuitForPath(pathInfo.getPath());
    } else {
      LOG.warn("short-circuit read access for the file " +
          fileName + " is disabled for DataNode " + datanode +
          ".  reason: " + resp.getMessage());
    }
    return null;
  case ERROR_ACCESS_TOKEN:
    String msg = "access control error while " +
        "attempting to set up short-circuit access to " +
        fileName + resp.getMessage();
    if (LOG.isDebugEnabled()) {
      LOG.debug(this + ":" + msg);
    }
    return new ShortCircuitReplicaInfo(new InvalidToken(msg));
  default:
    LOG.warn(this + ": unknown response code " + resp.getStatus() +
        " while attempting to set up short-circuit access. " +
        resp.getMessage());
    clientContext.getDomainSocketFactory()
        .disableShortCircuitForPath(pathInfo.getPath());
    return null;
  }
}
 
Example 4
Source File: BlockReaderFactory.java    From big-c with Apache License 2.0 4 votes vote down vote up
/**
 * Request file descriptors from a DomainPeer.
 *
 * @param peer   The peer to use for communication.
 * @param slot   If non-null, the shared memory slot to associate with the 
 *               new ShortCircuitReplica.
 * 
 * @return  A ShortCircuitReplica object if we could communicate with the
 *          datanode; null, otherwise. 
 * @throws  IOException If we encountered an I/O exception while communicating
 *          with the datanode.
 */
private ShortCircuitReplicaInfo requestFileDescriptors(DomainPeer peer,
        Slot slot) throws IOException {
  ShortCircuitCache cache = clientContext.getShortCircuitCache();
  final DataOutputStream out =
      new DataOutputStream(new BufferedOutputStream(peer.getOutputStream()));
  SlotId slotId = slot == null ? null : slot.getSlotId();
  new Sender(out).requestShortCircuitFds(block, token, slotId, 1,
      failureInjector.getSupportsReceiptVerification());
  DataInputStream in = new DataInputStream(peer.getInputStream());
  BlockOpResponseProto resp = BlockOpResponseProto.parseFrom(
      PBHelper.vintPrefixed(in));
  DomainSocket sock = peer.getDomainSocket();
  failureInjector.injectRequestFileDescriptorsFailure();
  switch (resp.getStatus()) {
  case SUCCESS:
    byte buf[] = new byte[1];
    FileInputStream fis[] = new FileInputStream[2];
    sock.recvFileInputStreams(fis, buf, 0, buf.length);
    ShortCircuitReplica replica = null;
    try {
      ExtendedBlockId key =
          new ExtendedBlockId(block.getBlockId(), block.getBlockPoolId());
      if (buf[0] == USE_RECEIPT_VERIFICATION.getNumber()) {
        LOG.trace("Sending receipt verification byte for slot " + slot);
        sock.getOutputStream().write(0);
      }
      replica = new ShortCircuitReplica(key, fis[0], fis[1], cache,
          Time.monotonicNow(), slot);
      return new ShortCircuitReplicaInfo(replica);
    } catch (IOException e) {
      // This indicates an error reading from disk, or a format error.  Since
      // it's not a socket communication problem, we return null rather than
      // throwing an exception.
      LOG.warn(this + ": error creating ShortCircuitReplica.", e);
      return null;
    } finally {
      if (replica == null) {
        IOUtils.cleanup(DFSClient.LOG, fis[0], fis[1]);
      }
    }
  case ERROR_UNSUPPORTED:
    if (!resp.hasShortCircuitAccessVersion()) {
      LOG.warn("short-circuit read access is disabled for " +
          "DataNode " + datanode + ".  reason: " + resp.getMessage());
      clientContext.getDomainSocketFactory()
          .disableShortCircuitForPath(pathInfo.getPath());
    } else {
      LOG.warn("short-circuit read access for the file " +
          fileName + " is disabled for DataNode " + datanode +
          ".  reason: " + resp.getMessage());
    }
    return null;
  case ERROR_ACCESS_TOKEN:
    String msg = "access control error while " +
        "attempting to set up short-circuit access to " +
        fileName + resp.getMessage();
    if (LOG.isDebugEnabled()) {
      LOG.debug(this + ":" + msg);
    }
    return new ShortCircuitReplicaInfo(new InvalidToken(msg));
  default:
    LOG.warn(this + ": unknown response code " + resp.getStatus() +
        " while attempting to set up short-circuit access. " +
        resp.getMessage());
    clientContext.getDomainSocketFactory()
        .disableShortCircuitForPath(pathInfo.getPath());
    return null;
  }
}