Add informers and internal go routines in manager (#2870)
* used manager's Add function in more places * exit when ctx.Done is received in archivePruner go routines * fix manager tests * fix data race * added more gpm function in manager and removed manager from a util function * closed unused channel and stopped ticker after context is done * added log statements * used context.Done inside function instead of stopper channel
This commit is contained in:
+15
-13
@@ -38,6 +38,7 @@ import (
|
||||
"github.com/fission/fission/pkg/info"
|
||||
"github.com/fission/fission/pkg/throttler"
|
||||
"github.com/fission/fission/pkg/utils"
|
||||
"github.com/fission/fission/pkg/utils/manager"
|
||||
"github.com/fission/fission/pkg/utils/metrics"
|
||||
)
|
||||
|
||||
@@ -93,7 +94,7 @@ func makeHTTPTriggerSet(logger *zap.Logger, fmap *functionServiceMap, fissionCli
|
||||
return httpTriggerSet, nil
|
||||
}
|
||||
|
||||
func (ts *HTTPTriggerSet) subscribeRouter(ctx context.Context, mr *mutableRouter) error {
|
||||
func (ts *HTTPTriggerSet) subscribeRouter(ctx context.Context, mgr manager.Interface, mr *mutableRouter) error {
|
||||
resolver := makeFunctionReferenceResolver(ts.logger, ts.funcInformer)
|
||||
ts.resolver = resolver
|
||||
ts.mutableRouter = mr
|
||||
@@ -108,10 +109,12 @@ func (ts *HTTPTriggerSet) subscribeRouter(ctx context.Context, mr *mutableRouter
|
||||
ts.logger.Info("skipping continuous trigger updates")
|
||||
return nil
|
||||
}
|
||||
go ts.updateRouter()
|
||||
go ts.syncTriggers()
|
||||
go ts.runInformer(ctx, ts.funcInformer)
|
||||
go ts.runInformer(ctx, ts.triggerInformer)
|
||||
mgr.Add(ctx, func(ctx context.Context) {
|
||||
ts.updateRouter(ctx)
|
||||
})
|
||||
ts.syncTriggers()
|
||||
mgr.AddInformers(ctx, ts.funcInformer)
|
||||
mgr.AddInformers(ctx, ts.triggerInformer)
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -378,20 +381,19 @@ func (ts *HTTPTriggerSet) addFunctionHandlers() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (ts *HTTPTriggerSet) runInformer(ctx context.Context, informer map[string]k8sCache.SharedIndexInformer) {
|
||||
for _, inf := range informer {
|
||||
go inf.Run(ctx.Done())
|
||||
}
|
||||
}
|
||||
|
||||
func (ts *HTTPTriggerSet) syncTriggers() {
|
||||
ts.syncDebouncer(func() {
|
||||
ts.updateRouterRequestChannel <- struct{}{}
|
||||
})
|
||||
}
|
||||
|
||||
func (ts *HTTPTriggerSet) updateRouter() {
|
||||
for range ts.updateRouterRequestChannel {
|
||||
func (ts *HTTPTriggerSet) updateRouter(ctx context.Context) {
|
||||
for {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return
|
||||
case <-ts.updateRouterRequestChannel:
|
||||
}
|
||||
// get triggers
|
||||
alltriggers := make([]fv1.HTTPTrigger, 0)
|
||||
for _, triggerInformer := range ts.triggerInformer {
|
||||
|
||||
@@ -64,7 +64,7 @@ import (
|
||||
|
||||
// request url ---[trigger]---> Function(name, deployment) ----[deployment]----> Function(name, uid) ----[pool mgr]---> k8s service url
|
||||
|
||||
func router(ctx context.Context, logger *zap.Logger, httpTriggerSet *HTTPTriggerSet) (*mutableRouter, error) {
|
||||
func router(ctx context.Context, logger *zap.Logger, mgr manager.Interface, httpTriggerSet *HTTPTriggerSet) (*mutableRouter, error) {
|
||||
var mr *mutableRouter
|
||||
mux := mux.NewRouter()
|
||||
mux.Use(metrics.HTTPMetricMiddleware)
|
||||
@@ -80,7 +80,7 @@ func router(ctx context.Context, logger *zap.Logger, httpTriggerSet *HTTPTrigger
|
||||
mr = newMutableRouter(logger, mux)
|
||||
}
|
||||
|
||||
err = httpTriggerSet.subscribeRouter(ctx, mr)
|
||||
err = httpTriggerSet.subscribeRouter(ctx, mgr, mr)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -89,7 +89,7 @@ func router(ctx context.Context, logger *zap.Logger, httpTriggerSet *HTTPTrigger
|
||||
|
||||
func serve(ctx context.Context, logger *zap.Logger, mgr manager.Interface, port int,
|
||||
httpTriggerSet *HTTPTriggerSet, displayAccessLog bool) error {
|
||||
mr, err := router(ctx, logger, httpTriggerSet)
|
||||
mr, err := router(ctx, logger, mgr, httpTriggerSet)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "error making router")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user