Allow namespace configuration for different CRD resources in Fission (#2539)

* Allow multiple namespaces for builder manager
* Enable multiple namespaces for executor informers
* Added missing context
* helm chart support for multiple namespaces
* Directly consume map type from GetInformerForNamespaces fn
* Optimize function resolver by choosing namespace-specific informer
* helm chart support for multiple namespaces
* consider default namespace and move duplicate code to helm template
* Improve documentation for fission namespace values

Signed-off-by: Sanket Sudake <sanketsudake@gmail.com>
Co-authored-by: shubham bansal <shubhambansaliimtgn@gmail.com>
This commit is contained in:
Sanket Sudake
2022-10-19 15:48:47 +05:30
committed by GitHub
co-authored by shubham bansal
parent facd14de90
commit 827baea974
27 changed files with 430 additions and 219 deletions
+30 -8
View File
@@ -21,6 +21,7 @@ import (
"time"
"github.com/pkg/errors"
"go.uber.org/zap"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
k8sCache "k8s.io/client-go/tools/cache"
@@ -34,7 +35,8 @@ type (
functionReferenceResolver struct {
// FunctionReference -> function metadata
refCache *cache.Cache
funcInformer *k8sCache.SharedIndexInformer
funcInformer map[string]k8sCache.SharedIndexInformer
logger *zap.Logger
// store k8sCache.Store
}
@@ -69,10 +71,11 @@ const (
resolveResultMultipleFunctions
)
func makeFunctionReferenceResolver(funcInformer *k8sCache.SharedIndexInformer) *functionReferenceResolver {
func makeFunctionReferenceResolver(logger *zap.Logger, funcInformer map[string]k8sCache.SharedIndexInformer) *functionReferenceResolver {
frr := &functionReferenceResolver{
refCache: cache.MakeCache(time.Minute, 0),
funcInformer: funcInformer,
logger: logger.Named("function_ref_resolver"),
}
return frr
}
@@ -118,10 +121,24 @@ func (frr *functionReferenceResolver) resolve(trigger fv1.HTTPTrigger) (*resolve
return rr, nil
}
func (frr *functionReferenceResolver) getInformerByNamespace(namespace string) (k8sCache.SharedIndexInformer, error) {
if informer, ok := frr.funcInformer[metav1.NamespaceAll]; ok {
return informer, nil
}
if informer, ok := frr.funcInformer[namespace]; ok {
return informer, nil
}
return nil, fmt.Errorf("informer for namespace %s not found", namespace)
}
// resolveByName simply looks up function by name in a namespace.
func (frr *functionReferenceResolver) resolveByName(namespace, name string) (*resolveResult, error) {
// get function from cache
obj, isExist, err := (*frr.funcInformer).GetStore().Get(&fv1.Function{
informer, err := frr.getInformerByNamespace(namespace)
if err != nil {
return nil, err
}
obj, isExist, err := informer.GetStore().Get(&fv1.Function{
ObjectMeta: metav1.ObjectMeta{
Namespace: namespace,
Name: name,
@@ -131,10 +148,11 @@ func (frr *functionReferenceResolver) resolveByName(namespace, name string) (*re
return nil, err
}
if !isExist {
return nil, errors.Errorf("function %v does not exist", name)
frr.logger.Error("function does not exists", zap.String("name", name), zap.String("namespace", namespace))
return nil, errors.Errorf("function %s/%s does not exist", namespace, name)
}
f := obj.(*fv1.Function)
functionMap := map[string]*fv1.Function{
f.ObjectMeta.Name: f,
}
@@ -155,7 +173,11 @@ func (frr *functionReferenceResolver) resolveByFunctionWeights(namespace string,
for functionName, functionWeight := range fr.FunctionWeights {
// get function from cache
obj, isExist, err := (*frr.funcInformer).GetStore().Get(&fv1.Function{
informer, err := frr.getInformerByNamespace(namespace)
if err != nil {
return nil, err
}
obj, isExist, err := informer.GetStore().Get(&fv1.Function{
ObjectMeta: metav1.ObjectMeta{
Namespace: namespace,
Name: functionName,
@@ -165,9 +187,9 @@ func (frr *functionReferenceResolver) resolveByFunctionWeights(namespace string,
return nil, err
}
if !isExist {
return nil, fmt.Errorf("function %v does not exist", functionName)
frr.logger.Error("function does not exists", zap.String("name", functionName), zap.String("namespace", namespace))
return nil, fmt.Errorf("function %s/%s does not exist", namespace, functionName)
}
f := obj.(*fv1.Function)
functionMap[f.ObjectMeta.Name] = f
sumPrefix = sumPrefix + functionWeight