You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kafka.apache.org by sh...@apache.org on 2024/03/06 01:02:08 UTC

(kafka) branch 3.7 updated: KAFKA-16209 : fetchSnapshot might return null if topic is created before v2.8 (#15444)

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

showuon pushed a commit to branch 3.7
in repository https://gitbox.apache.org/repos/asf/kafka.git


The following commit(s) were added to refs/heads/3.7 by this push:
     new 9b254d396e4 KAFKA-16209 : fetchSnapshot might return null if topic is created before v2.8 (#15444)
9b254d396e4 is described below

commit 9b254d396e454de5628aad6dccbbc527a2bed0ae
Author: John Yu <54...@users.noreply.github.com>
AuthorDate: Wed Mar 6 09:00:58 2024 +0800

    KAFKA-16209 : fetchSnapshot might return null if topic is created before v2.8 (#15444)
    
    Change the function with a better way to deal with the NULL pointer exception.
    
    Reviewers: Luke Chen <sh...@gmail.com>
---
 core/src/test/scala/unit/kafka/log/ProducerStateManagerTest.scala   | 6 ++++++
 .../apache/kafka/storage/internals/log/ProducerStateManager.java    | 2 +-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/core/src/test/scala/unit/kafka/log/ProducerStateManagerTest.scala b/core/src/test/scala/unit/kafka/log/ProducerStateManagerTest.scala
index f6e29a73428..0f8dfda4995 100644
--- a/core/src/test/scala/unit/kafka/log/ProducerStateManagerTest.scala
+++ b/core/src/test/scala/unit/kafka/log/ProducerStateManagerTest.scala
@@ -578,6 +578,12 @@ class ProducerStateManagerTest {
     assertTrue(logDir.list().head.nonEmpty, "Snapshot file is empty")
   }
 
+  @Test
+  def testFetchSnapshotEmptySnapShot(): Unit = {
+    val offset = 1
+    assertEquals(Optional.empty(), stateManager.fetchSnapshot(offset))
+  }
+
   @Test
   def testRecoverFromSnapshotUnfinishedTransaction(): Unit = {
     val epoch = 0.toShort
diff --git a/storage/src/main/java/org/apache/kafka/storage/internals/log/ProducerStateManager.java b/storage/src/main/java/org/apache/kafka/storage/internals/log/ProducerStateManager.java
index 6bcafd2d607..73e3e708a5f 100644
--- a/storage/src/main/java/org/apache/kafka/storage/internals/log/ProducerStateManager.java
+++ b/storage/src/main/java/org/apache/kafka/storage/internals/log/ProducerStateManager.java
@@ -605,7 +605,7 @@ public class ProducerStateManager {
     }
 
     public Optional<File> fetchSnapshot(long offset) {
-        return Optional.of(snapshots.get(offset)).map(x -> x.file());
+        return Optional.ofNullable(snapshots.get(offset)).map(x -> x.file());
     }
 
     private Optional<SnapshotFile> oldestSnapshotFile() {