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 b6f2ea857 [core] Fix deserialization of sequenceNumber in lookup 
(#2831)
b6f2ea857 is described below

commit b6f2ea8572df08de8f83331df70270cd93112a2b
Author: Zouxxyy <[email protected]>
AuthorDate: Thu Feb 1 11:31:34 2024 +0800

    [core] Fix deserialization of sequenceNumber in lookup (#2831)
---
 .../java/org/apache/paimon/mergetree/LookupLevels.java   |  6 +++---
 .../java/org/apache/paimon/mergetree/LookupUtils.java    |  2 +-
 .../main/java/org/apache/paimon/mergetree/SortedRun.java |  6 +++++-
 .../org/apache/paimon/mergetree/LookupLevelsTest.java    | 16 ++++++++++------
 4 files changed, 19 insertions(+), 11 deletions(-)

diff --git 
a/paimon-core/src/main/java/org/apache/paimon/mergetree/LookupLevels.java 
b/paimon-core/src/main/java/org/apache/paimon/mergetree/LookupLevels.java
index 5420d42a9..c35bda970 100644
--- a/paimon-core/src/main/java/org/apache/paimon/mergetree/LookupLevels.java
+++ b/paimon-core/src/main/java/org/apache/paimon/mergetree/LookupLevels.java
@@ -133,19 +133,19 @@ public class LookupLevels implements 
Levels.DropFileCallback, Closeable {
     private KeyValue lookup(InternalRow key, DataFileMeta file) throws 
IOException {
         LookupFile lookupFile = lookupFiles.getIfPresent(file.fileName());
 
-        byte[] keyBytes = keySerializer.serializeToBytes(key);
-
         while (lookupFile == null || lookupFile.isClosed) {
             lookupFile = createLookupFile(file);
             lookupFiles.put(file.fileName(), lookupFile);
         }
 
+        byte[] keyBytes = keySerializer.serializeToBytes(key);
         byte[] valueBytes = lookupFile.get(keyBytes);
         if (valueBytes == null) {
             return null;
         }
         InternalRow value = valueSerializer.deserialize(valueBytes);
-        long sequenceNumber = 
MemorySegment.wrap(valueBytes).getLong(valueBytes.length - 9);
+        long sequenceNumber =
+                
MemorySegment.wrap(valueBytes).getLongBigEndian(valueBytes.length - 9);
         RowKind rowKind = RowKind.fromByteValue(valueBytes[valueBytes.length - 
1]);
         return new KeyValue()
                 .replace(key, sequenceNumber, rowKind, value)
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 a71e0b8fa..d048bfe0f 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
@@ -81,7 +81,7 @@ public class LookupUtils {
             SortedRun level,
             BiFunctionWithIOE<InternalRow, DataFileMeta, T> lookup)
             throws IOException {
-        if (!level.nonEmpty()) {
+        if (level.isEmpty()) {
             return null;
         }
         List<DataFileMeta> files = level.files();
diff --git 
a/paimon-core/src/main/java/org/apache/paimon/mergetree/SortedRun.java 
b/paimon-core/src/main/java/org/apache/paimon/mergetree/SortedRun.java
index 831499aec..54b2893a0 100644
--- a/paimon-core/src/main/java/org/apache/paimon/mergetree/SortedRun.java
+++ b/paimon-core/src/main/java/org/apache/paimon/mergetree/SortedRun.java
@@ -72,8 +72,12 @@ public class SortedRun {
         return files;
     }
 
+    public boolean isEmpty() {
+        return files.isEmpty();
+    }
+
     public boolean nonEmpty() {
-        return !files.isEmpty();
+        return !isEmpty();
     }
 
     public long totalSize() {
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 836f8f874..69dcf5062 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
@@ -86,29 +86,29 @@ public class LookupLevelsTest {
                 new Levels(
                         comparator,
                         Arrays.asList(
-                                newFile(1, kv(1, 11), kv(3, 33), kv(5, 5)),
-                                newFile(2, kv(2, 22), kv(5, 55))),
+                                newFile(1, kv(1, 11, 1), kv(3, 33, 2), kv(5, 
5, 3)),
+                                newFile(2, kv(2, 22, 4), kv(5, 55, 5))),
                         3);
         LookupLevels lookupLevels = createLookupLevels(levels, 
MemorySize.ofMebiBytes(10));
 
         // only in level 1
         KeyValue kv = lookupLevels.lookup(row(1), 1);
         assertThat(kv).isNotNull();
-        assertThat(kv.sequenceNumber()).isEqualTo(UNKNOWN_SEQUENCE);
+        assertThat(kv.sequenceNumber()).isEqualTo(1);
         assertThat(kv.level()).isEqualTo(1);
         assertThat(kv.value().getInt(1)).isEqualTo(11);
 
         // only in level 2
         kv = lookupLevels.lookup(row(2), 1);
         assertThat(kv).isNotNull();
-        assertThat(kv.sequenceNumber()).isEqualTo(UNKNOWN_SEQUENCE);
+        assertThat(kv.sequenceNumber()).isEqualTo(4);
         assertThat(kv.level()).isEqualTo(2);
         assertThat(kv.value().getInt(1)).isEqualTo(22);
 
         // both in level 1 and level 2
         kv = lookupLevels.lookup(row(5), 1);
         assertThat(kv).isNotNull();
-        assertThat(kv.sequenceNumber()).isEqualTo(UNKNOWN_SEQUENCE);
+        assertThat(kv.sequenceNumber()).isEqualTo(3);
         assertThat(kv.level()).isEqualTo(1);
         assertThat(kv.value().getInt(1)).isEqualTo(5);
 
@@ -233,8 +233,12 @@ public class LookupLevelsTest {
     }
 
     private KeyValue kv(int key, int value) {
+        return kv(key, value, UNKNOWN_SEQUENCE);
+    }
+
+    private KeyValue kv(int key, int value, long seqNumber) {
         return new KeyValue()
-                .replace(GenericRow.of(key), RowKind.INSERT, 
GenericRow.of(key, value));
+                .replace(GenericRow.of(key), seqNumber, RowKind.INSERT, 
GenericRow.of(key, value));
     }
 
     private DataFileMeta newFile(int level, KeyValue... records) throws 
IOException {

Reply via email to