aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2021-08-07 14:46:23 -0700
committerChris Lu <chris.lu@gmail.com>2021-08-07 14:46:23 -0700
commitecb234f75aadfcaf64638fdd9532e3bc95d0e4ce (patch)
tree550a883c3016e6edcbfcf542bdf13004b44d66d8
parent0c0f77e2ae45e1f905d33bf9cf129667665121ab (diff)
downloadseaweedfs-ecb234f75aadfcaf64638fdd9532e3bc95d0e4ce.tar.xz
seaweedfs-ecb234f75aadfcaf64638fdd9532e3bc95d0e4ce.zip
refactor
-rw-r--r--weed/filer/stream.go22
1 files changed, 15 insertions, 7 deletions
diff --git a/weed/filer/stream.go b/weed/filer/stream.go
index 70a278ca5..197b87ab8 100644
--- a/weed/filer/stream.go
+++ b/weed/filer/stream.go
@@ -89,6 +89,7 @@ func ReadAll(masterClient *wdclient.MasterClient, chunks []*filer_pb.FileChunk)
// ---------------- ChunkStreamReader ----------------------------------
type ChunkStreamReader struct {
chunkViews []*ChunkView
+ totalSize int64
logicOffset int64
buffer []byte
bufferOffset int64
@@ -107,9 +108,15 @@ func NewChunkStreamReaderFromFiler(masterClient *wdclient.MasterClient, chunks [
chunkViews := ViewFromChunks(lookupFileIdFn, chunks, 0, math.MaxInt64)
+ var totalSize int64
+ for _, chunk := range chunkViews {
+ totalSize += int64(chunk.Size)
+ }
+
return &ChunkStreamReader{
chunkViews: chunkViews,
lookupFileId: lookupFileIdFn,
+ totalSize: totalSize,
}
}
@@ -119,9 +126,15 @@ func NewChunkStreamReader(filerClient filer_pb.FilerClient, chunks []*filer_pb.F
chunkViews := ViewFromChunks(lookupFileIdFn, chunks, 0, math.MaxInt64)
+ var totalSize int64
+ for _, chunk := range chunkViews {
+ totalSize += int64(chunk.Size)
+ }
+
return &ChunkStreamReader{
chunkViews: chunkViews,
lookupFileId: lookupFileIdFn,
+ totalSize: totalSize,
}
}
@@ -148,20 +161,15 @@ func (c *ChunkStreamReader) isBufferEmpty() bool {
func (c *ChunkStreamReader) Seek(offset int64, whence int) (int64, error) {
- var totalSize int64
- for _, chunk := range c.chunkViews {
- totalSize += int64(chunk.Size)
- }
-
var err error
switch whence {
case io.SeekStart:
case io.SeekCurrent:
offset += c.bufferOffset + int64(c.bufferPos)
case io.SeekEnd:
- offset = totalSize + offset
+ offset = c.totalSize + offset
}
- if offset > totalSize {
+ if offset > c.totalSize {
err = io.ErrUnexpectedEOF
}