MCPcopy Create free account
hub / github.com/OpenListTeam/OpenList / getReaderAtOffset

Method getReaderAtOffset

internal/stream/stream.go:444–485  ·  view source on GitHub ↗
(off int64)

Source from the content-addressed store, hash-verified

442}
443
444func (r *RangeReadReadAtSeeker) getReaderAtOffset(off int64) (io.Reader, error) {
445 for {
446 var cur int64 = -1
447 r.readerMap.Range(func(key, value any) bool {
448 k := key.(int64)
449 if off == k {
450 cur = k
451 return false
452 }
453 if off > k && off-k <= 4*utils.MB && k > cur {
454 cur = k
455 }
456 return true
457 })
458 if cur < 0 {
459 break
460 }
461 v, ok := r.readerMap.LoadAndDelete(int64(cur))
462 if !ok {
463 continue
464 }
465 rr := v.(io.Reader)
466 if off == int64(cur) {
467 // logrus.Debugf("getReaderAtOffset match_%d", off)
468 return rr, nil
469 }
470 n, _ := utils.CopyWithBufferN(io.Discard, rr, off-cur)
471 cur += n
472 if cur == off {
473 // logrus.Debugf("getReaderAtOffset old_%d", off)
474 return rr, nil
475 }
476 break
477 }
478
479 // logrus.Debugf("getReaderAtOffset new_%d", off)
480 reader, err := r.ss.RangeRead(http_range.Range{Start: off, Length: -1})
481 if err != nil {
482 return nil, err
483 }
484 return reader, nil
485}
486
487func (r *RangeReadReadAtSeeker) ReadAt(p []byte, off int64) (n int, err error) {
488 if off < 0 || off >= r.ss.GetSize() {

Callers 2

NewReadAtSeekerFunction · 0.95
ReadAtMethod · 0.95

Calls 3

CopyWithBufferNFunction · 0.92
RangeMethod · 0.80
RangeReadMethod · 0.65

Tested by

no test coverage detected