From 4d3bfefd603b573deced768ba65863dea1645a58 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Sun, 29 Aug 2021 20:49:55 +0300 Subject: [PATCH] Do Mkdir syscall only if directory does not exist --- src/ctx.go | 18 ++++++++++++------ src/tmp.go | 18 ++++++++++++++---- src/tx.go | 12 +++++++++--- 3 files changed, 35 insertions(+), 13 deletions(-) diff --git a/src/ctx.go b/src/ctx.go index 58dba44..9f18563 100644 --- a/src/ctx.go +++ b/src/ctx.go @@ -74,14 +74,20 @@ func (ctx *Ctx) ensureRxDir(nodeId *NodeId) error { logMsg := func(les LEs) string { return fmt.Sprintf("Ensuring directory %s existence", dirPath) } - if err := os.MkdirAll(dirPath, os.FileMode(0777)); err != nil { - ctx.LogE("dir-ensure-mkdir", LEs{{"Dir", dirPath}}, err, logMsg) - return err - } fd, err := os.Open(dirPath) if err != nil { - ctx.LogE("dir-ensure-open", LEs{{"Dir", dirPath}}, err, logMsg) - return err + if !os.IsNotExist(err) { + return err + } + if err := os.MkdirAll(dirPath, os.FileMode(0777)); err != nil { + ctx.LogE("dir-ensure-mkdir", LEs{{"Dir", dirPath}}, err, logMsg) + return err + } + fd, err = os.Open(dirPath) + if err != nil { + ctx.LogE("dir-ensure-open", LEs{{"Dir", dirPath}}, err, logMsg) + return err + } } return fd.Close() } diff --git a/src/tmp.go b/src/tmp.go index 7b9ded1..6d1e49c 100644 --- a/src/tmp.go +++ b/src/tmp.go @@ -37,8 +37,13 @@ func TempFile(dir, prefix string) (*os.File, error) { func (ctx *Ctx) NewTmpFile() (*os.File, error) { jobsPath := filepath.Join(ctx.Spool, "tmp") - if err := os.MkdirAll(jobsPath, os.FileMode(0777)); err != nil { - return nil, err + if _, err := os.Stat(jobsPath); err != nil { + if !os.IsNotExist(err) { + return nil, err + } + if err := os.MkdirAll(jobsPath, os.FileMode(0777)); err != nil { + return nil, err + } } fd, err := TempFile(jobsPath, "") if err == nil { @@ -95,8 +100,13 @@ func (tmp *TmpFileWHash) Checksum() string { func (tmp *TmpFileWHash) Commit(dir string) error { var err error - if err = os.MkdirAll(dir, os.FileMode(0777)); err != nil { - return err + if _, err = os.Stat(dir); err != nil { + if !os.IsNotExist(err) { + return err + } + if err = os.MkdirAll(dir, os.FileMode(0777)); err != nil { + return err + } } if err = tmp.W.Flush(); err != nil { tmp.Fd.Close() diff --git a/src/tx.go b/src/tx.go index 0ddbd51..95801d5 100644 --- a/src/tx.go +++ b/src/tx.go @@ -257,9 +257,15 @@ func (ctx *Ctx) Tx( msgHash, ) } - if err = os.MkdirAll(seenDir, os.FileMode(0777)); err != nil { - ctx.LogE("tx-mkdir", les, err, logMsg) - return lastNode, err + if _, err = os.Stat(seenDir); err != nil { + if !os.IsNotExist(err) { + ctx.LogE("tx-mkdir", les, err, logMsg) + return lastNode, err + } + if err = os.MkdirAll(seenDir, os.FileMode(0777)); err != nil { + ctx.LogE("tx-mkdir", les, err, logMsg) + return lastNode, err + } } if fd, err := os.Create(seenPath); err == nil { fd.Close() -- 2.44.0