func newChecksumBlockOp(block *hdfs.LocatedBlockProto) *hdfs.OpBlockChecksumProto { return &hdfs.OpBlockChecksumProto{ Header: &hdfs.BaseHeaderProto{ Block: block.GetB(), Token: block.GetBlockToken(), }, } }
func newBlockReadOp(block *hdfs.LocatedBlockProto, offset, length uint64) *hdfs.OpReadBlockProto { return &hdfs.OpReadBlockProto{ Header: &hdfs.ClientOperationHeaderProto{ BaseHeader: &hdfs.BaseHeaderProto{ Block: block.GetB(), Token: block.GetBlockToken(), }, ClientName: proto.String(ClientName), }, Offset: proto.Uint64(offset), Len: proto.Uint64(length), } }
// NewChecksumReader creates a new ChecksumReader for the given block. func NewChecksumReader(block *hdfs.LocatedBlockProto) *ChecksumReader { locs := block.GetLocs() datanodes := make([]string, len(locs)) for i, loc := range locs { dn := loc.GetId() datanodes[i] = fmt.Sprintf("%s:%d", dn.GetIpAddr(), dn.GetXferPort()) } return &ChecksumReader{ block: block, datanodes: newDatanodeFailover(datanodes), } }
// NewBlockReader returns a new BlockReader, given the block information and // security token from the namenode. It will connect (lazily) to one of the // provided datanode locations based on which datanodes have seen failures. func NewBlockReader(block *hdfs.LocatedBlockProto, offset int64, clientName string) *BlockReader { locs := block.GetLocs() datanodes := make([]string, len(locs)) for i, loc := range locs { datanodes[i] = getDatanodeAddress(loc) } return &BlockReader{ clientName: clientName, block: block, datanodes: newDatanodeFailover(datanodes), offset: offset, } }