[chore]: Bump codeberg.org/gruf/go-cache/v3 from 3.2.3 to 3.2.5 (#1701)

Bumps codeberg.org/gruf/go-cache/v3 from 3.2.3 to 3.2.5.

---
updated-dependencies:
- dependency-name: codeberg.org/gruf/go-cache/v3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
This commit is contained in:
dependabot[bot] 2023-04-19 13:46:42 +02:00 committed by GitHub
parent c5f61c456b
commit a3d2774db5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 44 additions and 22 deletions

2
go.mod
View file

@ -5,7 +5,7 @@ go 1.20
require ( require (
codeberg.org/gruf/go-bytesize v1.0.2 codeberg.org/gruf/go-bytesize v1.0.2
codeberg.org/gruf/go-byteutil v1.1.2 codeberg.org/gruf/go-byteutil v1.1.2
codeberg.org/gruf/go-cache/v3 v3.2.3 codeberg.org/gruf/go-cache/v3 v3.2.5
codeberg.org/gruf/go-debug v1.3.0 codeberg.org/gruf/go-debug v1.3.0
codeberg.org/gruf/go-errors/v2 v2.1.1 codeberg.org/gruf/go-errors/v2 v2.1.1
codeberg.org/gruf/go-fastcopy v1.1.2 codeberg.org/gruf/go-fastcopy v1.1.2

4
go.sum
View file

@ -49,8 +49,8 @@ codeberg.org/gruf/go-bytesize v1.0.2/go.mod h1:n/GU8HzL9f3UNp/mUKyr1qVmTlj7+xacp
codeberg.org/gruf/go-byteutil v1.0.0/go.mod h1:cWM3tgMCroSzqoBXUXMhvxTxYJp+TbCr6ioISRY5vSU= codeberg.org/gruf/go-byteutil v1.0.0/go.mod h1:cWM3tgMCroSzqoBXUXMhvxTxYJp+TbCr6ioISRY5vSU=
codeberg.org/gruf/go-byteutil v1.1.2 h1:TQLZtTxTNca9xEfDIndmo7nBYxeS94nrv/9DS3Nk5Tw= codeberg.org/gruf/go-byteutil v1.1.2 h1:TQLZtTxTNca9xEfDIndmo7nBYxeS94nrv/9DS3Nk5Tw=
codeberg.org/gruf/go-byteutil v1.1.2/go.mod h1:cWM3tgMCroSzqoBXUXMhvxTxYJp+TbCr6ioISRY5vSU= codeberg.org/gruf/go-byteutil v1.1.2/go.mod h1:cWM3tgMCroSzqoBXUXMhvxTxYJp+TbCr6ioISRY5vSU=
codeberg.org/gruf/go-cache/v3 v3.2.3 h1:HL7UZN9zks2lsYdGTAZONJqVd2jZtj4NgG/1qi8EcJk= codeberg.org/gruf/go-cache/v3 v3.2.5 h1:C+JwTR4uxjuE6qwqB48d3NCRJejsbzxRpfFEBReaViA=
codeberg.org/gruf/go-cache/v3 v3.2.3/go.mod h1:up7za8FtNdtttcx6AJ8ffqkrSkXDGTilsd9yJ0IyhfM= codeberg.org/gruf/go-cache/v3 v3.2.5/go.mod h1:up7za8FtNdtttcx6AJ8ffqkrSkXDGTilsd9yJ0IyhfM=
codeberg.org/gruf/go-debug v1.3.0 h1:PIRxQiWUFKtGOGZFdZ3Y0pqyfI0Xr87j224IYe2snZs= codeberg.org/gruf/go-debug v1.3.0 h1:PIRxQiWUFKtGOGZFdZ3Y0pqyfI0Xr87j224IYe2snZs=
codeberg.org/gruf/go-debug v1.3.0/go.mod h1:N+vSy9uJBQgpQcJUqjctvqFz7tBHJf+S/PIjLILzpLg= codeberg.org/gruf/go-debug v1.3.0/go.mod h1:N+vSy9uJBQgpQcJUqjctvqFz7tBHJf+S/PIjLILzpLg=
codeberg.org/gruf/go-errors/v2 v2.0.0/go.mod h1:ZRhbdhvgoUA3Yw6e56kd9Ox984RrvbEFC2pOXyHDJP4= codeberg.org/gruf/go-errors/v2 v2.0.0/go.mod h1:ZRhbdhvgoUA3Yw6e56kd9Ox984RrvbEFC2pOXyHDJP4=

View file

@ -26,10 +26,10 @@ type Cache[Key comparable, Value any] interface {
// Get fetches the value with key from the cache, extending its TTL. // Get fetches the value with key from the cache, extending its TTL.
Get(key Key) (value Value, ok bool) Get(key Key) (value Value, ok bool)
// Add attempts to place the value at key in the cache, doing nothing if a value with this key already exists. Returned bool is success state. // Add attempts to place the value at key in the cache, doing nothing if a value with this key already exists. Returned bool is success state. Calls invalidate callback on success.
Add(key Key, value Value) bool Add(key Key, value Value) bool
// Set places the value at key in the cache. This will overwrite any existing value, and call the update callback so. Existing values will have their TTL extended upon update. // Set places the value at key in the cache. This will overwrite any existing value. Existing values will have their TTL extended upon update. Always calls invalidate callback.
Set(key Key, value Value) Set(key Key, value Value)
// CAS will attempt to perform a CAS operation on 'key', using provided old and new values, and comparator function. Returned bool is success. // CAS will attempt to perform a CAS operation on 'key', using provided old and new values, and comparator function. Returned bool is success.
@ -44,7 +44,7 @@ type Cache[Key comparable, Value any] interface {
// Invalidate deletes a value from the cache, calling the invalidate callback. // Invalidate deletes a value from the cache, calling the invalidate callback.
Invalidate(key Key) bool Invalidate(key Key) bool
// Clear empties the cache, calling the invalidate callback. // Clear empties the cache, calling the invalidate callback on each entry.
Clear() Clear()
// Len returns the current length of the cache. // Len returns the current length of the cache.

View file

@ -28,6 +28,7 @@ type Lookup struct {
// cache would be in wrapping a database, allowing caching of sql.ErrNoRows. // cache would be in wrapping a database, allowing caching of sql.ErrNoRows.
type Cache[Value any] struct { type Cache[Value any] struct {
cache ttl.Cache[int64, result[Value]] // underlying result cache cache ttl.Cache[int64, result[Value]] // underlying result cache
invalid func(Value) // store unwrapped invalidate callback.
lookups structKeys // pre-determined struct lookups lookups structKeys // pre-determined struct lookups
ignore func(error) bool // determines cacheable errors ignore func(error) bool // determines cacheable errors
copy func(Value) Value // copies a Value type copy func(Value) Value // copies a Value type
@ -114,7 +115,8 @@ func (c *Cache[Value]) SetInvalidateCallback(hook func(Value)) {
if hook == nil { if hook == nil {
// Ensure non-nil hook. // Ensure non-nil hook.
hook = func(Value) {} hook = func(Value) {}
} } // store hook.
c.invalid = hook
c.cache.SetInvalidateCallback(func(item *ttl.Entry[int64, result[Value]]) { c.cache.SetInvalidateCallback(func(item *ttl.Entry[int64, result[Value]]) {
for _, key := range item.Value.Keys { for _, key := range item.Value.Keys {
// Delete key->pkey lookup // Delete key->pkey lookup
@ -241,6 +243,9 @@ func (c *Cache[Value]) Store(value Value, store func() error) error {
// Cache result // Cache result
c.store(result) c.store(result)
// Call invalidate.
c.invalid(value)
return nil return nil
} }

View file

@ -19,10 +19,10 @@ type Cache[Key comparable, Value any] struct {
// TTL is the cache item TTL. // TTL is the cache item TTL.
TTL time.Duration TTL time.Duration
// Evict is the hook that is called when an item is evicted from the cache, includes manual delete. // Evict is the hook that is called when an item is evicted from the cache.
Evict func(*Entry[Key, Value]) Evict func(*Entry[Key, Value])
// Invalid is the hook that is called when an item's data in the cache is invalidated. // Invalid is the hook that is called when an item's data in the cache is invalidated, includes Add/Set.
Invalid func(*Entry[Key, Value]) Invalid func(*Entry[Key, Value])
// Cache is the underlying hashmap used for this cache. // Cache is the underlying hashmap used for this cache.
@ -175,7 +175,7 @@ func (c *Cache[K, V]) SetTTL(ttl time.Duration, update bool) {
if update { if update {
// Update existing cache entries with new expiry time // Update existing cache entries with new expiry time
c.Cache.Range(0, c.Cache.Len(), func(i int, key K, item *Entry[K, V]) { c.Cache.Range(0, c.Cache.Len(), func(i int, _ K, item *Entry[K, V]) {
item.Expiry = item.Expiry.Add(diff) item.Expiry = item.Expiry.Add(diff)
}) })
} }
@ -205,13 +205,14 @@ func (c *Cache[K, V]) Add(key K, value V) bool {
c.Lock() c.Lock()
defer c.Unlock() defer c.Unlock()
// If already cached, return // Check if already exists
if c.Cache.Has(key) { item, ok := c.Cache.Get(key)
if ok {
return false return false
} }
// Alloc new item // Alloc new item
item := c.alloc() item = c.alloc()
item.Key = key item.Key = key
item.Value = value item.Value = value
item.Expiry = time.Now().Add(c.TTL) item.Expiry = time.Now().Add(c.TTL)
@ -228,6 +229,11 @@ func (c *Cache[K, V]) Add(key K, value V) bool {
// Place new item in the map with hook // Place new item in the map with hook
c.Cache.SetWithHook(key, item, hook) c.Cache.SetWithHook(key, item, hook)
if c.Invalid != nil {
// invalidate old
c.Invalid(item)
}
return true return true
} }
@ -240,16 +246,27 @@ func (c *Cache[K, V]) Set(key K, value V) {
// Check if already exists // Check if already exists
item, ok := c.Cache.Get(key) item, ok := c.Cache.Get(key)
if ok { if !ok {
if c.Invalid != nil { var hook func(K, *Entry[K, V])
// Invalidate existing
c.Invalid(item)
}
} else {
// Allocate new item // Allocate new item
item = c.alloc() item = c.alloc()
item.Key = key item.Key = key
c.Cache.Set(key, item)
if c.Evict != nil {
// Pass evicted entry to user hook
hook = func(_ K, item *Entry[K, V]) {
c.Evict(item)
}
}
// Place new item in the map with hook
c.Cache.SetWithHook(key, item, hook)
}
if c.Invalid != nil {
// invalidate old
c.Invalid(item)
} }
// Update the item value + expiry // Update the item value + expiry
@ -270,7 +287,7 @@ func (c *Cache[K, V]) CAS(key K, old V, new V, cmp func(V, V) bool) bool {
} }
if c.Invalid != nil { if c.Invalid != nil {
// Invalidate item // invalidate old
c.Invalid(item) c.Invalid(item)
} }

2
vendor/modules.txt vendored
View file

@ -13,7 +13,7 @@ codeberg.org/gruf/go-bytesize
# codeberg.org/gruf/go-byteutil v1.1.2 # codeberg.org/gruf/go-byteutil v1.1.2
## explicit; go 1.16 ## explicit; go 1.16
codeberg.org/gruf/go-byteutil codeberg.org/gruf/go-byteutil
# codeberg.org/gruf/go-cache/v3 v3.2.3 # codeberg.org/gruf/go-cache/v3 v3.2.5
## explicit; go 1.19 ## explicit; go 1.19
codeberg.org/gruf/go-cache/v3 codeberg.org/gruf/go-cache/v3
codeberg.org/gruf/go-cache/v3/result codeberg.org/gruf/go-cache/v3/result