mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
Merge pull request #13401 from ernado/testutil/populate-logger-dir-all
client/pkg/fileutil: add missing logger to {Create,Touch}DirAll
This commit is contained in:
commit
b28146f56f
@ -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)
|
||||||
|
@ -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
|
||||||
|
@ -192,7 +192,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(
|
||||||
|
@ -118,7 +118,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))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -333,7 +333,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
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -394,7 +394,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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -275,7 +275,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
|
||||||
}
|
}
|
||||||
|
@ -60,11 +60,11 @@ func bootstrap(cfg config.ServerConfig) (b *bootstrappedServer, 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)
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
||||||
}
|
}
|
||||||
ss := bootstrapSnapshot(cfg)
|
ss := bootstrapSnapshot(cfg)
|
||||||
@ -179,7 +179,7 @@ func bootstrapStorage(cfg config.ServerConfig, st v2store.Store, be *bootstrappe
|
|||||||
}
|
}
|
||||||
|
|
||||||
func bootstrapSnapshot(cfg config.ServerConfig) *snap.Snapshotter {
|
func bootstrapSnapshot(cfg config.ServerConfig) *snap.Snapshotter {
|
||||||
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()),
|
||||||
|
@ -116,7 +116,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),
|
||||||
|
@ -474,7 +474,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
|
||||||
}
|
}
|
||||||
@ -509,7 +509,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
|
||||||
}
|
}
|
||||||
@ -580,7 +580,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
|
||||||
}
|
}
|
||||||
@ -652,6 +652,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,
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -524,7 +524,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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ func (clus *Cluster) Run(t *testing.T) {
|
|||||||
// 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),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user