package main import ( "context" "net/http" "time" "git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs" httputil "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util/http" "go.uber.org/zap" ) type httpComponent struct { address string name string handler http.Handler shutdownDur time.Duration enabled bool cfg *cfg preReload func(c *cfg) } func (cmp *httpComponent) init(c *cfg) { if !cmp.enabled { c.log.Info(cmp.name + " is disabled") return } // Init server with parameters srv := httputil.New( *httputil.NewHTTPSrvPrm( cmp.address, cmp.handler, ), httputil.WithShutdownTimeout( cmp.shutdownDur, ), ) c.wg.Add(1) go func() { defer c.wg.Done() c.log.Info(logs.FrostFSNodeStartListeningEndpoint, zap.String("service", cmp.name), zap.String("endpoint", cmp.address)) fatalOnErr(srv.Serve()) }() c.closers = append(c.closers, closer{ cmp.name, func() { stopAndLog(c, cmp.name, srv.Shutdown) }, }) } func (cmp *httpComponent) reload(ctx context.Context) error { if cmp.preReload != nil { cmp.preReload(cmp.cfg) } // Shutdown server closer := getCloser(cmp.cfg, cmp.name) if closer != nil { closer.fn() } // Cleanup delCloser(cmp.cfg, cmp.name) // Init server with new parameters cmp.init(cmp.cfg) // Start worker if cmp.enabled { startWorker(ctx, cmp.cfg, *getWorker(cmp.cfg, cmp.name)) } return nil }