diff options
| author | chrislu <chris.lu@gmail.com> | 2021-12-19 23:06:03 -0800 |
|---|---|---|
| committer | chrislu <chris.lu@gmail.com> | 2021-12-19 23:06:03 -0800 |
| commit | 0cb9036f6646500dd521bdf0ebe256e39afe8b39 (patch) | |
| tree | 6e5f075cf161893b23b45820d3a5c674e6b5d00f | |
| parent | a152f179378319ab888cfbc0b4f0741f562faa64 (diff) | |
| download | seaweedfs-0cb9036f6646500dd521bdf0ebe256e39afe8b39.tar.xz seaweedfs-0cb9036f6646500dd521bdf0ebe256e39afe8b39.zip | |
mount: only cache the first chunk on stream read
| -rw-r--r-- | weed/filer/reader_at.go | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/weed/filer/reader_at.go b/weed/filer/reader_at.go index 27a4f29ec..5f58b870c 100644 --- a/weed/filer/reader_at.go +++ b/weed/filer/reader_at.go @@ -179,7 +179,10 @@ func (c *ChunkReadAt) readChunkSlice(chunkView *ChunkView, nextChunkViews *Chunk return c.doFetchRangeChunkData(chunkView, offset, length) } - chunkSlice := c.chunkCache.GetChunkSlice(chunkView.FileId, offset, length) + var chunkSlice []byte + if chunkView.LogicOffset == 0 { + chunkSlice = c.chunkCache.GetChunkSlice(chunkView.FileId, offset, length) + } if len(chunkSlice) > 0 { return chunkSlice, nil } @@ -225,7 +228,10 @@ func (c *ChunkReadAt) readOneWholeChunk(chunkView *ChunkView) (interface{}, erro glog.V(4).Infof("readFromWholeChunkData %s offset %d [%d,%d) size at least %d", chunkView.FileId, chunkView.Offset, chunkView.LogicOffset, chunkView.LogicOffset+int64(chunkView.Size), chunkView.ChunkSize) - data := c.chunkCache.GetChunk(chunkView.FileId, chunkView.ChunkSize) + var data []byte + if chunkView.LogicOffset == 0 { + data = c.chunkCache.GetChunk(chunkView.FileId, chunkView.ChunkSize) + } if data != nil { glog.V(4).Infof("cache hit %s [%d,%d)", chunkView.FileId, chunkView.LogicOffset-chunkView.Offset, chunkView.LogicOffset-chunkView.Offset+int64(len(data))) } else { @@ -234,7 +240,10 @@ func (c *ChunkReadAt) readOneWholeChunk(chunkView *ChunkView) (interface{}, erro if err != nil { return data, err } - c.chunkCache.SetChunk(chunkView.FileId, data) + if chunkView.LogicOffset == 0 { + // only cache the first chunk + c.chunkCache.SetChunk(chunkView.FileId, data) + } } return data, err }) |
