some lifecycle fixes for app and access control stuff, to get data flowing to the client again
parent
2e0e78ae28
commit
756330e79c
|
|
@ -52,5 +52,6 @@ data:
|
|||
config.yaml: |
|
||||
log_level: 2
|
||||
port: 80
|
||||
access_control_allow_origin: "*"
|
||||
endpoints:
|
||||
catalog: local-catalog:5001
|
||||
catalog: catalog-local:5001
|
||||
|
|
|
|||
|
|
@ -30,36 +30,8 @@ func Run(parent context.Context, app App) {
|
|||
ctx, canceller := context.WithCancel(parent)
|
||||
defer canceller()
|
||||
|
||||
sig := make(chan os.Signal, 5)
|
||||
signal.Notify(sig, syscall.SIGTERM, syscall.SIGHUP)
|
||||
|
||||
go func() {
|
||||
defer canceller()
|
||||
|
||||
select {
|
||||
case signal := <-sig:
|
||||
TraceLog.Printf("[SHUTDOWN TRIGGERED] got shutdown signal: %v", signal)
|
||||
case <-ctx.Done():
|
||||
TraceLog.Println("[SHUTDOWN TRIGGERED] context exited unexpectedly")
|
||||
}
|
||||
|
||||
InfoLog.Println("Shutting down service ⛔⚠️😱")
|
||||
stopCtx, stopCanceller := context.WithTimeout(parent, time.Second*5)
|
||||
defer stopCanceller()
|
||||
|
||||
app.OnStop(stopCtx)
|
||||
|
||||
errs := &errgroup.Group{}
|
||||
|
||||
errs.Go(CloseGRPCConns)
|
||||
errs.Go(StopHTTPServer)
|
||||
errs.Go(StopGRPCServer)
|
||||
|
||||
if err := errs.Wait(); err != nil {
|
||||
ErrorLog.Printf("There was an error shutting down the application gracefully: %v", err)
|
||||
}
|
||||
}()
|
||||
|
||||
InfoLog.Println("Starting service 🚀")
|
||||
|
||||
if err := loadConfig(app); err != nil {
|
||||
|
|
@ -71,6 +43,35 @@ func Run(parent context.Context, app App) {
|
|||
ErrorLog.Println(err)
|
||||
return
|
||||
}
|
||||
}()
|
||||
|
||||
sig := make(chan os.Signal, 1)
|
||||
signal.Notify(sig, syscall.SIGTERM, syscall.SIGHUP)
|
||||
|
||||
select {
|
||||
case signal := <-sig:
|
||||
TraceLog.Printf("[SHUTDOWN TRIGGERED] got shutdown signal: %v", signal)
|
||||
case <-ctx.Done():
|
||||
TraceLog.Println("[SHUTDOWN TRIGGERED] context exited")
|
||||
}
|
||||
|
||||
InfoLog.Println("Shutting down service ⛔⚠️😱")
|
||||
|
||||
errs := &errgroup.Group{}
|
||||
|
||||
errs.Go(CloseGRPCConns)
|
||||
errs.Go(StopHTTPServer)
|
||||
errs.Go(StopGRPCServer)
|
||||
|
||||
if err := errs.Wait(); err != nil {
|
||||
ErrorLog.Printf("There was an error shutting down the application gracefully: %v", err)
|
||||
}
|
||||
|
||||
stopCtx, stopCanceller := context.WithTimeout(parent, time.Second*5)
|
||||
defer stopCanceller()
|
||||
app.OnStop(stopCtx)
|
||||
|
||||
TraceLog.Println("Shutdown process fully completed")
|
||||
}
|
||||
|
||||
func loadConfig(cfg interface{}) error {
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ func StartGRPCServer(ctx context.Context, port int, sb ServerBuilder, opts ...gr
|
|||
}
|
||||
|
||||
func StopGRPCServer() error {
|
||||
TraceLog.Println("stopping GRPC server...")
|
||||
grpcServerInstance.GracefulStop()
|
||||
return nil
|
||||
}
|
||||
|
|
@ -83,7 +84,12 @@ func StartHTTPServer(ctx context.Context, port int, handler http.Handler) (err e
|
|||
}
|
||||
|
||||
func StopHTTPServer() error {
|
||||
ctx, canceler := context.WithDeadline(context.Background(), time.Now().Add(time.Second*5))
|
||||
if httpServerInstance == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
TraceLog.Println("stopping HTTP Server...")
|
||||
ctx, canceler := context.WithDeadline(context.Background(), time.Now().Add(time.Second*3))
|
||||
defer canceler()
|
||||
return httpServerInstance.Shutdown(ctx)
|
||||
}
|
||||
|
|
@ -132,6 +138,7 @@ func DialGRPC(endpoint string, opts ...grpc.DialOption) (conn *grpc.ClientConn,
|
|||
}
|
||||
|
||||
func CloseGRPCConns() error {
|
||||
grpcServerInstance.GracefulStop()
|
||||
grpcConns.Lock()
|
||||
defer grpcConns.Unlock()
|
||||
for k, v := range grpcConns.openConns {
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ import (
|
|||
type ProxyClientApp struct {
|
||||
LogLevel kernel.LogLevel `yaml:"log_level" env:"BH_LOG_LEVEL" env-default:"0" yaml-default:"0"`
|
||||
Port int `yaml:"port" env:"PROXY_CLIENT_PORT"`
|
||||
AccessControlAllowOrigin string `yaml:"access_control_allow_origin", env:"PROXY_CLIENT_CORS_ORIGIN`
|
||||
Endpoints struct {
|
||||
Catalog string `yaml:"catalog" env:"CATALOG_ENDPOINT"`
|
||||
} `yaml:"endpoints" env:"PROXY_CLIENT_SERVICES"`
|
||||
|
|
@ -45,7 +46,7 @@ func (app *ProxyClientApp) Start(ctx context.Context) error {
|
|||
Handler: http.StripPrefix("/api", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
kernel.TraceLog.Printf("{ \"Client\": \"%s\", \"Path\":\"%s\", \"User-Agent\":\"%s\" } ", r.RemoteAddr, r.URL, r.UserAgent())
|
||||
// TODO: pull the allowed origin host names from the config file
|
||||
w.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
w.Header().Set("Access-Control-Allow-Origin", app.AccessControlAllowOrigin)
|
||||
grpcMux.ServeHTTP(w, r)
|
||||
})),
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue