update go-structr to v0.8.11 (#3380)

This commit is contained in:
kim
2024-10-02 10:58:20 +00:00
committed by GitHub
parent e3019eada4
commit c17abea921
11 changed files with 306 additions and 91 deletions

View File

@ -119,9 +119,9 @@ func (c *Cache[T]) Init(config CacheConfig[T]) {
// Index selects index with given name from cache, else panics.
func (c *Cache[T]) Index(name string) *Index {
for i := range c.indices {
if c.indices[i].name == name {
return &c.indices[i]
for i, idx := range c.indices {
if idx.name == name {
return &(c.indices[i])
}
}
panic("unknown index: " + name)
@ -337,13 +337,16 @@ func (c *Cache[T]) Load(index *Index, keys []Key, load func([]Key) ([]T, error))
panic("not initialized")
}
for i := 0; i < len(keys); {
// Iterate keys and catch uncached.
toLoad := make([]Key, 0, len(keys))
for _, key := range keys {
// Value length before
// any below appends.
before := len(values)
// Concatenate all *values* from cached items.
index.get(keys[i].key, func(item *indexed_item) {
index.get(key.key, func(item *indexed_item) {
if value, ok := item.data.(T); ok {
// Append value COPY.
value = c.copy(value)
@ -358,30 +361,22 @@ func (c *Cache[T]) Load(index *Index, keys []Key, load func([]Key) ([]T, error))
// Only if values changed did
// we actually find anything.
if len(values) != before {
// We found values at key,
// drop key from the slice.
copy(keys[i:], keys[i+1:])
keys = keys[:len(keys)-1]
continue
if len(values) == before {
toLoad = append(toLoad, key)
}
// Iter
i++
}
// Done with
// the lock.
unlock()
if len(keys) == 0 {
if len(toLoad) == 0 {
// We loaded everything!
return values, nil
}
// Load uncached values.
uncached, err := load(keys)
// Load uncached key values.
uncached, err := load(toLoad)
if err != nil {
return nil, err
}
@ -515,8 +510,8 @@ func (c *Cache[T]) Trim(perc float64) {
}
// Compact index data stores.
for i := range c.indices {
c.indices[i].data.Compact()
for _, idx := range c.indices {
(&idx).data.Compact()
}
// Done with lock.
@ -536,17 +531,17 @@ func (c *Cache[T]) Len() int {
// Debug returns debug stats about cache.
func (c *Cache[T]) Debug() map[string]any {
m := make(map[string]any)
m := make(map[string]any, 2)
c.mutex.Lock()
m["lru"] = c.lru.len
indices := make(map[string]any)
indices := make(map[string]any, len(c.indices))
m["indices"] = indices
for i := range c.indices {
for _, idx := range c.indices {
var n uint64
for _, l := range c.indices[i].data.m {
for _, l := range idx.data.m {
n += uint64(l.len)
}
indices[c.indices[i].name] = n
indices[idx.name] = n
}
c.mutex.Unlock()
return m
@ -588,7 +583,7 @@ func (c *Cache[T]) store_value(index *Index, key string, value T) {
for i := range c.indices {
// Get current index ptr.
idx := &(c.indices[i])
idx := (&c.indices[i])
if idx == index {
// Already stored under