diff options
| author | Chris Lu <chrislusf@users.noreply.github.com> | 2019-12-25 19:17:24 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-12-25 19:17:24 -0800 |
| commit | bcc3092255a6ed39d8f9b14781e0dd58fab90b3d (patch) | |
| tree | 6fe001148f92fb81fc2c27c3c6a3b109adce6cb2 | |
| parent | 1346437d7193405b0a4ef52a0fbed37edafbfb33 (diff) | |
| parent | 84640d07b78422e46d58f5c2dcee6b1e86581e9b (diff) | |
| download | seaweedfs-bcc3092255a6ed39d8f9b14781e0dd58fab90b3d.tar.xz seaweedfs-bcc3092255a6ed39d8f9b14781e0dd58fab90b3d.zip | |
Merge pull request #1172 from divinerapier/master
fix: handle errors for ReadUrl
| -rw-r--r-- | weed/util/http_util.go | 40 |
1 files changed, 24 insertions, 16 deletions
diff --git a/weed/util/http_util.go b/weed/util/http_util.go index 2e0614805..025cdee7b 100644 --- a/weed/util/http_util.go +++ b/weed/util/http_util.go @@ -187,9 +187,12 @@ func NormalizeUrl(url string) string { return "http://" + url } -func ReadUrl(fileUrl string, offset int64, size int, buf []byte, isReadRange bool) (n int64, e error) { +func ReadUrl(fileUrl string, offset int64, size int, buf []byte, isReadRange bool) (int64, error) { - req, _ := http.NewRequest("GET", fileUrl, nil) + req, err := http.NewRequest("GET", fileUrl, nil) + if err != nil { + return 0, err + } if isReadRange { req.Header.Add("Range", fmt.Sprintf("bytes=%d-%d", offset, offset+int64(size))) } else { @@ -215,28 +218,33 @@ func ReadUrl(fileUrl string, offset int64, size int, buf []byte, isReadRange boo reader = r.Body } - var i, m int + var ( + i, m int + n int64 + ) + // refers to https://github.com/golang/go/blob/master/src/bytes/buffer.go#L199 + // commit id c170b14c2c1cfb2fd853a37add92a82fd6eb4318 for { m, err = reader.Read(buf[i:]) - if m == 0 { - return - } i += m n += int64(m) if err == io.EOF { return n, nil } - if e != nil { - return n, e + if err != nil { + return n, err } } } -func ReadUrlAsStream(fileUrl string, offset int64, size int, fn func(data []byte)) (n int64, e error) { +func ReadUrlAsStream(fileUrl string, offset int64, size int, fn func(data []byte)) (int64, error) { - req, _ := http.NewRequest("GET", fileUrl, nil) + req, err := http.NewRequest("GET", fileUrl, nil) + if err != nil { + return 0, err + } req.Header.Add("Range", fmt.Sprintf("bytes=%d-%d", offset, offset+int64(size))) r, err := client.Do(req) @@ -248,21 +256,21 @@ func ReadUrlAsStream(fileUrl string, offset int64, size int, fn func(data []byte return 0, fmt.Errorf("%s: %s", fileUrl, r.Status) } - var m int + var ( + m int + n int64 + ) buf := make([]byte, 64*1024) for { m, err = r.Body.Read(buf) - if m == 0 { - return - } fn(buf[:m]) n += int64(m) if err == io.EOF { return n, nil } - if e != nil { - return n, e + if err != nil { + return n, err } } |
