MCPcopy Create free account
hub / github.com/cortexproject/cortex / decompressFromReader

Function decompressFromReader

pkg/util/http.go:200–231  ·  view source on GitHub ↗
(reader io.Reader, expectedSize, maxSize int, compression CompressionType, sp opentracing.Span)

Source from the content-addressed store, hash-verified

198}
199
200func decompressFromReader(reader io.Reader, expectedSize, maxSize int, compression CompressionType, sp opentracing.Span) ([]byte, error) {
201 var (
202 buf bytes.Buffer
203 body []byte
204 err error
205 )
206 if expectedSize > 0 {
207 buf.Grow(expectedSize + bytes.MinRead) // extra space guarantees no reallocation
208 }
209 // Read from LimitReader with limit max+1. So if the underlying
210 // reader is over limit, the result will be bigger than max.
211 reader = io.LimitReader(reader, int64(maxSize)+1)
212 switch compression {
213 case NoCompression:
214 _, err = buf.ReadFrom(reader)
215 body = buf.Bytes()
216 case RawSnappy:
217 _, err = buf.ReadFrom(reader)
218 if err != nil {
219 return nil, err
220 }
221 body, err = decompressFromBuffer(&buf, maxSize, RawSnappy, sp)
222 case Gzip:
223 gzReader, gzErr := gzip.NewReader(reader)
224 if gzErr != nil {
225 return nil, gzErr
226 }
227 _, err = buf.ReadFrom(io.LimitReader(gzReader, int64(maxSize)+1))
228 body = buf.Bytes()
229 }
230 return body, err
231}
232
233func decompressFromBuffer(buffer *bytes.Buffer, maxSize int, compression CompressionType, sp opentracing.Span) ([]byte, error) {
234 if len(buffer.Bytes()) > maxSize {

Callers 1

decompressRequestFunction · 0.85

Calls 2

decompressFromBufferFunction · 0.85
BytesMethod · 0.65

Tested by

no test coverage detected