From 7fc13c5cfde55ae53c6f87290a80559fcc59bf0f Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Mon, 10 Jun 2024 20:30:19 +0900 Subject: Less aggressive chunk cache invalidation for --tail --- src/chunklist.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'src/chunklist.go') 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 -- cgit v1.2.3