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 2019/02/19 15:14:23 UTC
[incubator-dubbo] branch master updated: fix issue#1293: A question
for ReferenceConfigCache. (#3505)
This is an automated email from the ASF dual-hosted git repository.
lixiaojie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git
The following commit(s) were added to refs/heads/master by this push:
new 7c236ca fix issue#1293: A question for ReferenceConfigCache. (#3505)
7c236ca is described below
commit 7c236ca8f74e6797dac4d432a37294ee8a4529d5
Author: Ian Luo <ia...@gmail.com>
AuthorDate: Tue Feb 19 23:09:54 2019 +0800
fix issue#1293: A question for ReferenceConfigCache. (#3505)
---
.../dubbo/config/utils/ReferenceConfigCache.java | 55 +++++++++++++---------
.../config/utils/ReferenceConfigCacheTest.java | 8 ++++
2 files changed, 42 insertions(+), 21 deletions(-)
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ReferenceConfigCache.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ReferenceConfigCache.java
index 5ca9698..09f12da 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ReferenceConfigCache.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ReferenceConfigCache.java
@@ -39,28 +39,25 @@ public class ReferenceConfigCache {
* <p>
* key example: <code>group1/org.apache.dubbo.foo.FooService:1.0.0</code>.
*/
- public static final KeyGenerator DEFAULT_KEY_GENERATOR = new KeyGenerator() {
- @Override
- public String generateKey(ReferenceConfig<?> referenceConfig) {
- String iName = referenceConfig.getInterface();
- if (StringUtils.isBlank(iName)) {
- Class<?> clazz = referenceConfig.getInterfaceClass();
- iName = clazz.getName();
- }
- if (StringUtils.isBlank(iName)) {
- throw new IllegalArgumentException("No interface info in ReferenceConfig" + referenceConfig);
- }
-
- StringBuilder ret = new StringBuilder();
- if (!StringUtils.isBlank(referenceConfig.getGroup())) {
- ret.append(referenceConfig.getGroup()).append("/");
- }
- ret.append(iName);
- if (!StringUtils.isBlank(referenceConfig.getVersion())) {
- ret.append(":").append(referenceConfig.getVersion());
- }
- return ret.toString();
+ public static final KeyGenerator DEFAULT_KEY_GENERATOR = referenceConfig -> {
+ String iName = referenceConfig.getInterface();
+ if (StringUtils.isBlank(iName)) {
+ Class<?> clazz = referenceConfig.getInterfaceClass();
+ iName = clazz.getName();
}
+ if (StringUtils.isBlank(iName)) {
+ throw new IllegalArgumentException("No interface info in ReferenceConfig" + referenceConfig);
+ }
+
+ StringBuilder ret = new StringBuilder();
+ if (!StringUtils.isBlank(referenceConfig.getGroup())) {
+ ret.append(referenceConfig.getGroup()).append("/");
+ }
+ ret.append(iName);
+ if (!StringUtils.isBlank(referenceConfig.getVersion())) {
+ ret.append(":").append(referenceConfig.getVersion());
+ }
+ return ret.toString();
};
static final ConcurrentMap<String, ReferenceConfigCache> cacheHolder = new ConcurrentHashMap<String, ReferenceConfigCache>();
private final String name;
@@ -115,6 +112,22 @@ public class ReferenceConfigCache {
return (T) config.get();
}
+ /**
+ * Fetch cache with the specified key. The key is decided by KeyGenerator passed-in. If the default KeyGenerator is
+ * used, then the key is in the format of <code>group/interfaceClass:version</code>
+ *
+ * @param key cache key
+ * @param type object class
+ * @param <T> object type
+ * @return object from the cached ReferenceConfig
+ * @see KeyGenerator#generateKey(ReferenceConfig)
+ */
+ @SuppressWarnings("unchecked")
+ public <T> T get(String key, Class<T> type) {
+ ReferenceConfig<?> config = cache.get(key);
+ return (config != null) ? (T) config.get() : null;
+ }
+
void destroyKey(String key) {
ReferenceConfig<?> config = cache.remove(key);
if (config == null) {
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/utils/ReferenceConfigCacheTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/utils/ReferenceConfigCacheTest.java
index af5659e..2af6da7 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/utils/ReferenceConfigCacheTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/utils/ReferenceConfigCacheTest.java
@@ -59,6 +59,14 @@ public class ReferenceConfigCacheTest {
}
@Test
+ public void testGetCacheWithKey() throws Exception {
+ ReferenceConfigCache cache = ReferenceConfigCache.getCache();
+ MockReferenceConfig config = buildMockReferenceConfig("FooService", "group1", "1.0.0");
+ String value = cache.get(config);
+ assertEquals(value, cache.get("group1/FooService:1.0.0", String.class));
+ }
+
+ @Test
public void testGetCacheDiffName() throws Exception {
ReferenceConfigCache cache = ReferenceConfigCache.getCache();
MockReferenceConfig config = buildMockReferenceConfig("FooService", "group1", "1.0.0");