aboutsummaryrefslogtreecommitdiff
path: root/weed/filer/stream.go
diff options
context:
space:
mode:
authorchrislu <chris.lu@gmail.com>2022-02-26 02:16:47 -0800
committerchrislu <chris.lu@gmail.com>2022-02-26 02:16:47 -0800
commit28b395bef4887b55392af08f88aa345ea67b3d23 (patch)
tree988e4464663bc93a962c9f8c8947b0fb0bb1f768 /weed/filer/stream.go
parent3ad5fa6f6f513df152ff155b1fdd93a3c411b6ca (diff)
downloadseaweedfs-28b395bef4887b55392af08f88aa345ea67b3d23.tar.xz
seaweedfs-28b395bef4887b55392af08f88aa345ea67b3d23.zip
better control for reader caching
Diffstat (limited to 'weed/filer/stream.go')
-rw-r--r--weed/filer/stream.go18
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 ----------------------------------