added manger to keep track of go routines in the services (#2869)
- added manager to wait for all go routines to end before exit - code refactor - renamed Manafer to Interface and GoRoutineManager to GroupManager - replaced some go routine calls with manager Add func - added unit tests for manager
This commit is contained in:
@@ -18,6 +18,7 @@ import (
|
||||
config "github.com/fission/fission/pkg/featureconfig"
|
||||
"github.com/fission/fission/pkg/utils/httpserver"
|
||||
"github.com/fission/fission/pkg/utils/loggerfactory"
|
||||
"github.com/fission/fission/pkg/utils/manager"
|
||||
"github.com/fission/fission/pkg/utils/metrics"
|
||||
)
|
||||
|
||||
@@ -59,6 +60,10 @@ func GetRouterWithAuth() *mux.Router {
|
||||
}
|
||||
|
||||
func TestRouterAuth(t *testing.T) {
|
||||
|
||||
mgr := manager.New()
|
||||
defer mgr.Wait()
|
||||
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
teardown := setup(t)
|
||||
@@ -66,7 +71,9 @@ func TestRouterAuth(t *testing.T) {
|
||||
logger := loggerfactory.GetLogger()
|
||||
testmux := GetRouterWithAuth()
|
||||
|
||||
go httpserver.StartServer(ctx, logger, "test", "8990", testmux)
|
||||
mgr.Add(ctx, func(ctx context.Context) {
|
||||
httpserver.StartServer(ctx, logger, mgr, "test", "8990", testmux)
|
||||
})
|
||||
|
||||
postBody, _ := json.Marshal(map[string]string{
|
||||
"username": "Foo",
|
||||
|
||||
@@ -28,6 +28,7 @@ import (
|
||||
"go.uber.org/zap/zapcore"
|
||||
|
||||
"github.com/fission/fission/pkg/utils/httpserver"
|
||||
"github.com/fission/fission/pkg/utils/manager"
|
||||
"github.com/fission/fission/pkg/utils/metrics"
|
||||
)
|
||||
|
||||
@@ -67,6 +68,9 @@ func spamServer(quit chan bool) {
|
||||
}
|
||||
|
||||
func TestMutableMux(t *testing.T) {
|
||||
mgr := manager.New()
|
||||
defer mgr.Wait()
|
||||
|
||||
// make a simple mutable router
|
||||
log.Print("Create mutable router")
|
||||
muxRouter := mux.NewRouter()
|
||||
@@ -80,13 +84,19 @@ func TestMutableMux(t *testing.T) {
|
||||
mr := newMutableRouter(logger, muxRouter)
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
|
||||
// start http server
|
||||
go httpserver.StartServer(ctx, logger, "router", "3333", mr)
|
||||
mgr.Add(ctx, func(ctx context.Context) {
|
||||
httpserver.StartServer(ctx, logger, mgr, "router", "3333", mr)
|
||||
})
|
||||
|
||||
// continuously make requests, panic if any fails
|
||||
time.Sleep(100 * time.Millisecond)
|
||||
q := make(chan bool)
|
||||
go spamServer(q)
|
||||
|
||||
mgr.Add(ctx, func(ctx context.Context) {
|
||||
spamServer(q)
|
||||
})
|
||||
|
||||
time.Sleep(5 * time.Millisecond)
|
||||
|
||||
|
||||
+11
-5
@@ -55,6 +55,7 @@ import (
|
||||
eclient "github.com/fission/fission/pkg/executor/client"
|
||||
"github.com/fission/fission/pkg/throttler"
|
||||
"github.com/fission/fission/pkg/utils/httpserver"
|
||||
"github.com/fission/fission/pkg/utils/manager"
|
||||
"github.com/fission/fission/pkg/utils/metrics"
|
||||
otelUtils "github.com/fission/fission/pkg/utils/otel"
|
||||
)
|
||||
@@ -86,19 +87,21 @@ func router(ctx context.Context, logger *zap.Logger, httpTriggerSet *HTTPTrigger
|
||||
return mr, nil
|
||||
}
|
||||
|
||||
func serve(ctx context.Context, logger *zap.Logger, port int,
|
||||
func serve(ctx context.Context, logger *zap.Logger, mgr manager.Interface, port int,
|
||||
httpTriggerSet *HTTPTriggerSet, displayAccessLog bool) error {
|
||||
mr, err := router(ctx, logger, httpTriggerSet)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "error making router")
|
||||
}
|
||||
handler := otelUtils.GetHandlerWithOTEL(mr, "fission-router", otelUtils.UrlsToIgnore("/router-healthz"))
|
||||
go httpserver.StartServer(ctx, logger, "router", fmt.Sprintf("%d", port), handler)
|
||||
mgr.Add(ctx, func(ctx context.Context) {
|
||||
httpserver.StartServer(ctx, logger, mgr, "router", fmt.Sprintf("%d", port), handler)
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
// Start starts a router
|
||||
func Start(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger, port int, executor eclient.ClientInterface) error {
|
||||
func Start(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger, mgr manager.Interface, port int, executor eclient.ClientInterface) error {
|
||||
fmap := makeFunctionServiceMap(logger, time.Minute)
|
||||
|
||||
fissionClient, err := clientGen.GetFissionClient()
|
||||
@@ -206,7 +209,10 @@ func Start(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "error making HTTP trigger set")
|
||||
}
|
||||
go metrics.ServeMetrics(ctx, "router", logger)
|
||||
|
||||
mgr.Add(ctx, func(ctx context.Context) {
|
||||
metrics.ServeMetrics(ctx, "router", logger, mgr)
|
||||
})
|
||||
|
||||
logger.Info("starting router", zap.Int("port", port))
|
||||
|
||||
@@ -214,5 +220,5 @@ func Start(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *
|
||||
ctx, span := tracer.Start(ctx, "router/Start")
|
||||
defer span.End()
|
||||
|
||||
return serve(ctx, logger, port, triggers, displayAccessLog)
|
||||
return serve(ctx, logger, mgr, port, triggers, displayAccessLog)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user