func()

in lambda/internal/tarfile/s3file.go [319:342]


func (c *BlockCache) Read(begin, end int64, cacheMissFn CacheMissFn) (buf []byte, err error) {
	if begin < 0 {
		return nil, fmt.Errorf("LRUBlockCache: negative begin")
	}
	if end < 0 {
		return nil, fmt.Errorf("LRUBlockCache: negative end")
	}
	if begin >= end {
		return nil, fmt.Errorf("LRUBlockCache: byte end must greater than byte begin")
	}
	bidBegin := begin / iolimits.BlockSize
	bidEnd := end / iolimits.BlockSize
	buf = make([]byte, 0)

	for bid := bidBegin; bid <= bidEnd; bid++ {
		b, e := blockAddressTranslation(begin, end, bid)
		block, err := c.pool.GetBlock(bid, cacheMissFn)
		if err != nil || block == nil {
			return nil, errors.Wrapf(err, "error when get block from pool")
		}
		buf = append(buf, block.Buf[b:e]...)
	}
	return buf, nil
}