mirror of
https://github.com/lukaszraczylo/traefikoidc.git
synced 2026-10-18 04:47:28 +00:00
Abstract the cleanup logic and add helper for cache valid.
This commit is contained in:
@@ -0,0 +1,18 @@
|
|||||||
|
package traefikoidc
|
||||||
|
|
||||||
|
import "time"
|
||||||
|
|
||||||
|
// autoCleanupRoutine runs a ticker that calls the provided cleanup function at the specified interval.
|
||||||
|
// It stops when a value is received on the stop channel.
|
||||||
|
func autoCleanupRoutine(interval time.Duration, stop <-chan struct{}, cleanup func()) {
|
||||||
|
ticker := time.NewTicker(interval)
|
||||||
|
defer ticker.Stop()
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case <-ticker.C:
|
||||||
|
cleanup()
|
||||||
|
case <-stop:
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -178,16 +178,7 @@ func (c *Cache) removeItem(key string) {
|
|||||||
|
|
||||||
// startAutoCleanup initiates a goroutine that periodically cleans up expired cache items.
|
// startAutoCleanup initiates a goroutine that periodically cleans up expired cache items.
|
||||||
func (c *Cache) startAutoCleanup() {
|
func (c *Cache) startAutoCleanup() {
|
||||||
ticker := time.NewTicker(c.autoCleanupInterval)
|
autoCleanupRoutine(c.autoCleanupInterval, c.stopCleanup, c.Cleanup)
|
||||||
for {
|
|
||||||
select {
|
|
||||||
case <-ticker.C:
|
|
||||||
c.Cleanup()
|
|
||||||
case <-c.stopCleanup:
|
|
||||||
ticker.Stop()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close terminates the auto cleanup goroutine.
|
// Close terminates the auto cleanup goroutine.
|
||||||
|
|||||||
+6
-13
@@ -34,11 +34,13 @@ func (c *MetadataCache) Cleanup() {
|
|||||||
c.metadata = nil
|
c.metadata = nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
func (c *MetadataCache) isCacheValid() bool {
|
||||||
|
return c.metadata != nil && time.Now().Before(c.expiresAt)
|
||||||
|
}
|
||||||
// GetMetadata retrieves the metadata from cache or fetches it if expired
|
// GetMetadata retrieves the metadata from cache or fetches it if expired
|
||||||
func (c *MetadataCache) GetMetadata(providerURL string, httpClient *http.Client, logger *Logger) (*ProviderMetadata, error) {
|
func (c *MetadataCache) GetMetadata(providerURL string, httpClient *http.Client, logger *Logger) (*ProviderMetadata, error) {
|
||||||
c.mutex.RLock()
|
c.mutex.RLock()
|
||||||
if c.metadata != nil && time.Now().Before(c.expiresAt) {
|
if c.isCacheValid() {
|
||||||
defer c.mutex.RUnlock()
|
defer c.mutex.RUnlock()
|
||||||
return c.metadata, nil
|
return c.metadata, nil
|
||||||
}
|
}
|
||||||
@@ -48,7 +50,7 @@ func (c *MetadataCache) GetMetadata(providerURL string, httpClient *http.Client,
|
|||||||
defer c.mutex.Unlock()
|
defer c.mutex.Unlock()
|
||||||
|
|
||||||
// Double-check after acquiring write lock
|
// Double-check after acquiring write lock
|
||||||
if c.metadata != nil && time.Now().Before(c.expiresAt) {
|
if c.isCacheValid() {
|
||||||
return c.metadata, nil
|
return c.metadata, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -79,16 +81,7 @@ func (c *MetadataCache) GetMetadata(providerURL string, httpClient *http.Client,
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *MetadataCache) startAutoCleanup() {
|
func (c *MetadataCache) startAutoCleanup() {
|
||||||
ticker := time.NewTicker(c.autoCleanupInterval)
|
autoCleanupRoutine(c.autoCleanupInterval, c.stopCleanup, c.Cleanup)
|
||||||
defer ticker.Stop()
|
|
||||||
for {
|
|
||||||
select {
|
|
||||||
case <-ticker.C:
|
|
||||||
c.Cleanup()
|
|
||||||
case <-c.stopCleanup:
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *MetadataCache) Close() {
|
func (c *MetadataCache) Close() {
|
||||||
|
|||||||
Reference in New Issue
Block a user