From ed87567e56bfd0001476aa3b22c42ba13bb46c44 Mon Sep 17 00:00:00 2001 From: Jackie Tien Date: Sat, 2 Sep 2023 08:36:02 +0800 Subject: [PATCH] Fix possible NPE while executing show cluster or show cluster details --- .../metadata/ShowClusterDetailsTask.java | 54 +++++++++++++++---- .../config/metadata/ShowClusterTask.java | 30 +++++++++-- 2 files changed, 70 insertions(+), 14 deletions(-) diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/ShowClusterDetailsTask.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/ShowClusterDetailsTask.java index 65b7b3cf8a..7c072de074 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/ShowClusterDetailsTask.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/ShowClusterDetailsTask.java @@ -62,8 +62,16 @@ public class ShowClusterDetailsTask implements IConfigTask { builder.getTimeColumnBuilder().writeLong(0L); builder.getColumnBuilder(0).writeInt(nodeId); builder.getColumnBuilder(1).writeBinary(new Binary(NODE_TYPE_CONFIG_NODE)); - builder.getColumnBuilder(2).writeBinary(new Binary(nodeStatus)); - builder.getColumnBuilder(3).writeBinary(new Binary(internalAddress)); + if (nodeStatus == null) { + builder.getColumnBuilder(2).appendNull(); + } else { + builder.getColumnBuilder(2).writeBinary(new Binary(nodeStatus)); + } + if (internalAddress == null) { + builder.getColumnBuilder(3).appendNull(); + } else { + builder.getColumnBuilder(3).writeBinary(new Binary(internalAddress)); + } builder.getColumnBuilder(4).writeInt(internalPort); builder.getColumnBuilder(5).writeBinary(new Binary(Integer.toString(configConsensusPort))); builder.getColumnBuilder(6).writeBinary(new Binary("")); @@ -71,8 +79,16 @@ public class ShowClusterDetailsTask implements IConfigTask { builder.getColumnBuilder(8).writeBinary(new Binary("")); builder.getColumnBuilder(9).writeBinary(new Binary("")); builder.getColumnBuilder(10).writeBinary(new Binary("")); - builder.getColumnBuilder(11).writeBinary(new Binary(versionInfo.getVersion())); - builder.getColumnBuilder(12).writeBinary(new Binary(versionInfo.getBuildInfo())); + if (versionInfo == null || versionInfo.getVersion() == null) { + builder.getColumnBuilder(11).appendNull(); + } else { + builder.getColumnBuilder(11).writeBinary(new Binary(versionInfo.getVersion())); + } + if (versionInfo == null || versionInfo.getBuildInfo() == null) { + builder.getColumnBuilder(12).appendNull(); + } else { + builder.getColumnBuilder(12).writeBinary(new Binary(versionInfo.getBuildInfo())); + } builder.declarePosition(); } @@ -92,17 +108,37 @@ public class ShowClusterDetailsTask implements IConfigTask { builder.getTimeColumnBuilder().writeLong(0L); builder.getColumnBuilder(0).writeInt(nodeId); builder.getColumnBuilder(1).writeBinary(new Binary(NODE_TYPE_DATA_NODE)); - builder.getColumnBuilder(2).writeBinary(new Binary(nodeStatus)); - builder.getColumnBuilder(3).writeBinary(new Binary(internalAddress)); + if (nodeStatus == null) { + builder.getColumnBuilder(2).appendNull(); + } else { + builder.getColumnBuilder(2).writeBinary(new Binary(nodeStatus)); + } + if (internalAddress == null) { + builder.getColumnBuilder(3).appendNull(); + } else { + builder.getColumnBuilder(3).writeBinary(new Binary(internalAddress)); + } builder.getColumnBuilder(4).writeInt(internalPort); builder.getColumnBuilder(5).writeBinary(new Binary("")); - builder.getColumnBuilder(6).writeBinary(new Binary(rpcAddress)); + if (rpcAddress == null) { + builder.getColumnBuilder(6).appendNull(); + } else { + builder.getColumnBuilder(6).writeBinary(new Binary(rpcAddress)); + } builder.getColumnBuilder(7).writeBinary(new Binary(Integer.toString(rpcPort))); builder.getColumnBuilder(8).writeBinary(new Binary(Integer.toString(dataConsensusPort))); builder.getColumnBuilder(9).writeBinary(new Binary(Integer.toString(schemaConsensusPort))); builder.getColumnBuilder(10).writeBinary(new Binary(Integer.toString(mppPort))); - builder.getColumnBuilder(11).writeBinary(new Binary(versionInfo.getVersion())); - builder.getColumnBuilder(12).writeBinary(new Binary(versionInfo.getBuildInfo())); + if (versionInfo == null || versionInfo.getVersion() == null) { + builder.getColumnBuilder(11).appendNull(); + } else { + builder.getColumnBuilder(11).writeBinary(new Binary(versionInfo.getVersion())); + } + if (versionInfo == null || versionInfo.getBuildInfo() == null) { + builder.getColumnBuilder(12).appendNull(); + } else { + builder.getColumnBuilder(12).writeBinary(new Binary(versionInfo.getBuildInfo())); + } builder.declarePosition(); } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/ShowClusterTask.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/ShowClusterTask.java index 65ebb459a9..7e85fa62d6 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/ShowClusterTask.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/ShowClusterTask.java @@ -67,12 +67,32 @@ public class ShowClusterTask implements IConfigTask { TNodeVersionInfo versionInfo) { builder.getTimeColumnBuilder().writeLong(0L); builder.getColumnBuilder(0).writeInt(nodeId); - builder.getColumnBuilder(1).writeBinary(new Binary(nodeType)); - builder.getColumnBuilder(2).writeBinary(new Binary(nodeStatus)); - builder.getColumnBuilder(3).writeBinary(new Binary(hostAddress)); + if (nodeType == null) { + builder.getColumnBuilder(1).appendNull(); + } else { + builder.getColumnBuilder(1).writeBinary(new Binary(nodeType)); + } + if (nodeStatus == null) { + builder.getColumnBuilder(2).appendNull(); + } else { + builder.getColumnBuilder(2).writeBinary(new Binary(nodeStatus)); + } + if (hostAddress == null) { + builder.getColumnBuilder(3).appendNull(); + } else { + builder.getColumnBuilder(3).writeBinary(new Binary(hostAddress)); + } builder.getColumnBuilder(4).writeInt(port); - builder.getColumnBuilder(5).writeBinary(new Binary(versionInfo.getVersion())); - builder.getColumnBuilder(6).writeBinary(new Binary(versionInfo.getBuildInfo())); + if (versionInfo == null || versionInfo.getVersion() == null) { + builder.getColumnBuilder(5).appendNull(); + } else { + builder.getColumnBuilder(5).writeBinary(new Binary(versionInfo.getVersion())); + } + if (versionInfo == null || versionInfo.getBuildInfo() == null) { + builder.getColumnBuilder(6).appendNull(); + } else { + builder.getColumnBuilder(6).writeBinary(new Binary(versionInfo.getBuildInfo())); + } builder.declarePosition(); } -- GitLab