]> Cypherpunks.ru repositories - nncp.git/commitdiff
Do Mkdir syscall only if directory does not exist
authorSergey Matveev <stargrave@stargrave.org>
Sun, 29 Aug 2021 17:49:55 +0000 (20:49 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Sun, 29 Aug 2021 18:05:08 +0000 (21:05 +0300)
src/ctx.go
src/tmp.go
src/tx.go

index 58dba44df6156381216ee90e5043587d9b538039..9f18563bbb8c65f7cd051861f079267ec5139910 100644 (file)
@@ -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()
 }
index 7b9ded1b6220450a61aa0d2b301caf7b11842ce9..6d1e49c08e132794b5faa1934342bbb7b5d32823 100644 (file)
@@ -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()
index 0ddbd510db5411e62ae4abbe2d8db79b2ca41b08..95801d50b542000759b1a6ee787a388fd3ddc575 100644 (file)
--- 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()