preadRemote reads the file.
(log zerolog.Logger, req *http.Request, client *http.Client, buf []byte)
| 225 | |
| 226 | // preadRemote reads the file. |
| 227 | func (r *reader) preadRemote(log zerolog.Logger, req *http.Request, client *http.Client, buf []byte) (int, error) { |
| 228 | log.Debug().Str("url", req.URL.String()).Str("range", req.Header.Get("Range")).Msg("reader preadRemote start") |
| 229 | statusCode := -1 |
| 230 | s := time.Now() |
| 231 | defer func() { |
| 232 | log.Debug().Int("status", statusCode).Dur("duration", time.Since(s)).Msg("reader preadRemote stop") |
| 233 | }() |
| 234 | |
| 235 | resp, err := client.Do(req) |
| 236 | if resp != nil { |
| 237 | statusCode = resp.StatusCode |
| 238 | } |
| 239 | if err != nil { |
| 240 | detailedErr := Error{resp, err} |
| 241 | log.Error().Err(detailedErr).Str("url", req.URL.String()).Str("range", req.Header.Get("Range")).Msg("reader preadRemote error") |
| 242 | return 0, detailedErr |
| 243 | } |
| 244 | defer func() { |
| 245 | if closeErr := resp.Body.Close(); closeErr != nil { |
| 246 | log.Error().Err(closeErr).Msg("reader preadRemote body close error") |
| 247 | } |
| 248 | }() |
| 249 | |
| 250 | if resp.StatusCode != 200 && resp.StatusCode != 206 { |
| 251 | log.Error().Err(err).Int("status", resp.StatusCode).Msg("reader preadRemote error") |
| 252 | return 0, Error{resp, fmt.Errorf("unexpected response code: %d", resp.StatusCode)} |
| 253 | } |
| 254 | |
| 255 | return io.ReadFull(resp.Body, buf) |
| 256 | } |
| 257 | |
| 258 | // originRequest will create a new request to origin. |
| 259 | func (r *reader) originRequest(start, end int64) (*http.Request, error) { |
no test coverage detected