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 e2c265be3 [core] Do not create new Index file if there is no change 
(#1522)
e2c265be3 is described below

commit e2c265be3abc7b468c23ac728cb2e9f95be817a2
Author: Jingsong Lee <[email protected]>
AuthorDate: Mon Jul 10 14:12:17 2023 +0800

    [core] Do not create new Index file if there is no change (#1522)
---
 .../src/main/java/org/apache/paimon/utils/IntHashSet.java |  4 ++--
 .../test/java/org/apache/paimon/utils/IntHashSetTest.java | 10 +++++++++-
 .../java/org/apache/paimon/index/HashIndexMaintainer.java |  6 ++++--
 .../org/apache/paimon/index/HashIndexMaintainerTest.java  | 15 +++++++++++++++
 4 files changed, 30 insertions(+), 5 deletions(-)

diff --git 
a/paimon-common/src/main/java/org/apache/paimon/utils/IntHashSet.java 
b/paimon-common/src/main/java/org/apache/paimon/utils/IntHashSet.java
index 2d73bc6d6..472b84b8f 100644
--- a/paimon-common/src/main/java/org/apache/paimon/utils/IntHashSet.java
+++ b/paimon-common/src/main/java/org/apache/paimon/utils/IntHashSet.java
@@ -35,8 +35,8 @@ public class IntHashSet {
         this.set = new IntOpenHashSet(expected);
     }
 
-    public void add(int value) {
-        set.add(value);
+    public boolean add(int value) {
+        return set.add(value);
     }
 
     public int size() {
diff --git 
a/paimon-common/src/test/java/org/apache/paimon/utils/IntHashSetTest.java 
b/paimon-common/src/test/java/org/apache/paimon/utils/IntHashSetTest.java
index 25e3e033f..051598f33 100644
--- a/paimon-common/src/test/java/org/apache/paimon/utils/IntHashSetTest.java
+++ b/paimon-common/src/test/java/org/apache/paimon/utils/IntHashSetTest.java
@@ -40,10 +40,18 @@ public class IntHashSetTest {
             values.add(0);
             values.add(-1);
             values.add(1);
+            values.add(Integer.MAX_VALUE);
         }
 
         IntHashSet set = new IntHashSet();
-        values.forEach(set::add);
+        for (Integer i : values) {
+            boolean add = set.add(i);
+            assertThat(add).isTrue();
+        }
+        for (Integer i : values) {
+            boolean add = set.add(i);
+            assertThat(add).isFalse();
+        }
 
         int[] expected = 
values.stream().mapToInt(Integer::intValue).sorted().toArray();
         assertThat(set.toInts()).containsExactlyInAnyOrder(expected);
diff --git 
a/paimon-core/src/main/java/org/apache/paimon/index/HashIndexMaintainer.java 
b/paimon-core/src/main/java/org/apache/paimon/index/HashIndexMaintainer.java
index 644be637f..998c72399 100644
--- a/paimon-core/src/main/java/org/apache/paimon/index/HashIndexMaintainer.java
+++ b/paimon-core/src/main/java/org/apache/paimon/index/HashIndexMaintainer.java
@@ -76,8 +76,10 @@ public class HashIndexMaintainer implements 
IndexMaintainer<KeyValue> {
         if (!(key instanceof BinaryRow)) {
             throw new IllegalArgumentException("Unsupported key type: " + 
key.getClass());
         }
-        hashcode.add(key.hashCode());
-        modified = true;
+        boolean changed = hashcode.add(key.hashCode());
+        if (changed) {
+            modified = true;
+        }
     }
 
     @Override
diff --git 
a/paimon-core/src/test/java/org/apache/paimon/index/HashIndexMaintainerTest.java
 
b/paimon-core/src/test/java/org/apache/paimon/index/HashIndexMaintainerTest.java
index 8c646457e..92915b458 100644
--- 
a/paimon-core/src/test/java/org/apache/paimon/index/HashIndexMaintainerTest.java
+++ 
b/paimon-core/src/test/java/org/apache/paimon/index/HashIndexMaintainerTest.java
@@ -123,4 +123,19 @@ public class HashIndexMaintainerTest extends 
PrimaryKeyTableTestBase {
 
         write.close();
     }
+
+    @Test
+    public void testNotCreateNewFile() throws Exception {
+        // commit two partitions
+        write.write(createRow(1, 1, 1, 1));
+        write.write(createRow(2, 2, 2, 2));
+        commit.commit(0, write.prepareCommit(true, 0));
+
+        // same record
+        write.write(createRow(1, 1, 1, 1));
+        List<CommitMessage> commitMessages = write.prepareCommit(true, 1);
+        assertThat(readIndex(commitMessages)).isEmpty();
+
+        write.close();
+    }
 }

Reply via email to