in api/datanode/datanode.go [156:192]
func (dnClient *DatanodeClient) ReadChunk(id *dnapi.DatanodeBlockID, info ChunkInfo) ([]byte, error) {
result := make([]byte, 0)
bpc := uint32(12)
checksumType := dnapi.ChecksumType_NONE
checksumDataProto := dnapi.ChecksumData{
Type: &checksumType,
BytesPerChecksum: &bpc,
}
chunkInfoProto := dnapi.ChunkInfo{
ChunkName: &info.Name,
Offset: &info.Offset,
Len: &info.Len,
ChecksumData: &checksumDataProto,
}
req := dnapi.ReadChunkRequestProto{
BlockID: id,
ChunkData: &chunkInfoProto,
}
commandType := dnapi.Type_ReadChunk
uuid := dnClient.currentDatanode.GetUuid()
proto := dnapi.ContainerCommandRequestProto{
CmdType: &commandType,
ReadChunk: &req,
ContainerID: id.ContainerID,
DatanodeUuid: &uuid,
}
resp, err := dnClient.sendDatanodeCommand(proto)
if err != nil {
return result, err
}
if resp.GetResult() != dnapi.Result_SUCCESS {
return nil, errors.New(resp.GetResult().String() + " " + resp.GetMessage())
}
return resp.GetReadChunk().Data, nil
}