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 May 21, 2024
1 parent 3d40aba commit 0d1f08a
Showing 1 changed file with 11 additions and 9 deletions.
20 changes: 11 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 @@ -458,11 +457,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 @@ -502,17 +498,24 @@ 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 match {
resource.MarkStale(v)
}

if clear {
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 @@ -586,7 +589,6 @@ type PartitionManager interface {
const (
ClearOnRebuild ClearWhen = iota + 1
ClearOnChange
ClearNever
)

type ClearWhen int
Expand Down

0 comments on commit 0d1f08a

Please sign in to comment.