in pkg/service/service.go [51:89]
func (s *Service) Get(ctx context.Context, logger *zap.SugaredLogger, set resultset.ResultSet, start, n int64) ([]byte, error) {
logger = logger.With("start", start, "n", n)
if n == 0 {
return nil, nil
}
// pb.Range.Start counts at the first digit before the decimal point (3)
// while the rest of the program treats the first digit after the decimal point (1)
// as the zeroth digit. We need a special handling here.
zero := start == 0
unpacked := make([]byte, n)
off := 0
if zero {
n--
unpacked[0] = set.FirstDigit()
off = 1
} else {
start--
}
rr := set.NewReader(ctx, s.bucket)
defer rr.Close()
reader := unpack.NewReader(ctx, cached.NewCachedReader(ctx, rr))
read, err := reader.ReadAt(unpacked[off:], start)
if err != nil && !errors.Is(err, io.EOF) {
logger.Errorw("ReadAt returned error",
"error", err,
)
return nil, errInternal
}
if zero {
read++
}
return unpacked[:read], nil
}