Merge pull request #14799 from serathius/fix-client-fileutil-log

[3.5] client/pkg/fileutil: add missing logger to {Create,Touch}DirAll
This commit is contained in:
Marek Siarkowicz 2022-11-17 15:39:42 +01:00 committed by GitHub
commit 7ccca083eb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 25 additions and 26 deletions

View File

@ -44,16 +44,12 @@ func IsDirWriteable(dir string) error {
// TouchDirAll is similar to os.MkdirAll. It creates directories with 0700 permission if any directory // TouchDirAll is similar to os.MkdirAll. It creates directories with 0700 permission if any directory
// does not exists. TouchDirAll also ensures the given directory is writable. // does not exists. TouchDirAll also ensures the given directory is writable.
func TouchDirAll(dir string) error { func TouchDirAll(lg *zap.Logger, dir string) error {
// If path is already a directory, MkdirAll does nothing and returns nil, so, // If path is already a directory, MkdirAll does nothing and returns nil, so,
// first check if dir exist with an expected permission mode. // first check if dir exist with an expected permission mode.
if Exist(dir) { if Exist(dir) {
err := CheckDirPermission(dir, PrivateDirMode) err := CheckDirPermission(dir, PrivateDirMode)
if err != nil { if err != nil {
lg, _ := zap.NewProduction()
if lg == nil {
lg = zap.NewExample()
}
lg.Warn("check file permission", zap.Error(err)) lg.Warn("check file permission", zap.Error(err))
} }
} else { } else {
@ -70,8 +66,8 @@ func TouchDirAll(dir string) error {
// CreateDirAll is similar to TouchDirAll but returns error // CreateDirAll is similar to TouchDirAll but returns error
// if the deepest directory was not empty. // if the deepest directory was not empty.
func CreateDirAll(dir string) error { func CreateDirAll(lg *zap.Logger, dir string) error {
err := TouchDirAll(dir) err := TouchDirAll(lg, dir)
if err == nil { if err == nil {
var ns []string var ns []string
ns, err = ReadDir(dir) ns, err = ReadDir(dir)

View File

@ -67,7 +67,7 @@ func TestCreateDirAll(t *testing.T) {
defer os.RemoveAll(tmpdir) defer os.RemoveAll(tmpdir)
tmpdir2 := filepath.Join(tmpdir, "testdir") tmpdir2 := filepath.Join(tmpdir, "testdir")
if err = CreateDirAll(tmpdir2); err != nil { if err = CreateDirAll(zaptest.NewLogger(t), tmpdir2); err != nil {
t.Fatal(err) t.Fatal(err)
} }
@ -75,7 +75,7 @@ func TestCreateDirAll(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
if err = CreateDirAll(tmpdir2); err == nil || !strings.Contains(err.Error(), "to be empty, got") { if err = CreateDirAll(zaptest.NewLogger(t), tmpdir2); err == nil || !strings.Contains(err.Error(), "to be empty, got") {
t.Fatalf("unexpected error %v", err) t.Fatalf("unexpected error %v", err)
} }
} }
@ -186,7 +186,7 @@ func TestDirPermission(t *testing.T) {
tmpdir2 := filepath.Join(tmpdir, "testpermission") tmpdir2 := filepath.Join(tmpdir, "testpermission")
// create a new dir with 0700 // create a new dir with 0700
if err = CreateDirAll(tmpdir2); err != nil { if err = CreateDirAll(zaptest.NewLogger(t), tmpdir2); err != nil {
t.Fatal(err) t.Fatal(err)
} }
// check dir permission with mode different than created dir // check dir permission with mode different than created dir

View File

@ -205,7 +205,7 @@ func SelfCert(lg *zap.Logger, dirpath string, hosts []string, selfSignedCertVali
) )
return return
} }
err = fileutil.TouchDirAll(dirpath) err = fileutil.TouchDirAll(lg, dirpath)
if err != nil { if err != nil {
if info.Logger != nil { if info.Logger != nil {
info.Logger.Warn( info.Logger.Warn(

View File

@ -114,7 +114,7 @@ func HandleBackup(withV3 bool, srcDir string, destDir string, srcWAL string, des
destWAL = datadir.ToWalDir(destDir) destWAL = datadir.ToWalDir(destDir)
} }
if err := fileutil.CreateDirAll(destSnap); err != nil { if err := fileutil.CreateDirAll(lg, destSnap); err != nil {
lg.Fatal("failed creating backup snapshot dir", zap.String("dest-snap", destSnap), zap.Error(err)) lg.Fatal("failed creating backup snapshot dir", zap.String("dest-snap", destSnap), zap.Error(err))
} }

View File

@ -322,7 +322,7 @@ func (s *v3Manager) copyAndVerifyDB() error {
return err return err
} }
if err := fileutil.CreateDirAll(s.snapDir); err != nil { if err := fileutil.CreateDirAll(s.lg, s.snapDir); err != nil {
return err return err
} }
@ -383,7 +383,7 @@ func (s *v3Manager) copyAndVerifyDB() error {
// //
// TODO: This code ignores learners !!! // TODO: This code ignores learners !!!
func (s *v3Manager) saveWALAndSnap() (*raftpb.HardState, error) { func (s *v3Manager) saveWALAndSnap() (*raftpb.HardState, error) {
if err := fileutil.CreateDirAll(s.walDir); err != nil { if err := fileutil.CreateDirAll(s.lg, s.walDir); err != nil {
return nil, err return nil, err
} }

View File

@ -276,7 +276,7 @@ func startProxy(cfg *config) error {
} }
cfg.ec.Dir = filepath.Join(cfg.ec.Dir, "proxy") cfg.ec.Dir = filepath.Join(cfg.ec.Dir, "proxy")
err = fileutil.TouchDirAll(cfg.ec.Dir) err = fileutil.TouchDirAll(lg, cfg.ec.Dir)
if err != nil { if err != nil {
return err return err
} }

View File

@ -349,13 +349,13 @@ func NewServer(cfg config.ServerConfig) (srv *EtcdServer, err error) {
) )
} }
if terr := fileutil.TouchDirAll(cfg.DataDir); terr != nil { if terr := fileutil.TouchDirAll(cfg.Logger, cfg.DataDir); terr != nil {
return nil, fmt.Errorf("cannot access data directory: %v", terr) return nil, fmt.Errorf("cannot access data directory: %v", terr)
} }
haveWAL := wal.Exist(cfg.WALDir()) haveWAL := wal.Exist(cfg.WALDir())
if err = fileutil.TouchDirAll(cfg.SnapDir()); err != nil { if err = fileutil.TouchDirAll(cfg.Logger, cfg.SnapDir()); err != nil {
cfg.Logger.Fatal( cfg.Logger.Fatal(
"failed to create snapshot directory", "failed to create snapshot directory",
zap.String("path", cfg.SnapDir()), zap.String("path", cfg.SnapDir()),
@ -548,7 +548,7 @@ func NewServer(cfg config.ServerConfig) (srv *EtcdServer, err error) {
return nil, fmt.Errorf("unsupported bootstrap config") return nil, fmt.Errorf("unsupported bootstrap config")
} }
if terr := fileutil.TouchDirAll(cfg.MemberDir()); terr != nil { if terr := fileutil.TouchDirAll(cfg.Logger, cfg.MemberDir()); terr != nil {
return nil, fmt.Errorf("cannot access member directory: %v", terr) return nil, fmt.Errorf("cannot access member directory: %v", terr)
} }

View File

@ -115,7 +115,7 @@ func Create(lg *zap.Logger, dirpath string, metadata []byte) (*WAL, error) {
} }
defer os.RemoveAll(tmpdirpath) defer os.RemoveAll(tmpdirpath)
if err := fileutil.CreateDirAll(tmpdirpath); err != nil { if err := fileutil.CreateDirAll(lg, tmpdirpath); err != nil {
lg.Warn( lg.Warn(
"failed to create a temporary WAL directory", "failed to create a temporary WAL directory",
zap.String("tmp-dir-path", tmpdirpath), zap.String("tmp-dir-path", tmpdirpath),

View File

@ -473,7 +473,7 @@ func (srv *Server) handle_INITIAL_START_ETCD(req *rpcpb.Request) (*rpcpb.Respons
}, nil }, nil
} }
err := fileutil.TouchDirAll(srv.Member.BaseDir) err := fileutil.TouchDirAll(srv.lg, srv.Member.BaseDir)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -508,7 +508,7 @@ func (srv *Server) handle_INITIAL_START_ETCD(req *rpcpb.Request) (*rpcpb.Respons
func (srv *Server) handle_RESTART_ETCD(req *rpcpb.Request) (*rpcpb.Response, error) { func (srv *Server) handle_RESTART_ETCD(req *rpcpb.Request) (*rpcpb.Response, error) {
var err error var err error
if !fileutil.Exist(srv.Member.BaseDir) { if !fileutil.Exist(srv.Member.BaseDir) {
err = fileutil.TouchDirAll(srv.Member.BaseDir) err = fileutil.TouchDirAll(srv.lg, srv.Member.BaseDir)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -579,7 +579,7 @@ func (srv *Server) handle_SIGQUIT_ETCD_AND_REMOVE_DATA() (*rpcpb.Response, error
// create a new log file for next new member restart // create a new log file for next new member restart
if !fileutil.Exist(srv.Member.BaseDir) { if !fileutil.Exist(srv.Member.BaseDir) {
err = fileutil.TouchDirAll(srv.Member.BaseDir) err = fileutil.TouchDirAll(srv.lg, srv.Member.BaseDir)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -651,6 +651,7 @@ func (srv *Server) handle_SIGQUIT_ETCD_AND_ARCHIVE_DATA() (*rpcpb.Response, erro
// TODO: support separate WAL directory // TODO: support separate WAL directory
if err = archive( if err = archive(
srv.lg,
srv.Member.BaseDir, srv.Member.BaseDir,
srv.Member.Etcd.LogOutputs[0], srv.Member.Etcd.LogOutputs[0],
srv.Member.Etcd.DataDir, srv.Member.Etcd.DataDir,

View File

@ -25,15 +25,17 @@ import (
"time" "time"
"go.etcd.io/etcd/client/pkg/v3/fileutil" "go.etcd.io/etcd/client/pkg/v3/fileutil"
"go.uber.org/zap"
) )
// TODO: support separate WAL directory // TODO: support separate WAL directory
func archive(baseDir, etcdLogPath, dataDir string) error { func archive(lg *zap.Logger, baseDir, etcdLogPath, dataDir string) error {
dir := filepath.Join(baseDir, "etcd-failure-archive", time.Now().Format(time.RFC3339)) dir := filepath.Join(baseDir, "etcd-failure-archive", time.Now().Format(time.RFC3339))
if existDir(dir) { if existDir(dir) {
dir = filepath.Join(baseDir, "etcd-failure-archive", time.Now().Add(time.Second).Format(time.RFC3339)) dir = filepath.Join(baseDir, "etcd-failure-archive", time.Now().Add(time.Second).Format(time.RFC3339))
} }
if err := fileutil.TouchDirAll(dir); err != nil { if err := fileutil.TouchDirAll(lg, dir); err != nil {
return err return err
} }

View File

@ -520,7 +520,7 @@ func (clus *Cluster) sendOpWithResp(idx int, op rpcpb.Operation) (*rpcpb.Respons
"fixtures", "fixtures",
"client", "client",
) )
if err = fileutil.TouchDirAll(dirClient); err != nil { if err = fileutil.TouchDirAll(clus.lg, dirClient); err != nil {
return nil, err return nil, err
} }

View File

@ -37,7 +37,7 @@ func (clus *Cluster) Run() {
// needs to obtain all the failpoints from the etcd member. // needs to obtain all the failpoints from the etcd member.
clus.updateCases() clus.updateCases()
if err := fileutil.TouchDirAll(clus.Tester.DataDir); err != nil { if err := fileutil.TouchDirAll(clus.lg, clus.Tester.DataDir); err != nil {
clus.lg.Panic( clus.lg.Panic(
"failed to create test data directory", "failed to create test data directory",
zap.String("dir", clus.Tester.DataDir), zap.String("dir", clus.Tester.DataDir),