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);
}