private Pair<Pair<ServerErrorCode, InputStream>, ResponseInfo> getGetResponse(DataNodeId dataNodeId, BlobId blobId,
      MessageFormatFlags flags, GetOption getOption, ClusterMap clusterMap) throws Exception {
    PartitionId partitionId = blobId.getPartition();
    PartitionRequestInfo partitionRequestInfo =
        new PartitionRequestInfo(partitionId, Collections.singletonList(blobId));
    List<PartitionRequestInfo> partitionRequestInfos = new ArrayList<>();
    partitionRequestInfos.add(partitionRequestInfo);
    GetRequest getRequest =
        new GetRequest(correlationId.incrementAndGet(), CLIENT_ID, flags, partitionRequestInfos, getOption);
    ResponseInfo response = sendRequestGetResponse(dataNodeId, partitionId, getRequest);
    return new Pair<>(ToolRequestResponseUtil.decodeGetResponse(response, clusterMap).getFirst(), response);
  }
Sends a {@link GetRequest} based on the provided parameters and returns the response stream if the request was
successful. {@code null} otherwise.
@param dataNodeId the {@link DataNodeId} to contact.
@param blobId the {@link BlobId} to operate on.
@param flags the {@link MessageFormatFlags} associated with the {@link GetRequest}.
@param getOption the {@link GetOption} to send with the {@link GetRequest}.
@param clusterMap the {@link ClusterMap} to use.
@return the {@link ServerErrorCode} and response stream if the request was successful. {@code null} for the
response stream otherwise.
@throws Exception
ambry-tools/src/main/java/com/github/ambry/tools/admin/ServerAdminTool.java