main.go (nsq-1.2.0) | : | main.go (nsq-1.2.1) | ||
---|---|---|---|---|
package main | package main | |||
import ( | import ( | |||
"context" | ||||
"flag" | "flag" | |||
"fmt" | "fmt" | |||
"math/rand" | "math/rand" | |||
"os" | "os" | |||
"path/filepath" | ||||
"sync" | "sync" | |||
"syscall" | "syscall" | |||
"time" | "time" | |||
"github.com/BurntSushi/toml" | "github.com/BurntSushi/toml" | |||
"github.com/judwhite/go-svc/svc" | "github.com/judwhite/go-svc" | |||
"github.com/mreiferson/go-options" | "github.com/mreiferson/go-options" | |||
"github.com/nsqio/nsq/internal/lg" | "github.com/nsqio/nsq/internal/lg" | |||
"github.com/nsqio/nsq/internal/version" | "github.com/nsqio/nsq/internal/version" | |||
"github.com/nsqio/nsq/nsqd" | "github.com/nsqio/nsq/nsqd" | |||
) | ) | |||
type program struct { | type program struct { | |||
once sync.Once | once sync.Once | |||
nsqd *nsqd.NSQD | nsqd *nsqd.NSQD | |||
} | } | |||
func main() { | func main() { | |||
prg := &program{} | prg := &program{} | |||
if err := svc.Run(prg, syscall.SIGINT, syscall.SIGTERM); err != nil { | if err := svc.Run(prg, syscall.SIGINT, syscall.SIGTERM); err != nil { | |||
logFatal("%s", err) | logFatal("%s", err) | |||
} | } | |||
} | } | |||
func (p *program) Init(env svc.Environment) error { | func (p *program) Init(env svc.Environment) error { | |||
if env.IsWindowsService() { | ||||
dir := filepath.Dir(os.Args[0]) | ||||
return os.Chdir(dir) | ||||
} | ||||
return nil | ||||
} | ||||
func (p *program) Start() error { | ||||
opts := nsqd.NewOptions() | opts := nsqd.NewOptions() | |||
flagSet := nsqdFlagSet(opts) | flagSet := nsqdFlagSet(opts) | |||
flagSet.Parse(os.Args[1:]) | flagSet.Parse(os.Args[1:]) | |||
rand.Seed(time.Now().UTC().UnixNano()) | rand.Seed(time.Now().UTC().UnixNano()) | |||
if flagSet.Lookup("version").Value.(flag.Getter).Get().(bool) { | if flagSet.Lookup("version").Value.(flag.Getter).Get().(bool) { | |||
fmt.Println(version.String("nsqd")) | fmt.Println(version.String("nsqd")) | |||
os.Exit(0) | os.Exit(0) | |||
skipping to change at line 65 | skipping to change at line 57 | |||
configFile := flagSet.Lookup("config").Value.String() | configFile := flagSet.Lookup("config").Value.String() | |||
if configFile != "" { | if configFile != "" { | |||
_, err := toml.DecodeFile(configFile, &cfg) | _, err := toml.DecodeFile(configFile, &cfg) | |||
if err != nil { | if err != nil { | |||
logFatal("failed to load config file %s - %s", configFile , err) | logFatal("failed to load config file %s - %s", configFile , err) | |||
} | } | |||
} | } | |||
cfg.Validate() | cfg.Validate() | |||
options.Resolve(opts, flagSet, cfg) | options.Resolve(opts, flagSet, cfg) | |||
nsqd, err := nsqd.New(opts) | nsqd, err := nsqd.New(opts) | |||
if err != nil { | if err != nil { | |||
logFatal("failed to instantiate nsqd - %s", err) | logFatal("failed to instantiate nsqd - %s", err) | |||
} | } | |||
p.nsqd = nsqd | p.nsqd = nsqd | |||
err = p.nsqd.LoadMetadata() | return nil | |||
} | ||||
func (p *program) Start() error { | ||||
err := p.nsqd.LoadMetadata() | ||||
if err != nil { | if err != nil { | |||
logFatal("failed to load metadata - %s", err) | logFatal("failed to load metadata - %s", err) | |||
} | } | |||
err = p.nsqd.PersistMetadata() | err = p.nsqd.PersistMetadata() | |||
if err != nil { | if err != nil { | |||
logFatal("failed to persist metadata - %s", err) | logFatal("failed to persist metadata - %s", err) | |||
} | } | |||
go func() { | go func() { | |||
err := p.nsqd.Main() | err := p.nsqd.Main() | |||
skipping to change at line 98 | skipping to change at line 95 | |||
return nil | return nil | |||
} | } | |||
func (p *program) Stop() error { | func (p *program) Stop() error { | |||
p.once.Do(func() { | p.once.Do(func() { | |||
p.nsqd.Exit() | p.nsqd.Exit() | |||
}) | }) | |||
return nil | return nil | |||
} | } | |||
func (p *program) Handle(s os.Signal) error { | ||||
return svc.ErrStop | ||||
} | ||||
// Context returns a context that will be canceled when nsqd initiates the shutd | ||||
own | ||||
func (p *program) Context() context.Context { | ||||
return p.nsqd.Context() | ||||
} | ||||
func logFatal(f string, args ...interface{}) { | func logFatal(f string, args ...interface{}) { | |||
lg.LogFatal("[nsqd] ", f, args...) | lg.LogFatal("[nsqd] ", f, args...) | |||
} | } | |||
End of changes. 7 change blocks. | ||||
11 lines changed or deleted | 18 lines changed or added |