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/incubator-paimon.git
The following commit(s) were added to refs/heads/master by this push:
new f6c8c468c [Bug] Fix the incorrect lookup join result when lookup from
level0 (#2913)
f6c8c468c is described below
commit f6c8c468c9565bf67d95cccabf4c3929f29643ba
Author: Aitozi <[email protected]>
AuthorDate: Tue Feb 27 19:07:10 2024 +0800
[Bug] Fix the incorrect lookup join result when lookup from level0 (#2913)
---
.../org/apache/paimon/mergetree/LookupUtils.java | 11 +++----
.../apache/paimon/mergetree/LookupLevelsTest.java | 35 ++++++++++++++++++++++
2 files changed, 41 insertions(+), 5 deletions(-)
diff --git
a/paimon-core/src/main/java/org/apache/paimon/mergetree/LookupUtils.java
b/paimon-core/src/main/java/org/apache/paimon/mergetree/LookupUtils.java
index d048bfe0f..8ada282a4 100644
--- a/paimon-core/src/main/java/org/apache/paimon/mergetree/LookupUtils.java
+++ b/paimon-core/src/main/java/org/apache/paimon/mergetree/LookupUtils.java
@@ -39,14 +39,15 @@ public class LookupUtils {
BiFunctionWithIOE<InternalRow, SortedRun, T> lookup,
BiFunctionWithIOE<InternalRow, TreeSet<DataFileMeta>, T>
level0Lookup)
throws IOException {
- if (startLevel == 0) {
- return level0Lookup.apply(key, levels.level0());
- }
T result = null;
for (int i = startLevel; i < levels.numberOfLevels(); i++) {
- SortedRun level = levels.runOfLevel(i);
- result = lookup.apply(key, level);
+ if (i == 0) {
+ result = level0Lookup.apply(key, levels.level0());
+ } else {
+ SortedRun level = levels.runOfLevel(i);
+ result = lookup.apply(key, level);
+ }
if (result != null) {
break;
}
diff --git
a/paimon-core/src/test/java/org/apache/paimon/mergetree/LookupLevelsTest.java
b/paimon-core/src/test/java/org/apache/paimon/mergetree/LookupLevelsTest.java
index a959d3413..4dc7504e5 100644
---
a/paimon-core/src/test/java/org/apache/paimon/mergetree/LookupLevelsTest.java
+++
b/paimon-core/src/test/java/org/apache/paimon/mergetree/LookupLevelsTest.java
@@ -215,6 +215,41 @@ public class LookupLevelsTest {
assertThat(kv).isNotNull();
}
+ @Test
+ public void testLookupLevel0() throws Exception {
+ Levels levels =
+ new Levels(
+ comparator,
+ Arrays.asList(
+ newFile(0, kv(1, 0)),
+ newFile(1, kv(1, 11), kv(3, 33), kv(5, 5)),
+ newFile(2, kv(2, 22), kv(5, 55))),
+ 3);
+ LookupLevels lookupLevels = createLookupLevels(levels,
MemorySize.ofMebiBytes(10));
+
+ KeyValue kv = lookupLevels.lookup(row(1), 0);
+ assertThat(kv).isNotNull();
+ assertThat(kv.sequenceNumber()).isEqualTo(UNKNOWN_SEQUENCE);
+ assertThat(kv.level()).isEqualTo(0);
+ assertThat(kv.value().getInt(1)).isEqualTo(0);
+
+ levels =
+ new Levels(
+ comparator,
+ Arrays.asList(
+ newFile(1, kv(1, 11), kv(3, 33), kv(5, 5)),
+ newFile(2, kv(2, 22), kv(5, 55))),
+ 3);
+ lookupLevels = createLookupLevels(levels, MemorySize.ofMebiBytes(10));
+
+ // not in level 0
+ kv = lookupLevels.lookup(row(1), 0);
+ assertThat(kv).isNotNull();
+ assertThat(kv.sequenceNumber()).isEqualTo(UNKNOWN_SEQUENCE);
+ assertThat(kv.level()).isEqualTo(1);
+ assertThat(kv.value().getInt(1)).isEqualTo(11);
+ }
+
private LookupLevels createLookupLevels(Levels levels, MemorySize
maxDiskSize) {
return new LookupLevels(
levels,