You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@druid.apache.org by GitBox <gi...@apache.org> on 2021/11/05 20:53:35 UTC

[GitHub] [druid] gianm commented on a change in pull request #11879: Migrate File.mkdirs to FileUtils.mkdirp.

gianm commented on a change in pull request #11879:
URL: https://github.com/apache/druid/pull/11879#discussion_r743970973



##########
File path: core/src/main/java/org/apache/druid/java/util/common/FileUtils.java
##########
@@ -379,6 +379,27 @@ public static File createTempDir(@Nullable final String prefix)
     }
   }
 
+  /**
+   * Create "directory" and all intermediate directories as needed. If the directory is successfully created, or already
+   * exists, returns quietly. Otherwise, throws an IOException.
+   *
+   * Simpler to use than {@link File#mkdirs()}, and more reliable since it is safe from races where two threads try

Review comment:
       For the potential race, I don't know if we have this issue today. I did notice it when goofing off with some new code in a branch, but I'm not sure if any production code today has a problem here.
   
   I still thought the patch was a good idea for two reasons:
   
   1. There are a bunch of places that don't check the return value of `File.mkdirs()`, and switching to this new method would make them fail faster if the directory cannot be created, which I thought would generally be good. (Otherwise, the errors will happen later and more indirectly, perhaps being harder to debug.)
   2. The fix to the race is really simple, so I didn't see why _not_ include it. (The fix is to do `mkdirs() || isDirectory()` instead of just `mkdirs()`).
   
   As to `org.apache.commons.io.FileUtils.forceMkdir()`, I didn't notice that method until now, so thanks for pointing it out. It looks almost identical to the one in this PR, except it skips the initial `isDirectory()` check. But it's still race-safe because it does have the final `isDirectory()` check. And actually, I think the initial `isDirectory()` check is pointless anyway, since `mkdirs()` will exit `false()` quickly if the directory already exists. So I just pushed a new commit that removes it.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@druid.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@druid.apache.org
For additional commands, e-mail: commits-help@druid.apache.org