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

JingsongLi 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 a47bde376f [core] Fix scan version for fallback branch (#9323)
a47bde376f is described below

commit a47bde376f58da2108e4ba1205053ba0e8a13492
Author: Arnav Balyan <[email protected]>
AuthorDate: Sun Aug 23 20:55:26 2026 +0530

    [core] Fix scan version for fallback branch (#9323)
---
 .../paimon/table/FallbackReadFileStoreTable.java   |  9 ++++++++
 .../table/FallbackReadFileStoreTableTest.java      | 24 ++++++++++++++++++++++
 2 files changed, 33 insertions(+)

diff --git 
a/paimon-core/src/main/java/org/apache/paimon/table/FallbackReadFileStoreTable.java
 
b/paimon-core/src/main/java/org/apache/paimon/table/FallbackReadFileStoreTable.java
index 9b26b26f69..da37e07808 100644
--- 
a/paimon-core/src/main/java/org/apache/paimon/table/FallbackReadFileStoreTable.java
+++ 
b/paimon-core/src/main/java/org/apache/paimon/table/FallbackReadFileStoreTable.java
@@ -193,6 +193,15 @@ public class FallbackReadFileStoreTable extends 
DelegatedFileStoreTable {
         // then convert millisecond to other branch snapshot id
         String scanSnapshotIdOptionKey = CoreOptions.SCAN_SNAPSHOT_ID.key();
         String scanSnapshotId = options.get(scanSnapshotIdOptionKey);
+        String scanVersionOptionKey = CoreOptions.SCAN_VERSION.key();
+        String scanVersion = options.get(scanVersionOptionKey);
+        if (scanSnapshotId == null
+                && scanVersion != null
+                && scanVersion.chars().allMatch(Character::isDigit)
+                && !wrapped.tagManager().tagExists(scanVersion)) {
+            scanSnapshotId = scanVersion;
+            result.remove(scanVersionOptionKey);
+        }
         if (scanSnapshotId != null) {
             long id = Long.parseLong(scanSnapshotId);
             long millis = wrapped.snapshotManager().snapshot(id).timeMillis();
diff --git 
a/paimon-core/src/test/java/org/apache/paimon/table/FallbackReadFileStoreTableTest.java
 
b/paimon-core/src/test/java/org/apache/paimon/table/FallbackReadFileStoreTableTest.java
index 6716dc56a7..c0e6f7b15b 100644
--- 
a/paimon-core/src/test/java/org/apache/paimon/table/FallbackReadFileStoreTableTest.java
+++ 
b/paimon-core/src/test/java/org/apache/paimon/table/FallbackReadFileStoreTableTest.java
@@ -166,6 +166,30 @@ public class FallbackReadFileStoreTableTest {
         assertThat(result).containsExactlyInAnyOrder(Pair.of(1, 1), Pair.of(2, 
2));
     }
 
+    @Test
+    public void testScanVersionForFallbackBranch() throws Exception {
+        FileStoreTable mainTable = createTable();
+        writeDataIntoTable(mainTable, 0, rowData(1, 10));
+        mainTable.createTag("base");
+
+        writeDataIntoTable(mainTable, 1, rowData(2, 20));
+        long mainSnapshotTime = 
mainTable.snapshotManager().snapshot(2).timeMillis();
+        mainTable.createBranch("bc", "base");
+        while (System.currentTimeMillis() <= mainSnapshotTime) {
+            Thread.yield();
+        }
+        FileStoreTable branchTable = mainTable.switchToBranch("bc");
+        writeDataIntoTable(branchTable, 2, rowData(3, 30));
+
+        FallbackReadFileStoreTable table =
+                new FallbackReadFileStoreTable(mainTable, branchTable, true);
+        FileStoreTable versioned =
+                
table.copy(Collections.singletonMap(CoreOptions.SCAN_VERSION.key(), "2"));
+
+        assertThat(readAndCollect((FallbackReadFileStoreTable) versioned, scan 
-> {}))
+                .containsExactlyInAnyOrder(Pair.of(1, 10), Pair.of(2, 20));
+    }
+
     private DataTableScan queryAuthScan(DataTableScan delegate, 
TableQueryAuthResult authResult) {
         DataTableScan scan =
                 Mockito.mock(DataTableScan.class, 
AdditionalAnswers.delegatesTo(delegate));

Reply via email to