diff options
| author | hilimd <68371223+hilimd@users.noreply.github.com> | 2020-10-12 11:01:13 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-10-12 11:01:13 +0800 |
| commit | 2ff727a32d6d879a49ff5848b592518c96bb6403 (patch) | |
| tree | db952c7f054d44be208c5c4b4bc4c6769975a82c /weed/filer | |
| parent | b9a446839a52739ddfdd072d0208c4dfe659056d (diff) | |
| parent | d5fcb0f474ac72389b89ba2d42adc4089b0f3e88 (diff) | |
| download | seaweedfs-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.go | 2 | ||||
| -rw-r--r-- | weed/filer/reader_at.go | 18 | ||||
| -rw-r--r-- | weed/filer/stream.go | 2 |
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) |
