Skip to content

Commit 97c7009

Browse files
papa-hexuanpapa-hexuan
andauthored
feat: unregister before stop (#462)
Co-authored-by: papa-hexuan <[email protected]>
1 parent ed0da65 commit 97c7009

File tree

1 file changed

+17
-9
lines changed

1 file changed

+17
-9
lines changed

pkg/application/application.go

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,13 @@ func (app *Application) Stop() (err error) {
265265
for _, s := range app.servers {
266266
func(s server.Server) {
267267
app.smu.RLock()
268+
// unregister before stop
269+
e := registry.DefaultRegisterer.UnregisterService(context.Background(), s.Info())
270+
if e != nil {
271+
app.logger.Error("exit server", xlog.FieldMod(ecode.ModApp), xlog.FieldEvent("stop"), xlog.FieldName(s.Info().Name), xlog.FieldAddr(s.Info().Label()), xlog.FieldErr(err))
272+
}
273+
app.logger.Info("exit server", xlog.FieldMod(ecode.ModApp), xlog.FieldEvent("stop"), xlog.FieldName(s.Info().Name), xlog.FieldAddr(s.Info().Label()))
274+
268275
app.cycle.Run(s.Stop)
269276
app.smu.RUnlock()
270277
}(s)
@@ -296,6 +303,13 @@ func (app *Application) GracefulStop(ctx context.Context) (err error) {
296303
app.cycle.Run(func() error {
297304
app.smu.RLock()
298305
defer app.smu.RUnlock()
306+
// unregister before graceful stop
307+
e := registry.DefaultRegisterer.UnregisterService(ctx, s.Info())
308+
if e != nil {
309+
app.logger.Error("exit server", xlog.FieldMod(ecode.ModApp), xlog.FieldEvent("graceful stop"), xlog.FieldName(s.Info().Name), xlog.FieldAddr(s.Info().Label()), xlog.FieldErr(err))
310+
}
311+
app.logger.Info("exit server", xlog.FieldMod(ecode.ModApp), xlog.FieldEvent("graceful stop"), xlog.FieldName(s.Info().Name), xlog.FieldAddr(s.Info().Label()))
312+
299313
return s.GracefulStop(ctx)
300314
})
301315
}(s)
@@ -320,9 +334,10 @@ func (app *Application) GracefulStop(ctx context.Context) (err error) {
320334
func (app *Application) waitSignals() {
321335
app.logger.Info("init listen signal", xlog.FieldMod(ecode.ModApp), xlog.FieldEvent("init"))
322336
signals.Shutdown(func(grace bool) { //when get shutdown signal
323-
//todo: support timeout
324337
if grace {
325-
_ = app.GracefulStop(context.TODO())
338+
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
339+
defer cancel()
340+
_ = app.GracefulStop(ctx)
326341
} else {
327342
_ = app.Stop()
328343
}
@@ -354,13 +369,6 @@ func (app *Application) startServers() error {
354369
for _, s := range app.servers {
355370
s := s
356371
eg.Go(func() (err error) {
357-
defer func() {
358-
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
359-
defer cancel()
360-
_ = registry.DefaultRegisterer.UnregisterService(ctx, s.Info())
361-
app.logger.Info("exit server", xlog.FieldMod(ecode.ModApp), xlog.FieldEvent("exit"), xlog.FieldName(s.Info().Name), xlog.FieldErr(err), xlog.FieldAddr(s.Info().Label()))
362-
}()
363-
364372
time.AfterFunc(time.Second, func() {
365373
_ = registry.DefaultRegisterer.RegisterService(ctx, s.Info())
366374
app.logger.Info("start server", xlog.FieldMod(ecode.ModApp), xlog.FieldEvent("init"), xlog.FieldName(s.Info().Name), xlog.FieldAddr(s.Info().Label()), xlog.Any("scheme", s.Info().Scheme))

0 commit comments

Comments
 (0)