MCPcopy
hub / github.com/grafana/tempo / ReadAt

Method ReadAt

pkg/io/buffered.go:100–142  ·  view source on GitHub ↗
(b []byte, offset int64)

Source from the content-addressed store, hash-verified

98}
99
100func (r *BufferedReaderAt) ReadAt(b []byte, offset int64) (int, error) {
101 r.mtx.Lock()
102 defer r.mtx.Unlock()
103
104 if len(r.buffers) == 0 {
105 return r.ra.ReadAt(b, offset)
106 }
107
108 // Least-recently-used tracking
109 r.count++
110 var lru *readerBuffer
111 var buf *readerBuffer
112 for i := range r.buffers {
113 if r.canRead(&r.buffers[i], offset, int64(len(b))) {
114 buf = &r.buffers[i]
115 break
116 }
117
118 if lru == nil || r.buffers[i].count < lru.count {
119 lru = &r.buffers[i]
120 }
121 }
122
123 if buf == nil {
124 // No buffer satisfied read, overwrite least-recently-used
125 buf = lru
126
127 r.prep(buf, offset, int64(len(b)))
128 buf.count = r.count
129
130 var err error
131 if _, err = r.populate(buf); isFatalError(err) {
132 return 0, err
133 }
134
135 r.read(buf, b, offset)
136 return len(b), err
137 }
138
139 buf.count = r.count
140 r.read(buf, b, offset)
141 return len(b), nil
142}
143
144type BufferedWriter struct {
145 w io.Writer

Calls 6

canReadMethod · 0.95
prepMethod · 0.95
populateMethod · 0.95
readMethod · 0.95
isFatalErrorFunction · 0.70
ReadAtMethod · 0.65