functional/agent: handle "SIGQUIT_ETCD_AND_REMOVE_DATA"

Signed-off-by: Gyuho Lee <gyuhox@gmail.com>
release-3.4
Gyuho Lee 2018-04-11 01:19:33 -07:00
parent 7e56c3e737
commit 86deeab77a
1 changed files with 30 additions and 6 deletions

View File

@ -92,7 +92,7 @@ func (srv *Server) handle_INITIAL_START_ETCD(req *rpcpb.Request) (*rpcpb.Respons
} }
srv.lg.Info("created base directory", zap.String("path", srv.Member.BaseDir)) srv.lg.Info("created base directory", zap.String("path", srv.Member.BaseDir))
if err = srv.saveEtcdLogFile(); err != nil { if err = srv.createEtcdLogFile(); err != nil {
return nil, err return nil, err
} }
@ -215,7 +215,7 @@ func (srv *Server) stopProxy() {
} }
} }
func (srv *Server) saveEtcdLogFile() error { func (srv *Server) createEtcdLogFile() error {
var err error var err error
srv.etcdLogFile, err = os.Create(srv.Member.EtcdLogPath) srv.etcdLogFile, err = os.Create(srv.Member.EtcdLogPath)
if err != nil { if err != nil {
@ -469,11 +469,32 @@ func (srv *Server) handle_SIGQUIT_ETCD_AND_REMOVE_DATA() (*rpcpb.Response, error
} }
srv.lg.Info("killed etcd", zap.String("signal", syscall.SIGQUIT.String())) srv.lg.Info("killed etcd", zap.String("signal", syscall.SIGQUIT.String()))
err = os.RemoveAll(srv.Member.BaseDir) srv.etcdLogFile.Sync()
if err != nil { srv.etcdLogFile.Close()
// for debugging purposes, rename instead of removing
if err = os.RemoveAll(srv.Member.BaseDir + ".backup"); err != nil {
return nil, err
}
if err = os.Rename(srv.Member.BaseDir, srv.Member.BaseDir+".backup"); err != nil {
return nil, err
}
srv.lg.Info(
"renamed",
zap.String("base-dir", srv.Member.BaseDir),
zap.String("new-dir", srv.Member.BaseDir+".backup"),
)
// create a new log file for next new member restart
if !fileutil.Exist(srv.Member.BaseDir) {
err = fileutil.TouchDirAll(srv.Member.BaseDir)
if err != nil {
return nil, err
}
}
if err = srv.createEtcdLogFile(); err != nil {
return nil, err return nil, err
} }
srv.lg.Info("removed base directory", zap.String("dir", srv.Member.BaseDir))
return &rpcpb.Response{ return &rpcpb.Response{
Success: true, Success: true,
@ -504,7 +525,7 @@ func (srv *Server) handle_SIGQUIT_ETCD_AND_ARCHIVE_DATA() (*rpcpb.Response, erro
} }
srv.lg.Info("archived data", zap.String("base-dir", srv.Member.BaseDir)) srv.lg.Info("archived data", zap.String("base-dir", srv.Member.BaseDir))
if err = srv.saveEtcdLogFile(); err != nil { if err = srv.createEtcdLogFile(); err != nil {
return nil, err return nil, err
} }
@ -530,6 +551,9 @@ func (srv *Server) handle_SIGQUIT_ETCD_AND_REMOVE_DATA_AND_STOP_AGENT() (*rpcpb.
} }
srv.lg.Info("killed etcd", zap.String("signal", syscall.SIGQUIT.String())) srv.lg.Info("killed etcd", zap.String("signal", syscall.SIGQUIT.String()))
srv.etcdLogFile.Sync()
srv.etcdLogFile.Close()
err = os.RemoveAll(srv.Member.BaseDir) err = os.RemoveAll(srv.Member.BaseDir)
if err != nil { if err != nil {
return nil, err return nil, err