This is an automated email from the ASF dual-hosted git repository.

lzljs3620320 pushed a commit to branch release-0.8
in repository https://gitbox.apache.org/repos/asf/paimon.git

commit 688d12adfc9c4d91d9be5edc761ad59e47ceb664
Author: Jingsong <[email protected]>
AuthorDate: Tue May 14 17:02:51 2024 +0800

    [core] Avoid potential NPE in FileStoreCommitImpl and TagAutoCreation
---
 paimon-core/src/main/java/org/apache/paimon/Snapshot.java         | 1 +
 .../java/org/apache/paimon/operation/FileStoreCommitImpl.java     | 5 ++++-
 .../src/main/java/org/apache/paimon/tag/TagAutoCreation.java      | 8 ++++++--
 3 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/paimon-core/src/main/java/org/apache/paimon/Snapshot.java 
b/paimon-core/src/main/java/org/apache/paimon/Snapshot.java
index 20d414092..6c2656d39 100644
--- a/paimon-core/src/main/java/org/apache/paimon/Snapshot.java
+++ b/paimon-core/src/main/java/org/apache/paimon/Snapshot.java
@@ -316,6 +316,7 @@ public class Snapshot {
     }
 
     @JsonGetter(FIELD_LOG_OFFSETS)
+    @Nullable
     public Map<Integer, Long> logOffsets() {
         return logOffsets;
     }
diff --git 
a/paimon-core/src/main/java/org/apache/paimon/operation/FileStoreCommitImpl.java
 
b/paimon-core/src/main/java/org/apache/paimon/operation/FileStoreCommitImpl.java
index be5255a36..dab336b81 100644
--- 
a/paimon-core/src/main/java/org/apache/paimon/operation/FileStoreCommitImpl.java
+++ 
b/paimon-core/src/main/java/org/apache/paimon/operation/FileStoreCommitImpl.java
@@ -793,7 +793,10 @@ public class FileStoreCommitImpl implements 
FileStoreCommit {
                 oldMetas.addAll(previousManifests);
                 // read the last snapshot to complete the bucket's offsets 
when logOffsets does not
                 // contain all buckets
-                latestSnapshot.logOffsets().forEach(logOffsets::putIfAbsent);
+                Map<Integer, Long> latestLogOffsets = 
latestSnapshot.logOffsets();
+                if (latestLogOffsets != null) {
+                    latestLogOffsets.forEach(logOffsets::putIfAbsent);
+                }
                 Long latestWatermark = latestSnapshot.watermark();
                 if (latestWatermark != null) {
                     currentWatermark =
diff --git 
a/paimon-core/src/main/java/org/apache/paimon/tag/TagAutoCreation.java 
b/paimon-core/src/main/java/org/apache/paimon/tag/TagAutoCreation.java
index 60f113761..af7947925 100644
--- a/paimon-core/src/main/java/org/apache/paimon/tag/TagAutoCreation.java
+++ b/paimon-core/src/main/java/org/apache/paimon/tag/TagAutoCreation.java
@@ -109,10 +109,14 @@ public class TagAutoCreation {
                 return false;
             }
 
+            Long watermark = latestSnapshot.watermark();
+            if (watermark == null) {
+                return false;
+            }
+
             LocalDateTime snapshotTime =
                     LocalDateTime.ofInstant(
-                            Instant.ofEpochMilli(latestSnapshot.watermark()),
-                            ZoneId.systemDefault());
+                            Instant.ofEpochMilli(watermark), 
ZoneId.systemDefault());
 
             return isAfterOrEqual(LocalDateTime.now().minus(idlenessTimeout), 
snapshotTime);
         } else if (timeExtractor instanceof ProcessTimeExtractor) {

Reply via email to