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

liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git


The following commit(s) were added to refs/heads/master by this push:
     new 335130503 [SCB-2850]Health Ping use self microservice to avoid target 
prepare schema (#4190)
335130503 is described below

commit 335130503b37f9608f922f2c6803232087fddbc4
Author: liubao68 <[email protected]>
AuthorDate: Thu Jan 11 09:52:41 2024 +0800

    [SCB-2850]Health Ping use self microservice to avoid target prepare schema 
(#4190)
---
 .../org/apache/servicecomb/registry/DiscoveryManager.java  | 10 ++++++++++
 .../solution/basic/integration/HealthInstancePing.java     | 14 +++++++++++++-
 2 files changed, 23 insertions(+), 1 deletion(-)

diff --git 
a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/DiscoveryManager.java
 
b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/DiscoveryManager.java
index ff51504d7..33b1a23f5 100644
--- 
a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/DiscoveryManager.java
+++ 
b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/DiscoveryManager.java
@@ -82,6 +82,7 @@ public class DiscoveryManager implements LifeCycle {
           try {
             runnable.run();
           } catch (Throwable e) {
+            // This would never happen, because Worker will catch Throwable 
and mute all tasks.
             LOGGER.error("discovery manager task error, not allowed please 
fix. ", e);
           }
         }
@@ -93,6 +94,15 @@ public class DiscoveryManager implements LifeCycle {
   }
 
   private void doTask() {
+    // doTask can not throw exception or will mute all tasks.
+    try {
+      doTaskImpl();
+    } catch (Throwable e) {
+      LOGGER.error("discovery manager task error. ", e);
+    }
+  }
+
+  private void doTaskImpl() {
     Map<String, Map<String, List<String>>> removed = new HashMap<>();
     for (Entry<String, Map<String, Map<String, StatefulDiscoveryInstance>>> 
apps : allInstances.entrySet()) {
       for (Entry<String, Map<String, StatefulDiscoveryInstance>> services : 
apps.getValue().entrySet()) {
diff --git 
a/solutions/solution-basic/src/main/java/org/apache/servicecomb/solution/basic/integration/HealthInstancePing.java
 
b/solutions/solution-basic/src/main/java/org/apache/servicecomb/solution/basic/integration/HealthInstancePing.java
index b1e14880b..d128365e1 100644
--- 
a/solutions/solution-basic/src/main/java/org/apache/servicecomb/solution/basic/integration/HealthInstancePing.java
+++ 
b/solutions/solution-basic/src/main/java/org/apache/servicecomb/solution/basic/integration/HealthInstancePing.java
@@ -20,6 +20,7 @@ import java.net.URI;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.servicecomb.config.BootStrapProperties;
 import org.apache.servicecomb.core.Endpoint;
 import org.apache.servicecomb.core.Invocation;
 import org.apache.servicecomb.core.SCBEngine;
@@ -33,6 +34,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.context.annotation.Lazy;
+import org.springframework.core.env.Environment;
 import org.springframework.util.CollectionUtils;
 
 public class HealthInstancePing implements InstancePing {
@@ -42,12 +44,19 @@ public class HealthInstancePing implements InstancePing {
 
   private TelnetInstancePing telnetInstancePing;
 
+  private Environment environment;
+
   @Autowired
   @Lazy
   public void setScbEngine(SCBEngine scbEngine) {
     this.scbEngine = scbEngine;
   }
 
+  @Autowired
+  public void setEnvironment(Environment environment) {
+    this.environment = environment;
+  }
+
   @Autowired
   @Lazy
   public void setTelnetInstancePing(@Qualifier("telnetInstancePing") 
TelnetInstancePing telnetInstancePing) {
@@ -76,7 +85,10 @@ public class HealthInstancePing implements InstancePing {
       if (transport == null) {
         continue;
       }
-      Invocation invocation = 
InvokerUtils.createInvocation(instance.getServiceName(), transportName,
+      // Use myself service name instead of the target. Because can avoid 
create
+      // MicroserviceReferenceConfig for the target.
+      Invocation invocation = 
InvokerUtils.createInvocation(BootStrapProperties.readServiceName(environment),
+          transportName,
           ManagementEndpoint.NAME, "health",
           args, boolean.class);
       invocation.setEndpoint(new Endpoint(transport, endpoint, instance));

Reply via email to