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,