Use code-generator to generate clientset/informer/lister (#1492)

To reduce maintenance effort and avoid writing duplicate informer code,
use code-generator to generate clientset/informer/lister code.
This commit is contained in:
Ta-Ching Chen
2020-01-16 15:18:38 +08:00
committed by GitHub
parent b96ca0735d
commit 574fb55fcf
169 changed files with 6325 additions and 2349 deletions
+11 -11
View File
@@ -184,7 +184,7 @@ func (roundTripper *RetryingRoundTripper) RoundTrip(req *http.Request) (*http.Re
// cache, then retry to get new svc record from executor again.
var retryCounter int
var err error
var fnMeta = &roundTripper.funcHandler.function.Metadata
var fnMeta = &roundTripper.funcHandler.function.ObjectMeta
for i := 0; i < roundTripper.funcHandler.tsRoundTripperParams.maxRetries; i++ {
// set service url of target service of request only when
@@ -363,7 +363,7 @@ func (fh *functionHandler) tapService(fn *fv1.Function, serviceUrl *url.URL) {
if fh.executor == nil {
return
}
fh.executor.TapService(fn.Metadata, fn.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType, serviceUrl)
fh.executor.TapService(fn.ObjectMeta, fn.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType, serviceUrl)
}
func (fh functionHandler) handler(responseWriter http.ResponseWriter, request *http.Request) {
@@ -385,7 +385,7 @@ func (fh functionHandler) handler(responseWriter http.ResponseWriter, request *h
setPathInfoToHeader(request)
// system params
setFunctionMetadataToHeader(&fh.function.Metadata, request)
setFunctionMetadataToHeader(&fh.function.ObjectMeta, request)
director := func(req *http.Request) {
if _, ok := req.Header["User-Agent"]; !ok {
@@ -394,7 +394,7 @@ func (fh functionHandler) handler(responseWriter http.ResponseWriter, request *h
}
}
fnTimeout := fh.functionTimeoutMap[fh.function.Metadata.GetUID()]
fnTimeout := fh.functionTimeoutMap[fh.function.ObjectMeta.GetUID()]
if fnTimeout == 0 {
fnTimeout = fv1.DEFAULT_FUNCTION_TIMEOUT
}
@@ -523,7 +523,7 @@ func (fh *functionHandler) getServiceEntry() (serviceUrl *url.URL, serviceUrlFro
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
fnMeta := &fh.function.Metadata
fnMeta := &fh.function.ObjectMeta
// Use throttle to limit the total amount of requests sent
// to the executor to prevent it from overloaded.
@@ -580,7 +580,7 @@ func (fh *functionHandler) getServiceEntry() (serviceUrl *url.URL, serviceUrlFro
// getServiceEntryFromCache returns service url entry returns from cache
func (fh functionHandler) getServiceEntryFromCache() (serviceUrl *url.URL, err error) {
// cache lookup to get serviceUrl
serviceUrl, err = fh.fmap.lookup(&fh.function.Metadata)
serviceUrl, err = fh.fmap.lookup(&fh.function.ObjectMeta)
if err != nil {
var errMsg string
@@ -593,7 +593,7 @@ func (fh functionHandler) getServiceEntryFromCache() (serviceUrl *url.URL, err e
if e.Code == ferror.ErrorNotFound {
return nil, nil
}
errMsg = fmt.Sprintf("Error getting function %v;s service entry from cache: %v", fh.function.Metadata.Name, err)
errMsg = fmt.Sprintf("Error getting function %v;s service entry from cache: %v", fh.function.ObjectMeta.Name, err)
}
return nil, ferror.MakeError(http.StatusInternalServerError, errMsg)
}
@@ -603,7 +603,7 @@ func (fh functionHandler) getServiceEntryFromCache() (serviceUrl *url.URL, err e
// getServiceEntryFromExecutor returns service url entry returns from executor
func (fh functionHandler) getServiceEntryFromExecutor(ctx context.Context) (*url.URL, error) {
// send a request to executor to specialize a new pod
service, err := fh.executor.GetServiceForFunction(ctx, &fh.function.Metadata)
service, err := fh.executor.GetServiceForFunction(ctx, &fh.function.ObjectMeta)
if err != nil {
statusCode, errMsg := ferror.GetHTTPError(err)
fh.logger.Error("error from GetServiceForFunction",
@@ -667,8 +667,8 @@ func (fh functionHandler) collectFunctionMetric(start time.Time, rrt *RetryingRo
// Metrics stuff
funcMetricLabels := &functionLabels{
namespace: fh.function.Metadata.Namespace,
name: fh.function.Metadata.Name,
namespace: fh.function.ObjectMeta.Namespace,
name: fh.function.ObjectMeta.Name,
}
httpMetricLabels := &httpLabels{
method: req.Method,
@@ -690,7 +690,7 @@ func (fh functionHandler) collectFunctionMetric(start time.Time, rrt *RetryingRo
fh.tapService(fh.function, rrt.serviceUrl)
}
fh.logger.Debug("Request complete", zap.String("function", fh.function.Metadata.Name),
fh.logger.Debug("Request complete", zap.String("function", fh.function.ObjectMeta.Name),
zap.Int("retry", rrt.totalRetry), zap.Duration("total-time", duration),
zap.Int64("content-length", resp.ContentLength))
}
+3 -3
View File
@@ -65,7 +65,7 @@ func TestFunctionProxying(t *testing.T) {
fmap.assign(&fnMeta, backendURL)
httpTrigger := &fv1.HTTPTrigger{
Metadata: metav1.ObjectMeta{
ObjectMeta: metav1.ObjectMeta{
Name: "xxx",
Namespace: metav1.NamespaceDefault,
ResourceVersion: "1234",
@@ -81,7 +81,7 @@ func TestFunctionProxying(t *testing.T) {
logger: logger,
fmap: fmap,
function: &fv1.Function{
Metadata: metav1.ObjectMeta{Name: "foo", Namespace: metav1.NamespaceDefault},
ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: metav1.NamespaceDefault},
},
tsRoundTripperParams: &tsRoundTripperParams{
timeout: 50 * time.Millisecond,
@@ -103,7 +103,7 @@ func TestProxyErrorHandler(t *testing.T) {
fh := &functionHandler{
logger: logger,
function: &fv1.Function{
Metadata: metav1.ObjectMeta{
ObjectMeta: metav1.ObjectMeta{
Name: "dummy",
Namespace: "dummy-bar",
},
+7 -7
View File
@@ -79,9 +79,9 @@ func makeFunctionReferenceResolver(store k8sCache.Store) *functionReferenceResol
// resolve translates a trigger's function reference to a resolveResult.
func (frr *functionReferenceResolver) resolve(trigger fv1.HTTPTrigger) (*resolveResult, error) {
nfr := namespacedTriggerReference{
namespace: trigger.Metadata.Namespace,
triggerName: trigger.Metadata.Name,
triggerResourceVersion: trigger.Metadata.ResourceVersion,
namespace: trigger.ObjectMeta.Namespace,
triggerName: trigger.ObjectMeta.Name,
triggerResourceVersion: trigger.ObjectMeta.ResourceVersion,
}
// check cache
@@ -121,7 +121,7 @@ func (frr *functionReferenceResolver) resolve(trigger fv1.HTTPTrigger) (*resolve
func (frr *functionReferenceResolver) resolveByName(namespace, name string) (*resolveResult, error) {
// get function from cache
obj, isExist, err := frr.store.Get(&fv1.Function{
Metadata: metav1.ObjectMeta{
ObjectMeta: metav1.ObjectMeta{
Namespace: namespace,
Name: name,
},
@@ -135,7 +135,7 @@ func (frr *functionReferenceResolver) resolveByName(namespace, name string) (*re
f := obj.(*fv1.Function)
functionMap := map[string]*fv1.Function{
f.Metadata.Name: f,
f.ObjectMeta.Name: f,
}
rr := resolveResult{
@@ -155,7 +155,7 @@ func (frr *functionReferenceResolver) resolveByFunctionWeights(namespace string,
for functionName, functionWeight := range fr.FunctionWeights {
// get function from cache
obj, isExist, err := frr.store.Get(&fv1.Function{
Metadata: metav1.ObjectMeta{
ObjectMeta: metav1.ObjectMeta{
Namespace: namespace,
Name: functionName,
},
@@ -168,7 +168,7 @@ func (frr *functionReferenceResolver) resolveByFunctionWeights(namespace string,
}
f := obj.(*fv1.Function)
functionMap[f.Metadata.Name] = f
functionMap[f.ObjectMeta.Name] = f
sumPrefix = sumPrefix + functionWeight
fnWtDistrList = append(fnWtDistrList, FunctionWeightDistribution{
name: functionName,
+11 -11
View File
@@ -46,7 +46,7 @@ type HTTPTriggerSet struct {
kubeClient *kubernetes.Clientset
executor *executorClient.Client
resolver *functionReferenceResolver
crdClient *rest.RESTClient
crdClient rest.Interface
triggers []fv1.HTTPTrigger
triggerStore k8sCache.Store
triggerController k8sCache.Controller
@@ -60,7 +60,7 @@ type HTTPTriggerSet struct {
}
func makeHTTPTriggerSet(logger *zap.Logger, fmap *functionServiceMap, fissionClient *crd.FissionClient,
kubeClient *kubernetes.Clientset, executor *executorClient.Client, crdClient *rest.RESTClient, params *tsRoundTripperParams, isDebugEnv bool, actionThrottler *throttler.Throttler) (*HTTPTriggerSet, k8sCache.Store, k8sCache.Store) {
kubeClient *kubernetes.Clientset, executor *executorClient.Client, crdClient rest.Interface, params *tsRoundTripperParams, isDebugEnv bool, actionThrottler *throttler.Throttler) (*HTTPTriggerSet, k8sCache.Store, k8sCache.Store) {
httpTriggerSet := &HTTPTriggerSet{
logger: logger.Named("http_trigger_set"),
@@ -138,7 +138,7 @@ func (ts *HTTPTriggerSet) getRouter(fnTimeoutMap map[types.UID]int) *mux.Router
}
fh := &functionHandler{
logger: ts.logger.Named(trigger.Metadata.Name),
logger: ts.logger.Named(trigger.ObjectMeta.Name),
fmap: ts.functionServiceMap,
executor: ts.executor,
httpTrigger: &trigger,
@@ -188,7 +188,7 @@ func (ts *HTTPTriggerSet) getRouter(fnTimeoutMap map[types.UID]int) *mux.Router
for i := range ts.functions {
fn := ts.functions[i]
fh := &functionHandler{
logger: ts.logger.Named(fn.Metadata.Name),
logger: ts.logger.Named(fn.ObjectMeta.Name),
fmap: ts.functionServiceMap,
function: &fn,
executor: ts.executor,
@@ -197,7 +197,7 @@ func (ts *HTTPTriggerSet) getRouter(fnTimeoutMap map[types.UID]int) *mux.Router
svcAddrUpdateThrottler: ts.svcAddrUpdateThrottler,
functionTimeoutMap: fnTimeoutMap,
}
muxRouter.HandleFunc(utils.UrlForFunction(fn.Metadata.Name, fn.Metadata.Namespace), fh.handler)
muxRouter.HandleFunc(utils.UrlForFunction(fn.ObjectMeta.Name, fn.ObjectMeta.Namespace), fh.handler)
}
// Healthz endpoint for the router.
@@ -229,7 +229,7 @@ func (ts *HTTPTriggerSet) initTriggerController() (k8sCache.Store, k8sCache.Cont
oldTrigger := oldObj.(*fv1.HTTPTrigger)
newTrigger := newObj.(*fv1.HTTPTrigger)
if oldTrigger.Metadata.ResourceVersion == newTrigger.Metadata.ResourceVersion {
if oldTrigger.ObjectMeta.ResourceVersion == newTrigger.ObjectMeta.ResourceVersion {
return
}
@@ -255,15 +255,15 @@ func (ts *HTTPTriggerSet) initFunctionController() (k8sCache.Store, k8sCache.Con
oldFn := oldObj.(*fv1.Function)
fn := newObj.(*fv1.Function)
if oldFn.Metadata.ResourceVersion == fn.Metadata.ResourceVersion {
if oldFn.ObjectMeta.ResourceVersion == fn.ObjectMeta.ResourceVersion {
return
}
// update resolver function reference cache
for key, rr := range ts.resolver.copy() {
if key.namespace == fn.Metadata.Namespace &&
rr.functionMap[fn.Metadata.Name] != nil &&
rr.functionMap[fn.Metadata.Name].Metadata.ResourceVersion != fn.Metadata.ResourceVersion {
if key.namespace == fn.ObjectMeta.Namespace &&
rr.functionMap[fn.ObjectMeta.Name] != nil &&
rr.functionMap[fn.ObjectMeta.Name].ObjectMeta.ResourceVersion != fn.ObjectMeta.ResourceVersion {
// invalidate resolver cache
ts.logger.Debug("invalidating resolver cache")
err := ts.resolver.delete(key.namespace, key.triggerName, key.triggerResourceVersion)
@@ -305,7 +305,7 @@ func (ts *HTTPTriggerSet) updateRouter() {
functions := make([]fv1.Function, len(latestFunctions))
for _, f := range latestFunctions {
fn := *f.(*fv1.Function)
functionTimeout[fn.Metadata.UID] = fn.Spec.FunctionTimeout
functionTimeout[fn.ObjectMeta.UID] = fn.Spec.FunctionTimeout
functions = append(functions, *f.(*fv1.Function))
}
ts.functions = functions
+8 -8
View File
@@ -47,7 +47,7 @@ func createIngress(logger *zap.Logger, trigger *fv1.HTTPTrigger, kubeClient *kub
logger.Error("failed to create ingress", zap.Error(err))
return
}
logger.Debug("created ingress successfully for trigger", zap.String("trigger", trigger.Metadata.Name))
logger.Debug("created ingress successfully for trigger", zap.String("trigger", trigger.ObjectMeta.Name))
}
func deleteIngress(logger *zap.Logger, trigger *fv1.HTTPTrigger, kubeClient *kubernetes.Clientset) {
@@ -55,9 +55,9 @@ func deleteIngress(logger *zap.Logger, trigger *fv1.HTTPTrigger, kubeClient *kub
return
}
ingress, err := kubeClient.ExtensionsV1beta1().Ingresses(podNamespace).Get(trigger.Metadata.Name, v1.GetOptions{})
ingress, err := kubeClient.ExtensionsV1beta1().Ingresses(podNamespace).Get(trigger.ObjectMeta.Name, v1.GetOptions{})
if err != nil && !k8serrors.IsNotFound(err) {
logger.Error("failed to get ingress when deleting trigger", zap.Error(err), zap.String("trigger", trigger.Metadata.Name))
logger.Error("failed to get ingress when deleting trigger", zap.Error(err), zap.String("trigger", trigger.ObjectMeta.Name))
return
}
@@ -66,7 +66,7 @@ func deleteIngress(logger *zap.Logger, trigger *fv1.HTTPTrigger, kubeClient *kub
logger.Error("failed to delete ingress for trigger",
zap.Error(err),
zap.Any("ingress", ingress),
zap.String("trigger", trigger.Metadata.Name))
zap.String("trigger", trigger.ObjectMeta.Name))
}
}
@@ -85,14 +85,14 @@ func updateIngress(logger *zap.Logger, oldT *fv1.HTTPTrigger, newT *fv1.HTTPTrig
return
}
oldIngress, err := kubeClient.ExtensionsV1beta1().Ingresses(podNamespace).Get(oldT.Metadata.Name, v1.GetOptions{})
oldIngress, err := kubeClient.ExtensionsV1beta1().Ingresses(podNamespace).Get(oldT.ObjectMeta.Name, v1.GetOptions{})
if err != nil {
if k8serrors.IsNotFound(err) {
createIngress(logger, newT, kubeClient)
}
logger.Error("failed to get ingress when updating trigger",
zap.Error(err),
zap.String("trigger", oldT.Metadata.Name))
zap.String("trigger", oldT.ObjectMeta.Name))
return
}
newIngress := util.GetIngressSpec(podNamespace, newT)
@@ -124,11 +124,11 @@ func updateIngress(logger *zap.Logger, oldT *fv1.HTTPTrigger, newT *fv1.HTTPTrig
if changes {
_, err = kubeClient.ExtensionsV1beta1().Ingresses(podNamespace).Update(oldIngress)
if err != nil {
logger.Error("failed to update ingress for trigger", zap.Error(err), zap.String("trigger", oldT.Metadata.Name))
logger.Error("failed to update ingress for trigger", zap.Error(err), zap.String("trigger", oldT.ObjectMeta.Name))
return
}
logger.Debug("updated ingress successfully for trigger",
zap.String("old_trigger", oldT.Metadata.Name), zap.String("new_trigger", newT.Metadata.Name))
zap.String("old_trigger", oldT.ObjectMeta.Name), zap.String("new_trigger", newT.ObjectMeta.Name))
}
}
+1 -3
View File
@@ -126,8 +126,6 @@ func Start(logger *zap.Logger, port int, executorUrl string) {
logger.Fatal("error waiting for CRDs", zap.Error(err))
}
restClient := fissionClient.GetCrdClient()
executor := executorClient.MakeClient(logger, executorUrl)
timeoutStr := os.Getenv("ROUTER_ROUND_TRIP_TIMEOUT")
@@ -222,7 +220,7 @@ func Start(logger *zap.Logger, port int, executorUrl string) {
zap.Bool("default", displayAccessLog))
}
triggers, _, fnStore := makeHTTPTriggerSet(logger.Named("triggerset"), fmap, fissionClient, kubeClient, executor, restClient, &tsRoundTripperParams{
triggers, _, fnStore := makeHTTPTriggerSet(logger.Named("triggerset"), fmap, fissionClient, kubeClient, executor, fissionClient.V1().RESTClient(), &tsRoundTripperParams{
timeout: timeout,
timeoutExponent: timeoutExponent,
disableKeepAlive: disableKeepAlive,
+2 -2
View File
@@ -61,7 +61,7 @@ func TestRouter(t *testing.T) {
triggerUrl := "/foo"
triggers.triggers = append(triggers.triggers,
fv1.HTTPTrigger{
Metadata: metav1.ObjectMeta{
ObjectMeta: metav1.ObjectMeta{
Name: "xxx",
Namespace: metav1.NamespaceDefault,
ResourceVersion: "1234",
@@ -83,7 +83,7 @@ func TestRouter(t *testing.T) {
fnMetaMap := make(map[string]*fv1.Function, 1)
fnMetaMap[fnMeta.Name] = &fv1.Function{
Metadata: fnMeta,
ObjectMeta: fnMeta,
}
rr := resolveResult{
+3 -3
View File
@@ -53,7 +53,7 @@ func GetIngressSpec(namespace string, trigger *fv1.HTTPTrigger) *v1beta1.Ingress
ing := &v1beta1.Ingress{
ObjectMeta: metav1.ObjectMeta{
Labels: GetDeployLabels(trigger),
Name: trigger.Metadata.Name,
Name: trigger.ObjectMeta.Name,
// The Ingress NS MUST be same as Router NS, check long discussion:
// https://github.com/kubernetes/kubernetes/issues/17088
// We need to revisit this in future, once Kubernetes supports cross namespace ingress
@@ -91,8 +91,8 @@ func GetIngressSpec(namespace string, trigger *fv1.HTTPTrigger) *v1beta1.Ingress
func GetDeployLabels(trigger *fv1.HTTPTrigger) map[string]string {
// TODO: support function weight
return map[string]string{
"triggerName": trigger.Metadata.Name,
"triggerName": trigger.ObjectMeta.Name,
"functionName": trigger.Spec.FunctionReference.Name,
"triggerNamespace": trigger.Metadata.Namespace,
"triggerNamespace": trigger.ObjectMeta.Namespace,
}
}
+9 -9
View File
@@ -42,7 +42,7 @@ func TestGetIngressSpec(t *testing.T) {
args: args{
ingressNS: "foobarNS",
trigger: &fv1.HTTPTrigger{
Metadata: metav1.ObjectMeta{
ObjectMeta: metav1.ObjectMeta{
Name: "foo",
Namespace: "bar",
},
@@ -99,7 +99,7 @@ func TestGetIngressSpec(t *testing.T) {
args: args{
ingressNS: "foobarNS",
trigger: &fv1.HTTPTrigger{
Metadata: metav1.ObjectMeta{
ObjectMeta: metav1.ObjectMeta{
Name: "foo",
Namespace: "bar",
},
@@ -159,7 +159,7 @@ func TestGetIngressSpec(t *testing.T) {
args: args{
ingressNS: "foobarNS",
trigger: &fv1.HTTPTrigger{
Metadata: metav1.ObjectMeta{
ObjectMeta: metav1.ObjectMeta{
Name: "foo",
Namespace: "bar",
},
@@ -217,7 +217,7 @@ func TestGetIngressSpec(t *testing.T) {
args: args{
ingressNS: "foobarNS",
trigger: &fv1.HTTPTrigger{
Metadata: metav1.ObjectMeta{
ObjectMeta: metav1.ObjectMeta{
Name: "foo",
Namespace: "bar",
},
@@ -275,7 +275,7 @@ func TestGetIngressSpec(t *testing.T) {
args: args{
ingressNS: "foobarNS",
trigger: &fv1.HTTPTrigger{
Metadata: metav1.ObjectMeta{
ObjectMeta: metav1.ObjectMeta{
Name: "foo",
Namespace: "bar",
},
@@ -333,7 +333,7 @@ func TestGetIngressSpec(t *testing.T) {
args: args{
ingressNS: "foobarNS",
trigger: &fv1.HTTPTrigger{
Metadata: metav1.ObjectMeta{
ObjectMeta: metav1.ObjectMeta{
Name: "foo",
Namespace: "bar",
},
@@ -392,7 +392,7 @@ func TestGetIngressSpec(t *testing.T) {
args: args{
ingressNS: "foobarNS",
trigger: &fv1.HTTPTrigger{
Metadata: metav1.ObjectMeta{
ObjectMeta: metav1.ObjectMeta{
Name: "foo",
Namespace: "bar",
},
@@ -450,7 +450,7 @@ func TestGetIngressSpec(t *testing.T) {
args: args{
ingressNS: "foobarNS",
trigger: &fv1.HTTPTrigger{
Metadata: metav1.ObjectMeta{
ObjectMeta: metav1.ObjectMeta{
Name: "foo",
Namespace: "bar",
},
@@ -539,7 +539,7 @@ func TestGetDeployLabels(t *testing.T) {
name: "getdeploylabels",
args: args{
trigger: &fv1.HTTPTrigger{
Metadata: metav1.ObjectMeta{
ObjectMeta: metav1.ObjectMeta{
Name: "foo",
Namespace: "bar",
},