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

albumenj pushed a commit to branch 3.2
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.2 by this push:
     new 87eb3fdda8 Fix metrics publisher NPE
87eb3fdda8 is described below

commit 87eb3fdda812c6551ea0c77e89b0ef6809cde0b7
Author: Albumen Kevin <[email protected]>
AuthorDate: Sat Mar 11 16:05:41 2023 +0800

    Fix metrics publisher NPE
---
 .../dubbo/rpc/cluster/directory/AbstractDirectory.java  | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git 
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/AbstractDirectory.java
 
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/AbstractDirectory.java
index 6af8bdb98d..9d3dc1e827 100644
--- 
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/AbstractDirectory.java
+++ 
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/AbstractDirectory.java
@@ -28,6 +28,7 @@ import org.apache.dubbo.common.utils.ConcurrentHashSet;
 import org.apache.dubbo.common.utils.NetUtils;
 import org.apache.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.metrics.event.GlobalMetricsEventMulticaster;
+import org.apache.dubbo.metrics.event.MetricsEvent;
 import org.apache.dubbo.metrics.registry.event.RegistryEvent;
 import org.apache.dubbo.rpc.Invocation;
 import org.apache.dubbo.rpc.Invoker;
@@ -387,9 +388,15 @@ public abstract class AbstractDirectory<T> implements 
Directory<T> {
         invokersToRemove.removeAll(needToRemove);
     }
 
+    private void publishMetricsEvent(MetricsEvent event) {
+        if (eventMulticaster != null) {
+            eventMulticaster.publishEvent(event);
+        }
+    }
+
     @Override
     public void addDisabledInvoker(Invoker<T> invoker) {
-        eventMulticaster.publishEvent(new 
RegistryEvent.MetricsDirectoryEvent(applicationModel, 
RegistryEvent.Type.D_DISABLE));
+        publishMetricsEvent(new 
RegistryEvent.MetricsDirectoryEvent(applicationModel, 
RegistryEvent.Type.D_DISABLE));
         if (invokers.contains(invoker)) {
             disabledInvokers.add(invoker);
             removeValidInvoker(invoker);
@@ -399,7 +406,7 @@ public abstract class AbstractDirectory<T> implements 
Directory<T> {
 
     @Override
     public void recoverDisabledInvoker(Invoker<T> invoker) {
-        eventMulticaster.publishEvent(new 
RegistryEvent.MetricsDirectoryEvent(applicationModel, 
RegistryEvent.Type.D_RECOVER_DISABLE));
+        publishMetricsEvent(new 
RegistryEvent.MetricsDirectoryEvent(applicationModel, 
RegistryEvent.Type.D_RECOVER_DISABLE));
         if (disabledInvokers.remove(invoker)) {
             try {
                 addValidInvoker(invoker);
@@ -463,7 +470,7 @@ public abstract class AbstractDirectory<T> implements 
Directory<T> {
         this.invokers = invokers;
         refreshInvokerInternal();
         this.invokersInitialized = true;
-        eventMulticaster.publishEvent(new 
RegistryEvent.MetricsDirectoryEvent(applicationModel, 
RegistryEvent.Type.D_CURRENT, invokers.size()));
+        publishMetricsEvent(new 
RegistryEvent.MetricsDirectoryEvent(applicationModel, 
RegistryEvent.Type.D_CURRENT, invokers.size()));
     }
 
     protected void destroyInvokers() {
@@ -474,14 +481,14 @@ public abstract class AbstractDirectory<T> implements 
Directory<T> {
     }
 
     private boolean addValidInvoker(Invoker<T> invoker) {
-        eventMulticaster.publishEvent(new 
RegistryEvent.MetricsDirectoryEvent(applicationModel, 
RegistryEvent.Type.D_VALID));
+        publishMetricsEvent(new 
RegistryEvent.MetricsDirectoryEvent(applicationModel, 
RegistryEvent.Type.D_VALID));
         synchronized (this.validInvokers) {
             return this.validInvokers.add(invoker);
         }
     }
 
     private boolean removeValidInvoker(Invoker<T> invoker) {
-        eventMulticaster.publishEvent(new 
RegistryEvent.MetricsDirectoryEvent(applicationModel, 
RegistryEvent.Type.D_UN_VALID));
+        publishMetricsEvent(new 
RegistryEvent.MetricsDirectoryEvent(applicationModel, 
RegistryEvent.Type.D_UN_VALID));
         synchronized (this.validInvokers) {
             return this.validInvokers.remove(invoker);
         }

Reply via email to