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

justinchen pushed a commit to branch lvc-13
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/lvc-13 by this push:
     new 3e83d2caccb Pipe: Fixed the bug that lower version tablet may cause 
NPE when sent to 2.x version & The temporary exception may be wrongly reported 
(#16843)
3e83d2caccb is described below

commit 3e83d2caccb911122f1d0c52003f6939396b39fc
Author: Caideyipi <[email protected]>
AuthorDate: Tue Dec 2 14:14:30 2025 +0800

    Pipe: Fixed the bug that lower version tablet may cause NPE when sent to 
2.x version & The temporary exception may be wrongly reported (#16843)
    
    * older_version_compatibility
    
    * protect
    
    * dependency
---
 .../db/pipe/agent/task/subtask/processor/PipeProcessorSubtask.java | 7 +++++++
 .../org/apache/iotdb/db/pipe/sink/util/PipeTabletEventSorter.java  | 5 +++++
 2 files changed, 12 insertions(+)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/agent/task/subtask/processor/PipeProcessorSubtask.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/agent/task/subtask/processor/PipeProcessorSubtask.java
index d39feb96fe0..bffe1c38cf8 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/agent/task/subtask/processor/PipeProcessorSubtask.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/agent/task/subtask/processor/PipeProcessorSubtask.java
@@ -43,6 +43,7 @@ import 
org.apache.iotdb.pipe.api.event.dml.insertion.TsFileInsertionEvent;
 import org.apache.iotdb.pipe.api.exception.PipeException;
 
 import com.google.common.util.concurrent.ListeningExecutorService;
+import org.apache.tsfile.external.commons.lang3.exception.ExceptionUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -192,6 +193,12 @@ public class PipeProcessorSubtask extends 
PipeReportableSubtask {
           e);
       return false;
     } catch (final Exception e) {
+      if (ExceptionUtils.getRootCause(e) instanceof 
PipeRuntimeOutOfMemoryCriticalException) {
+        LOGGER.info(
+            "Temporarily out of memory in pipe event processing, will wait for 
the memory to release.",
+            e);
+        return false;
+      }
       if (!isClosed.get()) {
         throw new PipeException(
             String.format(
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/sink/util/PipeTabletEventSorter.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/sink/util/PipeTabletEventSorter.java
index 9c1dec9da33..69c17c1c5e2 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/sink/util/PipeTabletEventSorter.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/sink/util/PipeTabletEventSorter.java
@@ -29,6 +29,7 @@ import org.apache.tsfile.write.schema.IMeasurementSchema;
 import java.time.LocalDate;
 import java.util.Arrays;
 import java.util.Comparator;
+import java.util.Objects;
 
 public class PipeTabletEventSorter {
 
@@ -155,6 +156,10 @@ public class PipeTabletEventSorter {
       final TSDataType dataType,
       final BitMap originalBitMap,
       final BitMap deDuplicatedBitMap) {
+    // Older version's sender may contain null values, we need to cover this 
case
+    if (Objects.isNull(valueList)) {
+      return null;
+    }
     switch (dataType) {
       case BOOLEAN:
         final boolean[] boolValues = (boolean[]) valueList;

Reply via email to