You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2021/03/12 12:46:26 UTC
[skywalking] branch master updated: resolve "receiver don't need to
get itself when healthCheck #6515 " (#6538)
This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking.git
The following commit(s) were added to refs/heads/master by this push:
new cc60f15 resolve "receiver don't need to get itself when healthCheck #6515 " (#6538)
cc60f15 is described below
commit cc60f1529fa3cbfba8a7618829bc75bbf3eedc6d
Author: 史精文 <90...@qq.com>
AuthorDate: Fri Mar 12 20:45:38 2021 +0800
resolve "receiver don't need to get itself when healthCheck #6515 " (#6538)
---
CHANGES.md | 1 +
.../oap/server/core/CoreModuleConfig.java | 11 +++++-
.../oap/server/core/CoreModuleProvider.java | 3 ++
.../oap/server/core/cluster/OAPNodeChecker.java | 15 ++++++--
.../oap/server/core/CoreModuleConfigTest.java | 44 ++++++++++++++++++++++
.../server/core/cluster/OAPNodeCheckerTest.java | 10 +++++
6 files changed, 79 insertions(+), 5 deletions(-)
diff --git a/CHANGES.md b/CHANGES.md
index a3fbdc5..e826119 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -49,6 +49,7 @@ Release Notes.
* Add telemetry data about metrics in, metrics scraping and trace in metrics to zipkin receiver.
* Fix tags store of log and trace on h2/mysql/pg storage.
* Merge indices by Metrics Function and Meter Function in Elasticsearch Storage.
+* Fix receiver don't need to get itself when healthCheck
#### UI
* Update selector scroller to show in all pages.
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleConfig.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleConfig.java
index 93721ea..22f5467 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleConfig.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleConfig.java
@@ -157,7 +157,16 @@ public class CoreModuleConfig extends ModuleConfig {
* Aggregator mode OAP receives data from {@link #Mixed} and {@link #Aggregator} OAP nodes, and do 2nd round
* aggregation. Then save the final result to the storage.
*/
- Aggregator
+ Aggregator;
+
+ public static Role fromName(String name) {
+ for (Role role : Role.values()) {
+ if (role.name().equalsIgnoreCase(name)) {
+ return role;
+ }
+ }
+ return Mixed;
+ }
}
/**
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java
index cbdd38d..18d5ec4 100755
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java
@@ -38,6 +38,7 @@ import org.apache.skywalking.oap.server.core.cache.NetworkAddressAliasCache;
import org.apache.skywalking.oap.server.core.cache.ProfileTaskCache;
import org.apache.skywalking.oap.server.core.cluster.ClusterModule;
import org.apache.skywalking.oap.server.core.cluster.ClusterRegister;
+import org.apache.skywalking.oap.server.core.cluster.OAPNodeChecker;
import org.apache.skywalking.oap.server.core.cluster.RemoteInstance;
import org.apache.skywalking.oap.server.core.command.CommandService;
import org.apache.skywalking.oap.server.core.config.ComponentLibraryCatalogService;
@@ -315,6 +316,8 @@ public class CoreModuleProvider extends ModuleProvider {
.registerRemote(gRPCServerInstance);
}
+ OAPNodeChecker.setROLE(CoreModuleConfig.Role.fromName(moduleConfig.getRole()));
+
DynamicConfigurationService dynamicConfigurationService = getManager().find(ConfigurationModule.NAME)
.provider()
.getService(
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cluster/OAPNodeChecker.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cluster/OAPNodeChecker.java
index 815dd26..2fec8d9 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cluster/OAPNodeChecker.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cluster/OAPNodeChecker.java
@@ -19,6 +19,8 @@
package org.apache.skywalking.oap.server.core.cluster;
import com.google.common.collect.Sets;
+import lombok.Setter;
+import org.apache.skywalking.oap.server.core.CoreModuleConfig;
import org.apache.skywalking.oap.server.library.util.CollectionUtils;
import java.util.List;
@@ -28,6 +30,9 @@ import java.util.stream.Collectors;
public class OAPNodeChecker {
private static final Set<String> ILLEGAL_NODE_ADDRESS_IN_CLUSTER_MODE = Sets.newHashSet("127.0.0.1", "localhost");
+ @Setter
+ private static CoreModuleConfig.Role ROLE = CoreModuleConfig.Role.Mixed;
+
public static boolean hasIllegalNodeAddress(List<RemoteInstance> remoteInstances) {
if (CollectionUtils.isEmpty(remoteInstances)) {
return false;
@@ -50,10 +55,12 @@ public class OAPNodeChecker {
if (CollectionUtils.isEmpty(remoteInstances)) {
return ClusterHealthStatus.unHealth("can't get the instance list");
}
- List<RemoteInstance> selfInstances = remoteInstances.stream().
- filter(remoteInstance -> remoteInstance.getAddress().isSelf()).collect(Collectors.toList());
- if (CollectionUtils.isEmpty(selfInstances)) {
- return ClusterHealthStatus.unHealth("can't get itself");
+ if (!CoreModuleConfig.Role.Receiver.equals(ROLE)) {
+ List<RemoteInstance> selfInstances = remoteInstances.stream().
+ filter(remoteInstance -> remoteInstance.getAddress().isSelf()).collect(Collectors.toList());
+ if (CollectionUtils.isEmpty(selfInstances)) {
+ return ClusterHealthStatus.unHealth("can't get itself");
+ }
}
if (remoteInstances.size() > 1 && hasIllegalNodeAddress(remoteInstances)) {
return ClusterHealthStatus.unHealth("find illegal node in cluster mode such as 127.0.0.1, localhost");
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/CoreModuleConfigTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/CoreModuleConfigTest.java
new file mode 100644
index 0000000..afdb5bb
--- /dev/null
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/CoreModuleConfigTest.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.oap.server.core;
+
+import org.apache.commons.lang3.StringUtils;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class CoreModuleConfigTest {
+
+ @Test
+ public void testRoleFromNameNormalSituation() {
+ Assert.assertEquals(CoreModuleConfig.Role.Mixed, CoreModuleConfig.Role.fromName("Mixed"));
+ Assert.assertEquals(CoreModuleConfig.Role.Receiver, CoreModuleConfig.Role.fromName("Receiver"));
+ Assert.assertEquals(CoreModuleConfig.Role.Aggregator, CoreModuleConfig.Role.fromName("Aggregator"));
+ }
+
+ @Test
+ public void testRoleFromNameBlockParameter() {
+ Assert.assertEquals(CoreModuleConfig.Role.Mixed, CoreModuleConfig.Role.fromName(StringUtils.EMPTY));
+ Assert.assertEquals(CoreModuleConfig.Role.Mixed, CoreModuleConfig.Role.fromName(null));
+ }
+
+ @Test
+ public void testRoleFromNameNotIncludeRole() {
+ Assert.assertEquals(CoreModuleConfig.Role.Mixed, CoreModuleConfig.Role.fromName("a"));
+ }
+}
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/cluster/OAPNodeCheckerTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/cluster/OAPNodeCheckerTest.java
index c4f2d35..0e7192c 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/cluster/OAPNodeCheckerTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/cluster/OAPNodeCheckerTest.java
@@ -19,6 +19,7 @@
package org.apache.skywalking.oap.server.core.cluster;
import com.google.common.collect.Lists;
+import org.apache.skywalking.oap.server.core.CoreModuleConfig;
import org.apache.skywalking.oap.server.core.remote.client.Address;
import org.junit.Assert;
import org.junit.Test;
@@ -102,4 +103,13 @@ public class OAPNodeCheckerTest {
ClusterHealthStatus clusterHealthStatus = OAPNodeChecker.isHealth(remoteInstances);
Assert.assertTrue(clusterHealthStatus.isHealth());
}
+
+ @Test
+ public void healthWhenReceiverRoleWithEmptySelfInstance() {
+ List<RemoteInstance> remoteInstances = new ArrayList<>();
+ remoteInstances.add(new RemoteInstance(new Address("192.168.0.1", 8892, false)));
+ OAPNodeChecker.setROLE(CoreModuleConfig.Role.Receiver);
+ ClusterHealthStatus clusterHealthStatus = OAPNodeChecker.isHealth(remoteInstances);
+ Assert.assertTrue(clusterHealthStatus.isHealth());
+ }
}
\ No newline at end of file