This is an automated email from the ASF dual-hosted git repository.
rexan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hudi.git
The following commit(s) were added to refs/heads/master by this push:
new caa1bef75c3 [HUDI-7640] Uses UUID as temporary file suffix for
HoodieStorage.createImmutableFileInPath (#11052)
caa1bef75c3 is described below
commit caa1bef75c3e21b7443e192375a068c328cd6f81
Author: Danny Chan <[email protected]>
AuthorDate: Fri Apr 19 14:07:47 2024 +0800
[HUDI-7640] Uses UUID as temporary file suffix for
HoodieStorage.createImmutableFileInPath (#11052)
---
.../src/main/java/org/apache/hudi/storage/HoodieStorage.java | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/hudi-io/src/main/java/org/apache/hudi/storage/HoodieStorage.java
b/hudi-io/src/main/java/org/apache/hudi/storage/HoodieStorage.java
index adf9371c243..be160caba3b 100644
--- a/hudi-io/src/main/java/org/apache/hudi/storage/HoodieStorage.java
+++ b/hudi-io/src/main/java/org/apache/hudi/storage/HoodieStorage.java
@@ -37,6 +37,7 @@ import java.io.OutputStream;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
+import java.util.UUID;
/**
* Provides I/O APIs on files and directories on storage.
@@ -45,7 +46,6 @@ import java.util.List;
@PublicAPIClass(maturity = ApiMaturityLevel.EVOLVING)
public abstract class HoodieStorage implements Closeable {
public static final Logger LOG =
LoggerFactory.getLogger(HoodieStorage.class);
- public static final String TMP_PATH_POSTFIX = ".tmp";
/**
* @return the scheme of the storage.
@@ -249,8 +249,11 @@ public abstract class HoodieStorage implements Closeable {
* empty, will first write the content to a temp file if
{needCreateTempFile} is
* true, and then rename it back after the content is written.
*
- * @param path file path.
- * @param content content to be stored.
+ * <p>CAUTION: if this method is invoked in multi-threads for concurrent
write of the same file,
+ * an existence check of the file is recommended.
+ *
+ * @param path File path.
+ * @param content Content to be stored.
*/
@PublicAPIMethod(maturity = ApiMaturityLevel.EVOLVING)
public final void createImmutableFileInPath(StoragePath path,
@@ -267,7 +270,7 @@ public abstract class HoodieStorage implements Closeable {
if (content.isPresent() && needTempFile) {
StoragePath parent = path.getParent();
- tmpPath = new StoragePath(parent, path.getName() + TMP_PATH_POSTFIX);
+ tmpPath = new StoragePath(parent, path.getName() + "." +
UUID.randomUUID());
fsout = create(tmpPath, false);
fsout.write(content.get());
}