diff options
| author | Chris Lu <chris.lu@gmail.com> | 2021-08-07 14:46:23 -0700 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2021-08-07 14:46:23 -0700 |
| commit | ecb234f75aadfcaf64638fdd9532e3bc95d0e4ce (patch) | |
| tree | 550a883c3016e6edcbfcf542bdf13004b44d66d8 | |
| parent | 0c0f77e2ae45e1f905d33bf9cf129667665121ab (diff) | |
| download | seaweedfs-ecb234f75aadfcaf64638fdd9532e3bc95d0e4ce.tar.xz seaweedfs-ecb234f75aadfcaf64638fdd9532e3bc95d0e4ce.zip | |
refactor
| -rw-r--r-- | weed/filer/stream.go | 22 |
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 } |
