Token blacklist, cache and metadata improvements

TokenBlacklist Improvements:
Fixed size limit enforcement to properly maintain max size of 1000 tokens
Improved eviction strategy to remove expired tokens first before removing oldest
Added proper cleanup of tokens during Add operation to prevent size overflow
Fixed oldest token eviction logic to ensure correct token removal
Added proper locking mechanisms to prevent race conditions
Cache Improvements:
Fixed cleanup mechanism to only remove truly expired items
Improved eviction strategy in LRU cache to prioritize expired items
Added smarter eviction in evictOldest to scan for expired items first
Fixed aggressive cleanup that was removing valid items
Maintained proper LRU ordering while handling evictions
MetadataCache:
Verified proper implementation of metadata caching with hourly refresh
Confirmed proper handling of cache extension on fetch failures
Validated thread-safe operations with proper RWMutex usage
This commit is contained in:
2025-02-09 23:53:05 +00:00
parent e6205b3a48
commit 9402f1bca5
5 changed files with 180 additions and 134 deletions
+17 -1
View File
@@ -128,6 +128,7 @@ func (c *Cache) Cleanup() {
now := time.Now()
for key, item := range c.items {
// Only remove items that are already expired
if now.After(item.ExpiresAt) {
c.removeItem(key)
}
@@ -136,8 +137,23 @@ func (c *Cache) Cleanup() {
// evictOldest removes the least recently used item from the cache.
func (c *Cache) evictOldest() {
now := time.Now()
elem := c.order.Front()
if elem != nil {
// First try to find an expired item from the front
for elem != nil {
entry := elem.Value.(lruEntry)
if item, exists := c.items[entry.key]; exists {
if now.After(item.ExpiresAt) {
c.removeItem(entry.key)
return
}
}
elem = elem.Next()
}
// If no expired items found, remove the oldest item
if elem = c.order.Front(); elem != nil {
entry := elem.Value.(lruEntry)
c.removeItem(entry.key)
}