From 37c6acf9b463824cced6cc1e42c4a7c196b9e886 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BB=9F=E5=BC=8B?= Date: Thu, 12 Dec 2024 14:13:10 +0800 Subject: [PATCH 1/4] [core] Retry if snapshot commit hint failed. --- .../java/org/apache/paimon/fs/FileIOUtils.java | 15 +++++++++++++++ .../org/apache/paimon/utils/SnapshotManager.java | 3 ++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/paimon-common/src/main/java/org/apache/paimon/fs/FileIOUtils.java b/paimon-common/src/main/java/org/apache/paimon/fs/FileIOUtils.java index 556453424e31..6c69e2d8aaa4 100644 --- a/paimon-common/src/main/java/org/apache/paimon/fs/FileIOUtils.java +++ b/paimon-common/src/main/java/org/apache/paimon/fs/FileIOUtils.java @@ -44,4 +44,19 @@ public static FileIOLoader checkAccess(FileIOLoader fileIO, Path path, CatalogCo io.exists(path); return fileIO; } + + public static void overwriteFileUtf8WithRetry( + FileIO fileIO, Path path, String content, int times) throws IOException { + int loopTime = times; + while (loopTime-- > 0) { + try { + fileIO.overwriteFileUtf8(path, content); + return; + } catch (IOException e) { + if (loopTime == 0) { + throw e; + } + } + } + } } diff --git a/paimon-core/src/main/java/org/apache/paimon/utils/SnapshotManager.java b/paimon-core/src/main/java/org/apache/paimon/utils/SnapshotManager.java index eb7333366fec..6dc50a82e1ec 100644 --- a/paimon-core/src/main/java/org/apache/paimon/utils/SnapshotManager.java +++ b/paimon-core/src/main/java/org/apache/paimon/utils/SnapshotManager.java @@ -21,6 +21,7 @@ import org.apache.paimon.Changelog; import org.apache.paimon.Snapshot; import org.apache.paimon.fs.FileIO; +import org.apache.paimon.fs.FileIOUtils; import org.apache.paimon.fs.FileStatus; import org.apache.paimon.fs.Path; @@ -883,6 +884,6 @@ public void commitEarliestHint(long snapshotId) throws IOException { private void commitHint(long snapshotId, String fileName, Path dir) throws IOException { Path hintFile = new Path(dir, fileName); - fileIO.overwriteFileUtf8(hintFile, String.valueOf(snapshotId)); + FileIOUtils.overwriteFileUtf8WithRetry(fileIO, hintFile, String.valueOf(snapshotId), 3); } } From cf2048d7389e19dcca55d1c0dc6439f22c9e4d6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BB=9F=E5=BC=8B?= Date: Fri, 13 Dec 2024 12:48:07 +0800 Subject: [PATCH 2/4] fix comment --- .../org/apache/paimon/fs/FileIOUtils.java | 15 ------------- .../apache/paimon/utils/SnapshotManager.java | 21 +++++++++++++++++-- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/paimon-common/src/main/java/org/apache/paimon/fs/FileIOUtils.java b/paimon-common/src/main/java/org/apache/paimon/fs/FileIOUtils.java index 6c69e2d8aaa4..556453424e31 100644 --- a/paimon-common/src/main/java/org/apache/paimon/fs/FileIOUtils.java +++ b/paimon-common/src/main/java/org/apache/paimon/fs/FileIOUtils.java @@ -44,19 +44,4 @@ public static FileIOLoader checkAccess(FileIOLoader fileIO, Path path, CatalogCo io.exists(path); return fileIO; } - - public static void overwriteFileUtf8WithRetry( - FileIO fileIO, Path path, String content, int times) throws IOException { - int loopTime = times; - while (loopTime-- > 0) { - try { - fileIO.overwriteFileUtf8(path, content); - return; - } catch (IOException e) { - if (loopTime == 0) { - throw e; - } - } - } - } } diff --git a/paimon-core/src/main/java/org/apache/paimon/utils/SnapshotManager.java b/paimon-core/src/main/java/org/apache/paimon/utils/SnapshotManager.java index 6dc50a82e1ec..460662738f31 100644 --- a/paimon-core/src/main/java/org/apache/paimon/utils/SnapshotManager.java +++ b/paimon-core/src/main/java/org/apache/paimon/utils/SnapshotManager.java @@ -21,7 +21,6 @@ import org.apache.paimon.Changelog; import org.apache.paimon.Snapshot; import org.apache.paimon.fs.FileIO; -import org.apache.paimon.fs.FileIOUtils; import org.apache.paimon.fs.FileStatus; import org.apache.paimon.fs.Path; @@ -44,6 +43,7 @@ import java.util.Iterator; import java.util.List; import java.util.Optional; +import java.util.Random; import java.util.Set; import java.util.concurrent.ExecutorService; import java.util.concurrent.TimeUnit; @@ -73,6 +73,7 @@ public class SnapshotManager implements Serializable { public static final String LATEST = "LATEST"; private static final int READ_HINT_RETRY_NUM = 3; private static final int READ_HINT_RETRY_INTERVAL = 1; + private static final Random RANDOM = new Random(); private final FileIO fileIO; private final Path tablePath; @@ -884,6 +885,22 @@ public void commitEarliestHint(long snapshotId) throws IOException { private void commitHint(long snapshotId, String fileName, Path dir) throws IOException { Path hintFile = new Path(dir, fileName); - FileIOUtils.overwriteFileUtf8WithRetry(fileIO, hintFile, String.valueOf(snapshotId), 3); + int loopTime = 3; + while (loopTime-- > 0) { + try { + fileIO.overwriteFileUtf8(hintFile, String.valueOf(snapshotId)); + return; + } catch (IOException e) { + try { + Thread.sleep(RANDOM.nextInt(1000)); + } catch (InterruptedException ex) { + // throw root cause + throw new RuntimeException(e); + } + if (loopTime == 0) { + throw e; + } + } + } } } From 52f74905c27851381df84dde19556020bd089295 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BB=9F=E5=BC=8B?= Date: Fri, 13 Dec 2024 12:49:09 +0800 Subject: [PATCH 3/4] fix comment --- .../src/main/java/org/apache/paimon/utils/SnapshotManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paimon-core/src/main/java/org/apache/paimon/utils/SnapshotManager.java b/paimon-core/src/main/java/org/apache/paimon/utils/SnapshotManager.java index 460662738f31..868c7000f3b4 100644 --- a/paimon-core/src/main/java/org/apache/paimon/utils/SnapshotManager.java +++ b/paimon-core/src/main/java/org/apache/paimon/utils/SnapshotManager.java @@ -892,7 +892,7 @@ private void commitHint(long snapshotId, String fileName, Path dir) throws IOExc return; } catch (IOException e) { try { - Thread.sleep(RANDOM.nextInt(1000)); + Thread.sleep(RANDOM.nextInt(1000) + 500); } catch (InterruptedException ex) { // throw root cause throw new RuntimeException(e); From f3ada1b3ffa8f3cf6e0b902541d06ebd83051c72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BB=9F=E5=BC=8B?= Date: Fri, 13 Dec 2024 13:44:28 +0800 Subject: [PATCH 4/4] fix comment --- .../main/java/org/apache/paimon/utils/SnapshotManager.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/paimon-core/src/main/java/org/apache/paimon/utils/SnapshotManager.java b/paimon-core/src/main/java/org/apache/paimon/utils/SnapshotManager.java index 868c7000f3b4..49da83bfe48a 100644 --- a/paimon-core/src/main/java/org/apache/paimon/utils/SnapshotManager.java +++ b/paimon-core/src/main/java/org/apache/paimon/utils/SnapshotManager.java @@ -43,9 +43,9 @@ import java.util.Iterator; import java.util.List; import java.util.Optional; -import java.util.Random; import java.util.Set; import java.util.concurrent.ExecutorService; +import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.TimeUnit; import java.util.function.BinaryOperator; import java.util.function.Consumer; @@ -73,7 +73,6 @@ public class SnapshotManager implements Serializable { public static final String LATEST = "LATEST"; private static final int READ_HINT_RETRY_NUM = 3; private static final int READ_HINT_RETRY_INTERVAL = 1; - private static final Random RANDOM = new Random(); private final FileIO fileIO; private final Path tablePath; @@ -892,8 +891,9 @@ private void commitHint(long snapshotId, String fileName, Path dir) throws IOExc return; } catch (IOException e) { try { - Thread.sleep(RANDOM.nextInt(1000) + 500); + Thread.sleep(ThreadLocalRandom.current().nextInt(1000) + 500); } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); // throw root cause throw new RuntimeException(e); }