func()

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
}