diff options
| author | chrislu <chris.lu@gmail.com> | 2022-02-26 02:16:47 -0800 |
|---|---|---|
| committer | chrislu <chris.lu@gmail.com> | 2022-02-26 02:16:47 -0800 |
| commit | 28b395bef4887b55392af08f88aa345ea67b3d23 (patch) | |
| tree | 988e4464663bc93a962c9f8c8947b0fb0bb1f768 /weed/filer/stream.go | |
| parent | 3ad5fa6f6f513df152ff155b1fdd93a3c411b6ca (diff) | |
| download | seaweedfs-28b395bef4887b55392af08f88aa345ea67b3d23.tar.xz seaweedfs-28b395bef4887b55392af08f88aa345ea67b3d23.zip | |
better control for reader caching
Diffstat (limited to 'weed/filer/stream.go')
| -rw-r--r-- | weed/filer/stream.go | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/weed/filer/stream.go b/weed/filer/stream.go index e5163f2d9..b65641cbf 100644 --- a/weed/filer/stream.go +++ b/weed/filer/stream.go @@ -133,30 +133,30 @@ func writeZero(w io.Writer, size int64) (err error) { return } -func ReadAll(masterClient *wdclient.MasterClient, chunks []*filer_pb.FileChunk) ([]byte, error) { - - buffer := bytes.Buffer{} +func ReadAll(buffer []byte, masterClient *wdclient.MasterClient, chunks []*filer_pb.FileChunk) error { lookupFileIdFn := func(fileId string) (targetUrls []string, err error) { return masterClient.LookupFileId(fileId) } - chunkViews := ViewFromChunks(lookupFileIdFn, chunks, 0, math.MaxInt64) + chunkViews := ViewFromChunks(lookupFileIdFn, chunks, 0, int64(len(buffer))) + + idx := 0 for _, chunkView := range chunkViews { urlStrings, err := lookupFileIdFn(chunkView.FileId) if err != nil { glog.V(1).Infof("operation LookupFileId %s failed, err: %v", chunkView.FileId, err) - return nil, err + return err } - data, err := retriedFetchChunkData(urlStrings, chunkView.CipherKey, chunkView.IsGzipped, chunkView.IsFullChunk(), chunkView.Offset, int(chunkView.Size)) + n, err := retriedFetchChunkData(buffer[idx:idx+int(chunkView.Size)], urlStrings, chunkView.CipherKey, chunkView.IsGzipped, chunkView.IsFullChunk(), chunkView.Offset) if err != nil { - return nil, err + return err } - buffer.Write(data) + idx += n } - return buffer.Bytes(), nil + return nil } // ---------------- ChunkStreamReader ---------------------------------- |
