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;