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

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


The following commit(s) were added to refs/heads/trunk by this push:
     new 3ddb62316f KAFKA-14012: Add warning to closeQuietly documentation 
about method references of null objects (#12321)
3ddb62316f is described below

commit 3ddb62316f287d74b9649e1821c62fe8f68bc6e6
Author: vamossagar12 <[email protected]>
AuthorDate: Fri Jul 29 02:14:19 2022 +0530

    KAFKA-14012: Add warning to closeQuietly documentation about method 
references of null objects (#12321)
    
    Reviewers: Kvicii <[email protected]>, Chris Egerton 
<[email protected]>
---
 .../java/org/apache/kafka/common/utils/Utils.java     | 19 +++++++++++++++++++
 .../connect/runtime/AbstractWorkerSourceTask.java     |  3 ++-
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/clients/src/main/java/org/apache/kafka/common/utils/Utils.java 
b/clients/src/main/java/org/apache/kafka/common/utils/Utils.java
index af71e3ecd3..7d84167cf2 100755
--- a/clients/src/main/java/org/apache/kafka/common/utils/Utils.java
+++ b/clients/src/main/java/org/apache/kafka/common/utils/Utils.java
@@ -998,6 +998,14 @@ public final class Utils {
 
     /**
      * Closes {@code closeable} and if an exception is thrown, it is logged at 
the WARN level.
+     * <b>Be cautious when passing method references as an argument.</b> For 
example:
+     * <p>
+     * {@code closeQuietly(task::stop, "source task");}
+     * <p>
+     * Although this method gracefully handles null {@link AutoCloseable} 
objects, attempts to take a method
+     * reference from a null object will result in a {@link 
NullPointerException}. In the example code above,
+     * it would be the caller's responsibility to ensure that {@code task} was 
non-null before attempting to
+     * use a method reference from it.
      */
     public static void closeQuietly(AutoCloseable closeable, String name) {
         if (closeable != null) {
@@ -1009,6 +1017,17 @@ public final class Utils {
         }
     }
 
+    /**
+    * Closes {@code closeable} and if an exception is thrown, it is registered 
to the firstException parameter.
+    * <b>Be cautious when passing method references as an argument.</b> For 
example:
+    * <p>
+    * {@code closeQuietly(task::stop, "source task");}
+    * <p>
+    * Although this method gracefully handles null {@link AutoCloseable} 
objects, attempts to take a method
+    * reference from a null object will result in a {@link 
NullPointerException}. In the example code above,
+    * it would be the caller's responsibility to ensure that {@code task} was 
non-null before attempting to
+    * use a method reference from it.
+    */
     public static void closeQuietly(AutoCloseable closeable, String name, 
AtomicReference<Throwable> firstException) {
         if (closeable != null) {
             try {
diff --git 
a/connect/runtime/src/main/java/org/apache/kafka/connect/runtime/AbstractWorkerSourceTask.java
 
b/connect/runtime/src/main/java/org/apache/kafka/connect/runtime/AbstractWorkerSourceTask.java
index a2a3fce9fe..693ef510f1 100644
--- 
a/connect/runtime/src/main/java/org/apache/kafka/connect/runtime/AbstractWorkerSourceTask.java
+++ 
b/connect/runtime/src/main/java/org/apache/kafka/connect/runtime/AbstractWorkerSourceTask.java
@@ -59,6 +59,7 @@ import org.slf4j.LoggerFactory;
 import java.time.Duration;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.Executor;
@@ -235,7 +236,7 @@ public abstract class AbstractWorkerSourceTask extends 
WorkerTask {
         this.admin = admin;
         this.offsetReader = offsetReader;
         this.offsetWriter = offsetWriter;
-        this.offsetStore = offsetStore;
+        this.offsetStore = Objects.requireNonNull(offsetStore, "offset store 
cannot be null for source tasks");
         this.closeExecutor = closeExecutor;
         this.sourceTaskContext = sourceTaskContext;
 

Reply via email to