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
}