split goroutine shutdown code

This commit is contained in:
Thibault bui Koechlin 2020-06-17 00:19:37 +02:00
parent bb60d29ac8
commit e9c16ee064

View file

@ -6,6 +6,7 @@ import (
"syscall"
"time"
leaky "github.com/crowdsecurity/crowdsec/pkg/leakybucket"
"github.com/crowdsecurity/crowdsec/pkg/outputs"
log "github.com/sirupsen/logrus"
@ -13,34 +14,62 @@ import (
)
func reloadHandler(sig os.Signal) error {
//stop go routines
if err := ShutdownRoutines(); err != nil {
log.Errorf("Failed to shut down routines: %s", err)
}
//dump buckets state
if err := leaky.DumpBucketsStateAt("buckets_state.json", time.Now(), buckets); err != nil {
log.Fatalf("Failed dumping bucket state : %s", err)
}
//reload configurations
//restore bucket state
//start processing routines
//start acquis routine
log.Printf("reloading")
dumpMetrics()
return nil
}
func termHandler(sig os.Signal) error {
log.Warningf("Shutting down routines")
func ShutdownRoutines() error {
var reterr error
acquisTomb.Kill(nil)
log.Infof("waiting for acquisition to finish")
if err := acquisTomb.Wait(); err != nil {
log.Warningf("Acquisition returned error : %s", err)
reterr = err
}
log.Infof("acquisition is finished, wait for parser/bucket/ouputs.")
parsersTomb.Kill(nil)
if err := parsersTomb.Wait(); err != nil {
log.Warningf("Parsers returned error : %s", err)
reterr = err
}
log.Infof("parsers is done")
bucketsTomb.Kill(nil)
if err := bucketsTomb.Wait(); err != nil {
log.Warningf("Buckets returned error : %s", err)
reterr = err
}
log.Infof("buckets is done")
outputsTomb.Kill(nil)
if err := outputsTomb.Wait(); err != nil {
log.Warningf("Ouputs returned error : %s", err)
reterr = err
}
return reterr
}
func termHandler(sig os.Signal) error {
log.Warningf("Shutting down routines")
if err := ShutdownRoutines(); err != nil {
log.Warningf("Error encountered while shutting down routines : %s", err)
}
log.Infof("ouputs is done")
dumpMetrics()
log.Warningf("all routines are done, bye.")