From 954e32b2d560fcc17b48fbe37cff5be87ae268a3 Mon Sep 17 00:00:00 2001 From: Matt Reiferson Date: Sun, 28 Mar 2021 12:26:48 -0700 Subject: [PATCH] alternative --- apps/nsqd/main.go | 19 +++++-------------- go.mod | 2 ++ nsqd/nsqd.go | 11 ----------- 3 files changed, 7 insertions(+), 25 deletions(-) diff --git a/apps/nsqd/main.go b/apps/nsqd/main.go index cd2121376..2779d3656 100644 --- a/apps/nsqd/main.go +++ b/apps/nsqd/main.go @@ -6,7 +6,6 @@ import ( "fmt" "math/rand" "os" - "os/signal" "path/filepath" "sync" "syscall" @@ -27,8 +26,7 @@ type program struct { func main() { prg := &program{} - // SIGTERM handling is in Start() - if err := svc.Run(prg, syscall.SIGINT); err != nil { + if err := svc.Run(prg, syscall.SIGINT, syscall.SIGTERM); err != nil { logFatal("%s", err) } } @@ -81,17 +79,6 @@ func (p *program) Start() error { logFatal("failed to persist metadata - %s", err) } - signalChan := make(chan os.Signal, 1) - go func() { - // range over all term signals - // we don't want to un-register our sigterm handler which would - // cause default go behavior to apply - for range signalChan { - p.nsqd.TermSignal() - } - }() - signal.Notify(signalChan, syscall.SIGTERM) - go func() { err := p.nsqd.Main() if err != nil { @@ -103,6 +90,10 @@ func (p *program) Start() error { return nil } +func (p *program) Handle(sig os.Signal) error { + return svc.ErrStop +} + func (p *program) Stop() error { p.once.Do(func() { p.nsqd.Exit() diff --git a/go.mod b/go.mod index aacdacdd6..94951f5bf 100644 --- a/go.mod +++ b/go.mod @@ -16,3 +16,5 @@ require ( github.com/nsqio/go-diskqueue v1.0.0 github.com/nsqio/go-nsq v1.0.8 ) + +replace github.com/judwhite/go-svc => /Users/mreiferson/dev/src/github.com/judwhite/go-svc diff --git a/nsqd/nsqd.go b/nsqd/nsqd.go index d2816b74c..8d0c3a0e1 100644 --- a/nsqd/nsqd.go +++ b/nsqd/nsqd.go @@ -50,7 +50,6 @@ type NSQD struct { dl *dirlock.DirLock isLoading int32 - isExiting int32 errValue atomic.Value startTime time.Time @@ -403,17 +402,7 @@ func (n *NSQD) PersistMetadata() error { return nil } -// TermSignal handles a SIGTERM calling Exit -// This is a noop after first call -func (n *NSQD) TermSignal() { - n.Exit() -} - func (n *NSQD) Exit() { - if !atomic.CompareAndSwapInt32(&n.isExiting, 0, 1) { - // avoid double call - return - } if n.tcpListener != nil { n.tcpListener.Close() }