Skip to content

Commit

Permalink
cache/dynacache: Don't mark all evicted items as stale
Browse files Browse the repository at this point in the history
Limit that to the evicted items that matches the given change set.

Currently this doesn't make any practical difference, but it would make the stale flag more general useful.
  • Loading branch information
bep committed Apr 30, 2024
1 parent 1961327 commit 660bbbc
Showing 1 changed file with 9 additions and 9 deletions.
18 changes: 9 additions & 9 deletions cache/dynacache/dynacache.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,6 @@ func New(opts Options) *Cache {
evictedIdentities.Push(id)
return false
})
resource.MarkStale(v)
}

c := &Cache{
Expand Down Expand Up @@ -434,11 +433,8 @@ func (p *Partition[K, V]) clearMatching(predicate func(k, v any) bool) {

func (p *Partition[K, V]) clearOnRebuild(changeset ...identity.Identity) {
opts := p.getOptions()
if opts.ClearWhen == ClearNever {
return
}

if opts.ClearWhen == ClearOnRebuild {
if opts.ClearWhen == ClearOnRebuild && len(changeset) == 0 {
// Clear all.
p.Clear()
return
Expand Down Expand Up @@ -478,17 +474,22 @@ func (p *Partition[K, V]) clearOnRebuild(changeset ...identity.Identity) {
// Second pass needs to be done in a separate loop to catch any
// elements marked as stale in the other partitions.
p.c.DeleteFunc(func(key K, v V) bool {
if shouldDelete(key, v) {
match := shouldDelete(key, v)
clear := match || opts.ClearWhen == ClearOnRebuild

if clear {
resource.MarkStale(v)

p.trace.Log(
logg.StringFunc(
func() string {
return fmt.Sprintf("first pass: clearing cache key %v", key)
},
),
)
return true
}
return false

return clear
})
}

Expand Down Expand Up @@ -562,7 +563,6 @@ type PartitionManager interface {
const (
ClearOnRebuild ClearWhen = iota + 1
ClearOnChange
ClearNever
)

type ClearWhen int
Expand Down

0 comments on commit 660bbbc

Please sign in to comment.