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 b7a9dea4c [core] HashBucketAssigner should copy partition BinaryRow
b7a9dea4c is described below

commit b7a9dea4c2d839a2e0c35f236a8293edc5ce9cb7
Author: JingsongLi <[email protected]>
AuthorDate: Mon Jul 10 11:29:32 2023 +0800

    [core] HashBucketAssigner should copy partition BinaryRow
---
 .../java/org/apache/paimon/index/HashBucketAssigner.java |  7 ++++++-
 .../org/apache/paimon/index/HashBucketAssignerTest.java  | 16 ++++++++++++++++
 2 files changed, 22 insertions(+), 1 deletion(-)

diff --git 
a/paimon-core/src/main/java/org/apache/paimon/index/HashBucketAssigner.java 
b/paimon-core/src/main/java/org/apache/paimon/index/HashBucketAssigner.java
index 934b2df97..787af984e 100644
--- a/paimon-core/src/main/java/org/apache/paimon/index/HashBucketAssigner.java
+++ b/paimon-core/src/main/java/org/apache/paimon/index/HashBucketAssigner.java
@@ -72,7 +72,12 @@ public class HashBucketAssigner {
                 recordAssignId,
                 assignId);
 
-        PartitionIndex index = partitionIndex.computeIfAbsent(partition, 
this::loadIndex);
+        PartitionIndex index = this.partitionIndex.get(partition);
+        if (index == null) {
+            partition = partition.copy();
+            index = loadIndex(partition);
+            this.partitionIndex.put(partition, index);
+        }
         return index.assign(hash, (bucket) -> computeAssignId(bucket) == 
assignId);
     }
 
diff --git 
a/paimon-core/src/test/java/org/apache/paimon/index/HashBucketAssignerTest.java 
b/paimon-core/src/test/java/org/apache/paimon/index/HashBucketAssignerTest.java
index d79db1188..34e5052a1 100644
--- 
a/paimon-core/src/test/java/org/apache/paimon/index/HashBucketAssignerTest.java
+++ 
b/paimon-core/src/test/java/org/apache/paimon/index/HashBucketAssignerTest.java
@@ -79,6 +79,22 @@ public class HashBucketAssignerTest extends 
PrimaryKeyTableTestBase {
                 .hasMessageContaining("This is a bug, record assign id");
     }
 
+    @Test
+    public void testPartitionCopy() {
+        HashBucketAssigner assigner = createAssigner(1, 0);
+
+        BinaryRow partition = row(1);
+        assertThat(assigner.assign(partition, 0)).isEqualTo(0);
+        assertThat(assigner.assign(partition, 1)).isEqualTo(0);
+
+        partition.setInt(0, 2);
+        assertThat(assigner.assign(partition, 5)).isEqualTo(0);
+        assertThat(assigner.assign(partition, 6)).isEqualTo(0);
+
+        assertThat(assigner.currentPartitions()).contains(row(1));
+        assertThat(assigner.currentPartitions()).contains(row(2));
+    }
+
     private CommitMessage createCommitMessage(BinaryRow partition, int bucket, 
IndexFileMeta file) {
         return new CommitMessageImpl(
                 partition,

Reply via email to