Konstantin Lebedev
2 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with
9 additions and
1 deletions
-
weed/command/master.go
-
weed/util/grace/signal_handling.go
|
|
@ -255,7 +255,7 @@ func startMaster(masterOption MasterOptions, masterWhiteList []string) { |
|
|
|
} |
|
|
|
|
|
|
|
grace.OnInterrupt(ms.Shutdown) |
|
|
|
grace.OnInterrupt(grpcS.GracefulStop) |
|
|
|
grace.OnInterrupt(grpcS.Stop) |
|
|
|
grace.OnReload(func() { |
|
|
|
if ms.Topo.HashicorpRaft != nil && ms.Topo.HashicorpRaft.State() == hashicorpRaft.Leader { |
|
|
|
ms.Topo.HashicorpRaft.LeadershipTransfer() |
|
|
|
|
|
@ -4,8 +4,11 @@ |
|
|
|
package grace |
|
|
|
|
|
|
|
import ( |
|
|
|
"github.com/seaweedfs/seaweedfs/weed/glog" |
|
|
|
"os" |
|
|
|
"os/signal" |
|
|
|
"reflect" |
|
|
|
"runtime" |
|
|
|
"sync" |
|
|
|
"syscall" |
|
|
|
) |
|
|
@ -16,6 +19,10 @@ var interruptHookLock sync.RWMutex |
|
|
|
var reloadHooks = make([]func(), 0) |
|
|
|
var reloadHookLock sync.RWMutex |
|
|
|
|
|
|
|
func GetFunctionName(i interface{}) string { |
|
|
|
return runtime.FuncForPC(reflect.ValueOf(i).Pointer()).Name() |
|
|
|
} |
|
|
|
|
|
|
|
func init() { |
|
|
|
signalChan = make(chan os.Signal, 1) |
|
|
|
signal.Notify(signalChan, |
|
|
@ -38,6 +45,7 @@ func init() { |
|
|
|
} else { |
|
|
|
interruptHookLock.RLock() |
|
|
|
for _, hook := range interruptHooks { |
|
|
|
glog.V(4).Infof("exec interrupt hook func name:%s", GetFunctionName(hook)) |
|
|
|
hook() |
|
|
|
} |
|
|
|
interruptHookLock.RUnlock() |
|
|
|