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 29, 2024
1 parent 1961327 commit f34528e
Showing 1 changed file with 17 additions and 16 deletions.
33 changes: 17 additions & 16 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,23 @@ 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) {
p.trace.Log(
logg.StringFunc(
func() string {
return fmt.Sprintf("first pass: clearing cache key %v", key)
},
),
)
return true
match := shouldDelete(key, v)
clear := match || opts.ClearWhen == ClearOnRebuild

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

return clear
})
}

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

type ClearWhen int
Expand Down

0 comments on commit f34528e

Please sign in to comment.