func()

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
}