Skip to content

Commit

Permalink
blobserver: use MkdirAll from sftp library
Browse files Browse the repository at this point in the history
  • Loading branch information
willnorris committed Sep 15, 2020
1 parent bc5f9bf commit d0f71eb
Showing 1 changed file with 1 addition and 38 deletions.
39 changes: 1 addition & 38 deletions pkg/blobserver/sftp/sftp.go
Expand Up @@ -449,47 +449,10 @@ func (s sftpFS) Lstat(dir string) (os.FileInfo, error) {
}

func (s sftpFS) MkdirAll(dir string, perm os.FileMode) error {
if dir == "." {
return nil
}

sc, err := s.sftp()
if err != nil {
return err
}

fi, err := sc.Lstat(dir)
if err == nil {
if fi.IsDir() {
return nil
}
return fmt.Errorf("sftp.MkdirAll: path %q already exists of type %v", dir, fi.Mode())
}
if !os.IsNotExist(err) {
return err
}

// Just try and and hope for the best.
if err := s.mkdirCheckRace(sc, dir); err == nil {
return nil
}

// Nope, parents don't exist. Make them.
if err := s.MkdirAll(path.Dir(dir), perm); err != nil {
return nil
}

return s.mkdirCheckRace(sc, dir)
}

func (s sftpFS) mkdirCheckRace(sc *sftp.Client, dir string) error {
err := sc.Mkdir(dir)
if err == nil {
return nil
}
// Maybe we raced with somebody else?
if fi, err := sc.Lstat(dir); err == nil && fi.IsDir() {
return nil
}
return err
return sc.MkdirAll(dir)
}

0 comments on commit d0f71eb

Please sign in to comment.