Make common cache typed with generics (#2896)
Making typed common cache so that we don't use wrong types across set/get methods and more higher-level methods can be defined for cache. Currently, we are not able to operate over all keys of the cache due to generic types. I also removed code comments around the cache. Signed-off-by: Sanket Sudake <sanketsudake@gmail.com>
This commit is contained in:
@@ -34,7 +34,7 @@ type (
|
||||
// reference into a resolveResult
|
||||
functionReferenceResolver struct {
|
||||
// FunctionReference -> function metadata
|
||||
refCache *cache.Cache
|
||||
refCache *cache.Cache[namespacedTriggerReference, resolveResult]
|
||||
funcInformer map[string]k8sCache.SharedIndexInformer
|
||||
logger *zap.Logger
|
||||
// store k8sCache.Store
|
||||
@@ -73,7 +73,7 @@ const (
|
||||
|
||||
func makeFunctionReferenceResolver(logger *zap.Logger, funcInformer map[string]k8sCache.SharedIndexInformer) *functionReferenceResolver {
|
||||
frr := &functionReferenceResolver{
|
||||
refCache: cache.MakeCache(time.Minute, 0),
|
||||
refCache: cache.MakeCache[namespacedTriggerReference, resolveResult](time.Minute, 0),
|
||||
funcInformer: funcInformer,
|
||||
logger: logger.Named("function_ref_resolver"),
|
||||
}
|
||||
@@ -89,9 +89,8 @@ func (frr *functionReferenceResolver) resolve(trigger fv1.HTTPTrigger) (*resolve
|
||||
}
|
||||
|
||||
// check cache
|
||||
rrInt, err := frr.refCache.Get(nfr)
|
||||
result, err := frr.refCache.Get(nfr)
|
||||
if err == nil {
|
||||
result := rrInt.(resolveResult)
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
@@ -216,11 +215,5 @@ func (frr *functionReferenceResolver) delete(namespace string, triggerName, trig
|
||||
}
|
||||
|
||||
func (frr *functionReferenceResolver) copy() map[namespacedTriggerReference]resolveResult {
|
||||
cache := make(map[namespacedTriggerReference]resolveResult)
|
||||
for k, v := range frr.refCache.Copy() {
|
||||
key := k.(namespacedTriggerReference)
|
||||
val := v.(resolveResult)
|
||||
cache[key] = val
|
||||
}
|
||||
return cache
|
||||
return frr.refCache.Copy()
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ import (
|
||||
type (
|
||||
functionServiceMap struct {
|
||||
logger *zap.Logger
|
||||
cache *cache.Cache // map[metadataKey]*url.URL
|
||||
cache *cache.Cache[metadataKey, *url.URL]
|
||||
}
|
||||
|
||||
// metav1.ObjectMeta is not hashable, so we make a hashable copy
|
||||
@@ -44,7 +44,7 @@ type (
|
||||
func makeFunctionServiceMap(logger *zap.Logger, expiry time.Duration) *functionServiceMap {
|
||||
return &functionServiceMap{
|
||||
logger: logger.Named("function_service_map"),
|
||||
cache: cache.MakeCache(expiry, 0),
|
||||
cache: cache.MakeCache[metadataKey, *url.URL](expiry, 0),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,15 +62,14 @@ func (fmap *functionServiceMap) lookup(f *metav1.ObjectMeta) (*url.URL, error) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
u := item.(*url.URL)
|
||||
return u, nil
|
||||
return item, nil
|
||||
}
|
||||
|
||||
func (fmap *functionServiceMap) assign(f *metav1.ObjectMeta, serviceURL *url.URL) {
|
||||
mk := keyFromMetadata(f)
|
||||
old, err := fmap.cache.Set(*mk, serviceURL)
|
||||
if err != nil {
|
||||
if *serviceURL == *(old.(*url.URL)) {
|
||||
if *serviceURL == *old {
|
||||
return
|
||||
}
|
||||
fmap.logger.Error("error caching service url for function with a different value", zap.Error(err))
|
||||
|
||||
Reference in New Issue
Block a user