diff options
| author | Junegunn Choi <junegunn.c@gmail.com> | 2024-06-10 20:30:19 +0900 |
|---|---|---|
| committer | Junegunn Choi <junegunn.c@gmail.com> | 2024-06-10 20:33:55 +0900 |
| commit | 7fc13c5cfde55ae53c6f87290a80559fcc59bf0f (patch) | |
| tree | aaeddb5f0386ad3cce377f45af539470b7e593ac /src/chunklist.go | |
| parent | dfee7af57b0de51c0f1bb815da1be071978e8675 (diff) | |
| download | fzf-7fc13c5cfde55ae53c6f87290a80559fcc59bf0f.tar.gz | |
Less aggressive chunk cache invalidation for --tail
Diffstat (limited to 'src/chunklist.go')
| -rw-r--r-- | src/chunklist.go | 11 |
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 |
