aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lu <chrislusf@users.noreply.github.com>2019-12-25 19:17:24 -0800
committerGitHub <noreply@github.com>2019-12-25 19:17:24 -0800
commitbcc3092255a6ed39d8f9b14781e0dd58fab90b3d (patch)
tree6fe001148f92fb81fc2c27c3c6a3b109adce6cb2
parent1346437d7193405b0a4ef52a0fbed37edafbfb33 (diff)
parent84640d07b78422e46d58f5c2dcee6b1e86581e9b (diff)
downloadseaweedfs-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.go40
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
}
}