You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by li...@apache.org on 2022/06/13 02:32:03 UTC
[dubbo] branch 3.0 updated: fix #10044, sharing proxy instance with references
This is an automated email from the ASF dual-hosted git repository.
liujun 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 d9bdafdf94 fix #10044, sharing proxy instance with references
d9bdafdf94 is described below
commit d9bdafdf948aba8f7ac5a32c60e19327185e3bd2
Author: Wang Chengming <63...@qq.com>
AuthorDate: Mon Jun 13 10:31:56 2022 +0800
fix #10044, sharing proxy instance with references
Co-authored-by: 呈铭 <be...@antgroup.com>
---
.../config/utils/CompositeReferenceCache.java | 25 ++++++++++++++++++++--
1 file changed, 23 insertions(+), 2 deletions(-)
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/CompositeReferenceCache.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/CompositeReferenceCache.java
index 827dca215a..e40c2a792b 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/CompositeReferenceCache.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/CompositeReferenceCache.java
@@ -16,7 +16,10 @@
*/
package org.apache.dubbo.config.utils;
+import org.apache.dubbo.common.BaseServiceMetadata;
import org.apache.dubbo.common.config.ReferenceCache;
+import org.apache.dubbo.common.logger.Logger;
+import org.apache.dubbo.common.logger.LoggerFactory;
import org.apache.dubbo.config.ReferenceConfigBase;
import org.apache.dubbo.rpc.model.ApplicationModel;
import org.apache.dubbo.rpc.model.ModuleModel;
@@ -28,7 +31,10 @@ import java.util.List;
* A impl of ReferenceCache for Application
*/
public class CompositeReferenceCache implements ReferenceCache {
- private ApplicationModel applicationModel;
+
+ private static final Logger logger = LoggerFactory.getLogger(CompositeReferenceCache.class);
+
+ private final ApplicationModel applicationModel;
public CompositeReferenceCache(ApplicationModel applicationModel) {
this.applicationModel = applicationModel;
@@ -36,7 +42,22 @@ public class CompositeReferenceCache implements ReferenceCache {
@Override
public <T> T get(ReferenceConfigBase<T> referenceConfig) {
- return referenceConfig.get();
+
+ Class<?> type = referenceConfig.getInterfaceClass();
+ String key = BaseServiceMetadata.buildServiceKey(type.getName(), referenceConfig.getGroup(), referenceConfig.getVersion());
+
+ boolean singleton = referenceConfig.getSingleton() == null || referenceConfig.getSingleton();
+ T proxy = null;
+ if (singleton) {
+ proxy = get(key, (Class<T>) type);
+ } else {
+ logger.warn("Using non-singleton ReferenceConfig and ReferenceCache at the same time may cause memory leak. " +
+ "Call ReferenceConfig#get() directly for non-singleton ReferenceConfig instead of using ReferenceCache#get(ReferenceConfig)");
+ }
+ if (proxy == null) {
+ proxy = referenceConfig.get();
+ }
+ return proxy;
}
@Override