MCPcopy Create free account
hub / github.com/google/go-cloud / newRangeReader

Method newRangeReader

blob/blob.go:1031–1086  ·  view source on GitHub ↗
(ctx context.Context, key string, offset, length int64, opts *ReaderOptions)

Source from the content-addressed store, hash-verified

1029}
1030
1031func (b *Bucket) newRangeReader(ctx context.Context, key string, offset, length int64, opts *ReaderOptions) (_ *Reader, err error) {
1032 b.mu.RLock()
1033 defer b.mu.RUnlock()
1034 if b.closed {
1035 return nil, errClosed
1036 }
1037 if offset < 0 {
1038 return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "blob: NewRangeReader offset must be non-negative (%d)", offset)
1039 }
1040 if !utf8.ValidString(key) {
1041 return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "blob: NewRangeReader key must be a valid UTF-8 string: %q", key)
1042 }
1043 if opts == nil {
1044 opts = &ReaderOptions{}
1045 }
1046 dopts := &driver.ReaderOptions{
1047 BeforeRead: opts.BeforeRead,
1048 }
1049 ctx, span := b.tracer.Start(ctx, "NewRangeReader")
1050 defer func() {
1051 // If err == nil, we handed the end closure off to the returned *Reader; it
1052 // will be called when the Reader is Closed.
1053 if err != nil {
1054 b.tracer.End(ctx, span, err)
1055 }
1056 }()
1057 var dr driver.Reader
1058 dr, err = b.b.NewRangeReader(ctx, key, offset, length, dopts)
1059 if err != nil {
1060 return nil, wrapError(b.b, err, key)
1061 }
1062 end := func(err error) { b.tracer.End(ctx, span, err) }
1063 r := &Reader{
1064 b: b.b,
1065 r: dr,
1066 key: key,
1067 ctx: ctx,
1068 dopts: dopts,
1069 baseOffset: offset,
1070 baseLength: length,
1071 savedOffset: -1,
1072 end: end,
1073 bytesReadCounter: b.bytesReadCounter,
1074 }
1075 _, file, lineno, ok := runtime.Caller(2)
1076 runtime.SetFinalizer(r, func(r *Reader) {
1077 if !r.closed {
1078 var caller string
1079 if ok {
1080 caller = fmt.Sprintf(" (%s:%d)", file, lineno)
1081 }
1082 log.Printf("A blob.Reader reading from %q was never closed%s", key, caller)
1083 }
1084 })
1085 return r, nil
1086}
1087
1088// WriteAll is a shortcut for creating a Writer via NewWriter and writing p.

Callers 2

NewReaderMethod · 0.95
NewRangeReaderMethod · 0.95

Calls 5

NewfFunction · 0.92
StartMethod · 0.80
EndMethod · 0.80
wrapErrorFunction · 0.70
NewRangeReaderMethod · 0.65

Tested by

no test coverage detected