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));