From dbf0444ec12c1fbe8aee89ee9c05e24c22608108 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=99=9F=20Wu=20Sheng?= Date: Tue, 30 Oct 2018 12:17:17 +0800 Subject: [PATCH] Fix NPE in protobuf and illegal query parameter. (#1847) --- .../oap/server/core/query/MetricQueryService.java | 5 +++++ .../oap/server/core/register/EndpointInventory.java | 12 ++++++++---- .../core/register/NetworkAddressInventory.java | 3 ++- .../core/register/ServiceInstanceInventory.java | 11 ++++++----- .../oap/server/core/register/ServiceInventory.java | 3 ++- .../oap/server/library/util/StringUtils.java | 4 ++++ 6 files changed, 27 insertions(+), 11 deletions(-) diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetricQueryService.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetricQueryService.java index 1b10baf32b..cd83c2f204 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetricQueryService.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetricQueryService.java @@ -31,6 +31,7 @@ import org.apache.skywalking.oap.server.core.storage.annotation.ValueColumnIds; import org.apache.skywalking.oap.server.core.storage.query.IMetricQueryDAO; import org.apache.skywalking.oap.server.library.module.*; import org.apache.skywalking.oap.server.library.module.Service; +import org.apache.skywalking.oap.server.library.util.CollectionUtils; import org.slf4j.*; /** @@ -56,6 +57,10 @@ public class MetricQueryService implements Service { public IntValues getValues(final String indName, final List ids, final Step step, final long startTB, final long endTB) throws IOException { + if (CollectionUtils.isEmpty(ids)) { + throw new RuntimeException("IDs can't be null"); + } + Where where = new Where(); KeyValues intKeyValues = new KeyValues(); intKeyValues.setKey(Indicator.ENTITY_ID); diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/EndpointInventory.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/EndpointInventory.java index 029e19232b..3d330f86e1 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/EndpointInventory.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/EndpointInventory.java @@ -18,15 +18,19 @@ package org.apache.skywalking.oap.server.core.register; -import java.util.*; -import lombok.*; +import java.util.HashMap; +import java.util.Map; +import lombok.Getter; +import lombok.Setter; import org.apache.skywalking.oap.server.core.Const; import org.apache.skywalking.oap.server.core.register.annotation.InventoryType; import org.apache.skywalking.oap.server.core.remote.annotation.StreamData; import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData; import org.apache.skywalking.oap.server.core.source.Scope; import org.apache.skywalking.oap.server.core.storage.StorageBuilder; -import org.apache.skywalking.oap.server.core.storage.annotation.*; +import org.apache.skywalking.oap.server.core.storage.annotation.Column; +import org.apache.skywalking.oap.server.core.storage.annotation.StorageEntity; +import org.apache.skywalking.oap.server.library.util.StringUtils; /** * @author peng-yongsheng @@ -87,7 +91,7 @@ public class EndpointInventory extends RegisterSource { remoteBuilder.addDataLongs(getRegisterTime()); remoteBuilder.addDataLongs(getHeartbeatTime()); - remoteBuilder.addDataStrings(name); + remoteBuilder.addDataStrings(StringUtils.getOrDefault(name, Const.EMPTY_STRING)); return remoteBuilder; } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/NetworkAddressInventory.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/NetworkAddressInventory.java index 2ac68160af..cf465b68c3 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/NetworkAddressInventory.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/NetworkAddressInventory.java @@ -27,6 +27,7 @@ import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData; import org.apache.skywalking.oap.server.core.source.Scope; import org.apache.skywalking.oap.server.core.storage.StorageBuilder; import org.apache.skywalking.oap.server.core.storage.annotation.*; +import org.apache.skywalking.oap.server.library.util.StringUtils; /** * @author peng-yongsheng @@ -87,7 +88,7 @@ public class NetworkAddressInventory extends RegisterSource { remoteBuilder.addDataLongs(getRegisterTime()); remoteBuilder.addDataLongs(getHeartbeatTime()); - remoteBuilder.addDataStrings(name); + remoteBuilder.addDataStrings(StringUtils.getOrDefault(name, Const.EMPTY_STRING)); return remoteBuilder; } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/ServiceInstanceInventory.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/ServiceInstanceInventory.java index a476017695..519a7d2e35 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/ServiceInstanceInventory.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/ServiceInstanceInventory.java @@ -30,6 +30,7 @@ import org.apache.skywalking.oap.server.core.source.Scope; import org.apache.skywalking.oap.server.core.storage.StorageBuilder; import org.apache.skywalking.oap.server.core.storage.annotation.*; import org.apache.skywalking.oap.server.library.util.BooleanUtils; +import org.apache.skywalking.oap.server.library.util.StringUtils; /** * @author peng-yongsheng @@ -122,11 +123,11 @@ public class ServiceInstanceInventory extends RegisterSource { remoteBuilder.addDataLongs(getRegisterTime()); remoteBuilder.addDataLongs(getHeartbeatTime()); - remoteBuilder.addDataStrings(name); - remoteBuilder.addDataStrings(osName); - remoteBuilder.addDataStrings(hostName); - remoteBuilder.addDataStrings(ipv4s); - remoteBuilder.addDataStrings(instanceUUID); + remoteBuilder.addDataStrings(StringUtils.getOrDefault(name, Const.EMPTY_STRING)); + remoteBuilder.addDataStrings(StringUtils.getOrDefault(osName, Const.EMPTY_STRING)); + remoteBuilder.addDataStrings(StringUtils.getOrDefault(hostName, Const.EMPTY_STRING)); + remoteBuilder.addDataStrings(StringUtils.getOrDefault(ipv4s, Const.EMPTY_STRING)); + remoteBuilder.addDataStrings(StringUtils.getOrDefault(instanceUUID, Const.EMPTY_STRING)); return remoteBuilder; } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/ServiceInventory.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/ServiceInventory.java index 460e0b97cc..c2c219975c 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/ServiceInventory.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/ServiceInventory.java @@ -28,6 +28,7 @@ import org.apache.skywalking.oap.server.core.source.Scope; import org.apache.skywalking.oap.server.core.storage.StorageBuilder; import org.apache.skywalking.oap.server.core.storage.annotation.*; import org.apache.skywalking.oap.server.library.util.BooleanUtils; +import org.apache.skywalking.oap.server.library.util.StringUtils; /** * @author peng-yongsheng @@ -105,7 +106,7 @@ public class ServiceInventory extends RegisterSource { remoteBuilder.addDataLongs(getHeartbeatTime()); remoteBuilder.addDataLongs(getMappingLastUpdateTime()); - remoteBuilder.addDataStrings(name); + remoteBuilder.addDataStrings(StringUtils.getOrDefault(name, Const.EMPTY_STRING)); return remoteBuilder; } diff --git a/oap-server/server-library/library-util/src/main/java/org/apache/skywalking/oap/server/library/util/StringUtils.java b/oap-server/server-library/library-util/src/main/java/org/apache/skywalking/oap/server/library/util/StringUtils.java index 34d84ca1ba..2d425c46b9 100644 --- a/oap-server/server-library/library-util/src/main/java/org/apache/skywalking/oap/server/library/util/StringUtils.java +++ b/oap-server/server-library/library-util/src/main/java/org/apache/skywalking/oap/server/library/util/StringUtils.java @@ -32,4 +32,8 @@ public class StringUtils { public static boolean isNotEmpty(Object str) { return !isEmpty(str); } + + public static String getOrDefault(String value, String defaultValue) { + return value == null ? defaultValue : value; + } } -- GitLab