This is an automated email from the ASF dual-hosted git repository.
albumenj pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.0 by this push:
new 6443767caf unexport and delete config (#10369)
6443767caf is described below
commit 6443767caf1f37800532900c5d4512461868b4ce
Author: Owen.Cai <[email protected]>
AuthorDate: Wed Jul 27 17:31:13 2022 +0800
unexport and delete config (#10369)
* unexport and delete config
* fix no id null bug
* fix code bug
---
.../config/context/AbstractConfigManager.java | 12 +++++++++-
.../dubbo/config/context/ModuleConfigManager.java | 26 ++++++++++++++++++++++
2 files changed, 37 insertions(+), 1 deletion(-)
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/config/context/AbstractConfigManager.java
b/dubbo-common/src/main/java/org/apache/dubbo/config/context/AbstractConfigManager.java
index 81c8b068cb..2078bd9c29 100644
---
a/dubbo-common/src/main/java/org/apache/dubbo/config/context/AbstractConfigManager.java
+++
b/dubbo-common/src/main/java/org/apache/dubbo/config/context/AbstractConfigManager.java
@@ -223,6 +223,13 @@ public abstract class AbstractConfigManager extends
LifecycleAdapter {
return config;
}
+ protected <C extends AbstractConfig> boolean removeIfAbsent(C config,
Map<String, C> configsMap) {
+ if(config.getId() != null) {
+ return configsMap.remove(config.getId(), config);
+ }
+ return configsMap.values().removeIf(c -> config == c);
+ }
+
protected boolean isUniqueConfig(AbstractConfig config) {
if (uniqueConfigTypes.contains(config.getClass())) {
return true;
@@ -651,7 +658,10 @@ public abstract class AbstractConfigManager extends
LifecycleAdapter {
Map<String, AbstractConfig> configs =
configsCache.get(getTagName(config.getClass()));
if (CollectionUtils.isNotEmptyMap(configs)) {
- return configs.values().removeIf(c -> config == c);
+ // lock by config type
+ synchronized (configs) {
+ return removeIfAbsent(config, configs);
+ }
}
return false;
}
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/config/context/ModuleConfigManager.java
b/dubbo-common/src/main/java/org/apache/dubbo/config/context/ModuleConfigManager.java
index b05f24f155..c7af4f2454 100644
---
a/dubbo-common/src/main/java/org/apache/dubbo/config/context/ModuleConfigManager.java
+++
b/dubbo-common/src/main/java/org/apache/dubbo/config/context/ModuleConfigManager.java
@@ -202,6 +202,17 @@ public class ModuleConfigManager extends
AbstractConfigManager implements Module
return Optional.empty();
}
+ @Override
+ protected <C extends AbstractConfig> boolean removeIfAbsent(C config,
Map<String, C> configsMap) {
+ if(super.removeIfAbsent(config, configsMap)) {
+ if (config instanceof ReferenceConfigBase || config instanceof
ServiceConfigBase) {
+ removeInterfaceConfig((AbstractInterfaceConfig) config);
+ }
+ return true;
+ }
+ return false;
+ }
+
/**
* check duplicated ReferenceConfig/ServiceConfig
*
@@ -250,6 +261,21 @@ public class ModuleConfigManager extends
AbstractConfigManager implements Module
return prevConfig;
}
+ private void removeInterfaceConfig(AbstractInterfaceConfig config) {
+ String uniqueServiceName;
+ Map<String, AbstractInterfaceConfig> configCache;
+ if (config instanceof ReferenceConfigBase) {
+ return;
+ } else if (config instanceof ServiceConfigBase) {
+ ServiceConfigBase serviceConfig = (ServiceConfigBase) config;
+ uniqueServiceName = serviceConfig.getUniqueServiceName();
+ configCache = serviceConfigCache;
+ } else {
+ throw new IllegalArgumentException("Illegal type of parameter
'config' : " + config.getClass().getName());
+ }
+ configCache.remove(uniqueServiceName, config);
+ }
+
@Override
public void loadConfigs() {
// load dubbo.providers.xxx