This is an automated email from the ASF dual-hosted git repository.

lzljs3620320 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/paimon.git


The following commit(s) were added to refs/heads/master by this push:
     new d31adc85c4 [core] Validate fast-forward from the current branch (#5413)
d31adc85c4 is described below

commit d31adc85c4344d388c5814adf146f29302a2018f
Author: Yubin Li <[email protected]>
AuthorDate: Tue Apr 8 15:06:35 2025 +0800

    [core] Validate fast-forward from the current branch (#5413)
---
 .../src/main/java/org/apache/paimon/utils/BranchManager.java        | 6 +++++-
 .../src/main/java/org/apache/paimon/utils/CatalogBranchManager.java | 3 ++-
 .../main/java/org/apache/paimon/utils/FileSystemBranchManager.java  | 2 +-
 .../src/test/java/org/apache/paimon/flink/BranchSqlITCase.java      | 6 ++++++
 4 files changed, 14 insertions(+), 3 deletions(-)

diff --git 
a/paimon-core/src/main/java/org/apache/paimon/utils/BranchManager.java 
b/paimon-core/src/main/java/org/apache/paimon/utils/BranchManager.java
index d144db7d51..b14e551d27 100644
--- a/paimon-core/src/main/java/org/apache/paimon/utils/BranchManager.java
+++ b/paimon-core/src/main/java/org/apache/paimon/utils/BranchManager.java
@@ -77,7 +77,7 @@ public interface BranchManager {
                 branchName);
     }
 
-    static void fastForwardValidate(String branchName) {
+    static void fastForwardValidate(String branchName, String currentBranch) {
         checkArgument(
                 !branchName.equals(DEFAULT_MAIN_BRANCH),
                 "Branch name '%s' do not use in fast-forward.",
@@ -86,5 +86,9 @@ public interface BranchManager {
                 !StringUtils.isNullOrWhitespaceOnly(branchName),
                 "Branch name '%s' is blank.",
                 branchName);
+        checkArgument(
+                !branchName.equals(currentBranch),
+                "Fast-forward from the current branch '%s' is not allowed.",
+                branchName);
     }
 }
diff --git 
a/paimon-core/src/main/java/org/apache/paimon/utils/CatalogBranchManager.java 
b/paimon-core/src/main/java/org/apache/paimon/utils/CatalogBranchManager.java
index 92357e5802..a395092456 100644
--- 
a/paimon-core/src/main/java/org/apache/paimon/utils/CatalogBranchManager.java
+++ 
b/paimon-core/src/main/java/org/apache/paimon/utils/CatalogBranchManager.java
@@ -89,7 +89,8 @@ public class CatalogBranchManager implements BranchManager {
     public void fastForward(String branchName) {
         executePost(
                 catalog -> {
-                    BranchManager.fastForwardValidate(branchName);
+                    BranchManager.fastForwardValidate(
+                            branchName, identifier.getBranchNameOrDefault());
                     catalog.fastForward(identifier, branchName);
                 });
     }
diff --git 
a/paimon-core/src/main/java/org/apache/paimon/utils/FileSystemBranchManager.java
 
b/paimon-core/src/main/java/org/apache/paimon/utils/FileSystemBranchManager.java
index ab3905f2ec..7a1bdbef29 100644
--- 
a/paimon-core/src/main/java/org/apache/paimon/utils/FileSystemBranchManager.java
+++ 
b/paimon-core/src/main/java/org/apache/paimon/utils/FileSystemBranchManager.java
@@ -138,7 +138,7 @@ public class FileSystemBranchManager implements 
BranchManager {
 
     @Override
     public void fastForward(String branchName) {
-        BranchManager.fastForwardValidate(branchName);
+        BranchManager.fastForwardValidate(branchName, 
snapshotManager.branch());
         checkArgument(branchExists(branchName), "Branch name '%s' doesn't 
exist.", branchName);
 
         Long earliestSnapshotId = 
snapshotManager.copyWithBranch(branchName).earliestSnapshotId();
diff --git 
a/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/BranchSqlITCase.java
 
b/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/BranchSqlITCase.java
index 3996ac7d28..ec161e76ac 100644
--- 
a/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/BranchSqlITCase.java
+++ 
b/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/BranchSqlITCase.java
@@ -280,6 +280,12 @@ public class BranchSqlITCase extends CatalogITCaseBase {
                 .containsExactlyInAnyOrder("+I[1, 10, hunter]", "+I[2, 10, 
hunterX]");
 
         checkSnapshots(snapshotManager, 1, 2);
+
+        sql("alter table T set ('branch'='test')");
+
+        assertThatThrownBy(() -> sql("CALL sys.fast_forward('default.T', 
'test')"))
+                .hasMessageContaining(
+                        "Fast-forward from the current branch 'test' is not 
allowed.");
     }
 
     @Test

Reply via email to