fix(rewriter): prevent mixing of cached rule engines (#44)
This commit is contained in:
28
internal/proxy/director/layer/util/rule_engine_cache.go
Normal file
28
internal/proxy/director/layer/util/rule_engine_cache.go
Normal file
@ -0,0 +1,28 @@
|
||||
package util
|
||||
|
||||
import (
|
||||
"forge.cadoles.com/cadoles/bouncer/internal/cache"
|
||||
"forge.cadoles.com/cadoles/bouncer/internal/cache/memory"
|
||||
)
|
||||
|
||||
type RuleEngineCache[V any, O any] struct {
|
||||
cache cache.Cache[string, *RevisionedRuleEngine[V, O]]
|
||||
factory RuleEngineFactoryFunc[V, O]
|
||||
}
|
||||
|
||||
func (c *RuleEngineCache[V, O]) Get(key string) *RevisionedRuleEngine[V, O] {
|
||||
revisionedRuleEngine, exists := c.cache.Get(key)
|
||||
if !exists {
|
||||
revisionedRuleEngine = NewRevisionedRuleEngine(c.factory)
|
||||
c.cache.Set(key, revisionedRuleEngine)
|
||||
}
|
||||
|
||||
return revisionedRuleEngine
|
||||
}
|
||||
|
||||
func NewInMemoryRuleEngineCache[V any, O any](factory RuleEngineFactoryFunc[V, O]) *RuleEngineCache[V, O] {
|
||||
return &RuleEngineCache[V, O]{
|
||||
factory: factory,
|
||||
cache: memory.NewCache[string, *RevisionedRuleEngine[V, O]](),
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user