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