summaryrefslogtreecommitdiff
path: root/src/chunklist.go
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2024-06-10 20:30:19 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2024-06-10 20:33:55 +0900
commit7fc13c5cfde55ae53c6f87290a80559fcc59bf0f (patch)
treeaaeddb5f0386ad3cce377f45af539470b7e593ac /src/chunklist.go
parentdfee7af57b0de51c0f1bb815da1be071978e8675 (diff)
downloadfzf-7fc13c5cfde55ae53c6f87290a80559fcc59bf0f.tar.gz
Less aggressive chunk cache invalidation for --tail
Diffstat (limited to 'src/chunklist.go')
-rw-r--r--src/chunklist.go11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/chunklist.go b/src/chunklist.go
index 91177b17..bd98999d 100644
--- a/src/chunklist.go
+++ b/src/chunklist.go
@@ -16,14 +16,16 @@ type ChunkList struct {
chunks []*Chunk
mutex sync.Mutex
trans ItemBuilder
+ cache *ChunkCache
}
// NewChunkList returns a new ChunkList
-func NewChunkList(trans ItemBuilder) *ChunkList {
+func NewChunkList(cache *ChunkCache, trans ItemBuilder) *ChunkList {
return &ChunkList{
chunks: []*Chunk{},
mutex: sync.Mutex{},
- trans: trans}
+ trans: trans,
+ cache: cache}
}
func (c *Chunk) push(trans ItemBuilder, data []byte) bool {
@@ -92,7 +94,9 @@ func (cl *ChunkList) Snapshot(tail int) ([]*Chunk, int, bool) {
// Copy the chunks to keep
ret := make([]*Chunk, numChunks)
- copy(ret, cl.chunks[len(cl.chunks)-numChunks:])
+ minIndex := len(cl.chunks) - numChunks
+ cl.cache.retire(cl.chunks[:minIndex]...)
+ copy(ret, cl.chunks[minIndex:])
for left, i := tail, len(ret)-1; i >= 0; i-- {
chunk := ret[i]
@@ -104,6 +108,7 @@ func (cl *ChunkList) Snapshot(tail int) ([]*Chunk, int, bool) {
newChunk.items[i] = chunk.items[oldCount-left+i]
}
ret[i] = &newChunk
+ cl.cache.retire(chunk)
break
}
left -= chunk.count