Check directory existence again when failing to create it to avoid erroring out on race condition

This commit is contained in:
Gilbert Chen
2017-06-20 14:38:09 -04:00
parent 169d6db544
commit 651d82e511
4 changed files with 27 additions and 3 deletions

View File

@@ -215,7 +215,11 @@ func (storage *SFTPStorage) FindChunk(threadIndex int, chunkID string, isFossil
err = storage.client.Mkdir(subDir)
if err != nil {
return "", false, 0, fmt.Errorf("Failed to create the directory %s: %v", subDir, err)
// The directory may have been created by other threads so check it again.
stat, _ := storage.client.Stat(subDir)
if stat == nil || !stat.IsDir() {
return "", false, 0, fmt.Errorf("Failed to create the directory %s: %v", subDir, err)
}
}
dir = subDir