From 7202af0cfdea1c0b0686ceb39433fcfd2cfdc2e8 Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Fri, 12 Jun 2026 10:04:31 +0000 Subject: internal/mru: Append keys before the survivors --- internal/mru/sync.go | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/internal/mru/sync.go b/internal/mru/sync.go index 69fc3446..f10da5f4 100644 --- a/internal/mru/sync.go +++ b/internal/mru/sync.go @@ -4,25 +4,32 @@ package mru // // Surviving keys keep their relative recency order, // absent keys are dropped, -// and newly present keys are appended after the survivors. +// and newly present keys are placed before the survivors, +// since new members are presumed recently used. func (order *Order[K]) Sync(present map[K]struct{}) { order.mu.Lock() defer order.mu.Unlock() keys := order.Keys() - next := make([]K, 0, len(present)) - seen := make(map[K]struct{}, len(present)) + survivors := make(map[K]struct{}, len(present)) for _, key := range keys { if _, ok := present[key]; ok { - next = append(next, key) - seen[key] = struct{}{} + survivors[key] = struct{}{} } } + next := make([]K, 0, len(present)) + for key := range present { - if _, ok := seen[key]; !ok { + if _, ok := survivors[key]; !ok { + next = append(next, key) + } + } + + for _, key := range keys { + if _, ok := survivors[key]; ok { next = append(next, key) } } -- cgit v1.3.1-10-gc9f91