From 67240bd5410a8c4ea700359073eb420fc2812072 Mon Sep 17 00:00:00 2001 From: Lesmiscore Date: Thu, 15 Sep 2022 00:45:35 +0900 Subject: [PATCH] sftp: fix directory creation races If mkdir fails then before this change it would have thrown an error. After this change, if the error indicated that the directory already exists then the error is not returned to the user. This fixes a race condition when two rclone threads are trying to create the same directory. --- backend/sftp/sftp.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/backend/sftp/sftp.go b/backend/sftp/sftp.go index 37fcbdcb2..19596e59d 100644 --- a/backend/sftp/sftp.go +++ b/backend/sftp/sftp.go @@ -1171,6 +1171,10 @@ func (f *Fs) mkdir(ctx context.Context, dirPath string) error { err = c.sftpClient.Mkdir(dirPath) f.putSftpConnection(&c, err) if err != nil { + if os.IsExist(err) { + fs.Debugf(f, "directory %q exists after Mkdir is attempted", dirPath) + return nil + } return fmt.Errorf("mkdir %q failed: %w", dirPath, err) } return nil