aboutsummaryrefslogtreecommitdiff
path: root/weed/filer
diff options
context:
space:
mode:
authorhilimd <68371223+hilimd@users.noreply.github.com>2020-10-12 11:01:13 +0800
committerGitHub <noreply@github.com>2020-10-12 11:01:13 +0800
commit2ff727a32d6d879a49ff5848b592518c96bb6403 (patch)
treedb952c7f054d44be208c5c4b4bc4c6769975a82c /weed/filer
parentb9a446839a52739ddfdd072d0208c4dfe659056d (diff)
parentd5fcb0f474ac72389b89ba2d42adc4089b0f3e88 (diff)
downloadseaweedfs-2ff727a32d6d879a49ff5848b592518c96bb6403.tar.xz
seaweedfs-2ff727a32d6d879a49ff5848b592518c96bb6403.zip
Merge pull request #25 from chrislusf/master
sync
Diffstat (limited to 'weed/filer')
-rw-r--r--weed/filer/filechunk_manifest.go2
-rw-r--r--weed/filer/reader_at.go18
-rw-r--r--weed/filer/stream.go2
3 files changed, 19 insertions, 3 deletions
diff --git a/weed/filer/filechunk_manifest.go b/weed/filer/filechunk_manifest.go
index 9e53e008f..2df8a4bbf 100644
--- a/weed/filer/filechunk_manifest.go
+++ b/weed/filer/filechunk_manifest.go
@@ -98,7 +98,7 @@ func retriedFetchChunkData(urlStrings []string, cipherKey []byte, isGzipped bool
var err error
var buffer bytes.Buffer
- for waitTime := time.Second; waitTime < 10*time.Second; waitTime += waitTime / 2 {
+ for waitTime := time.Second; waitTime < ReadWaitTime; waitTime += waitTime / 2 {
for _, urlString := range urlStrings {
err = util.ReadUrlAsStream(urlString, cipherKey, isGzipped, isFullChunk, offset, size, func(data []byte) {
buffer.Write(data)
diff --git a/weed/filer/reader_at.go b/weed/filer/reader_at.go
index fa51df687..835d6cfc2 100644
--- a/weed/filer/reader_at.go
+++ b/weed/filer/reader_at.go
@@ -11,6 +11,11 @@ import (
"io"
"math/rand"
"sync"
+ "time"
+)
+
+var (
+ ReadWaitTime = 6 * time.Second
)
type ChunkReadAt struct {
@@ -37,7 +42,8 @@ func LookupFn(filerClient filer_pb.FilerClient) LookupFileIdFunctionType {
vid := VolumeId(fileId)
locations, found := vidCache[vid]
- if !found {
+ waitTime := time.Second
+ for !found && waitTime < ReadWaitTime {
// println("looking up volume", vid)
err = filerClient.WithFilerClient(func(client filer_pb.SeaweedFilerClient) error {
resp, err := client.LookupVolume(context.Background(), &filer_pb.LookupVolumeRequest{
@@ -56,6 +62,16 @@ func LookupFn(filerClient filer_pb.FilerClient) LookupFileIdFunctionType {
return nil
})
+ if err == nil {
+ break
+ }
+ glog.V(1).Infof("wait for volume %s", vid)
+ time.Sleep(waitTime)
+ waitTime += waitTime / 2
+ }
+
+ if err != nil {
+ return nil, err
}
for _, loc := range locations.Locations {
diff --git a/weed/filer/stream.go b/weed/filer/stream.go
index f6e2a7643..a41aebe22 100644
--- a/weed/filer/stream.go
+++ b/weed/filer/stream.go
@@ -34,7 +34,7 @@ func StreamContent(masterClient *wdclient.MasterClient, w io.Writer, chunks []*f
urlStrings := fileId2Url[chunkView.FileId]
data, err := retriedFetchChunkData(urlStrings, chunkView.CipherKey, chunkView.IsGzipped, chunkView.IsFullChunk(), chunkView.Offset, int(chunkView.Size))
- if err == nil {
+ if err != nil {
return err
}
w.Write(data)