From 86deeab77a96cb70b77d2f41c999f048a728c2ca Mon Sep 17 00:00:00 2001 From: Gyuho Lee Date: Wed, 11 Apr 2018 01:19:33 -0700 Subject: [PATCH] functional/agent: handle "SIGQUIT_ETCD_AND_REMOVE_DATA" Signed-off-by: Gyuho Lee --- functional/agent/handler.go | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/functional/agent/handler.go b/functional/agent/handler.go index 5834c602a..e8eb4af70 100644 --- a/functional/agent/handler.go +++ b/functional/agent/handler.go @@ -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)) - if err = srv.saveEtcdLogFile(); err != nil { + if err = srv.createEtcdLogFile(); err != nil { return nil, err } @@ -215,7 +215,7 @@ func (srv *Server) stopProxy() { } } -func (srv *Server) saveEtcdLogFile() error { +func (srv *Server) createEtcdLogFile() error { var err error srv.etcdLogFile, err = os.Create(srv.Member.EtcdLogPath) 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())) - err = os.RemoveAll(srv.Member.BaseDir) - if err != nil { + srv.etcdLogFile.Sync() + 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 } - srv.lg.Info("removed base directory", zap.String("dir", srv.Member.BaseDir)) return &rpcpb.Response{ 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)) - if err = srv.saveEtcdLogFile(); err != nil { + if err = srv.createEtcdLogFile(); err != nil { 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.etcdLogFile.Sync() + srv.etcdLogFile.Close() + err = os.RemoveAll(srv.Member.BaseDir) if err != nil { return nil, err