Ignore createDirectory error if directory already exists

This commit is contained in:
tclinken 2020-03-06 16:31:33 -08:00
parent 53d4798c75
commit 2017daf7d4
1 changed files with 17 additions and 4 deletions

View File

@ -1820,16 +1820,29 @@ bool createDirectory( std::string const& directory ) {
if ( mkdir( directory.substr(0, sep).c_str(), 0755 ) != 0 ) {
if (errno == EEXIST)
continue;
auto mkdirErrno = errno;
// check if directory already exists
// necessary due to old kernel bugs
struct stat s;
const char* dirname = directory.c_str();
if (stat(dirname, &s) != -1 && S_ISDIR(s.st_mode)) {
TraceEvent("DirectoryAlreadyExists").detail("Directory", dirname).detail("IgnoredError", mkdirErrno);
continue;
}
Error e;
if(errno == EACCES) {
if (mkdirErrno == EACCES) {
e = file_not_writable();
}
else {
} else {
e = systemErrorCodeToError();
}
TraceEvent(SevError, "CreateDirectory").detail("Directory", directory).GetLastError().error(e);
TraceEvent(SevError, "CreateDirectory")
.detail("Directory", directory)
.detailf("UnixErrorCode", "%x", errno)
.detail("UnixError", strerror(mkdirErrno))
.error(e);
throw e;
}
createdDirectory();