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 ba878f6  enhance metadata, set separate connection and limited 
concurrency(#9572)
ba878f6 is described below

commit ba878f67462817acf3c20cd1d1e178e2b4e6c917
Author: ken.lj <[email protected]>
AuthorDate: Mon Jan 17 09:59:46 2022 +0800

    enhance metadata, set separate connection and limited concurrency(#9572)
---
 .../apache/dubbo/common/cache/FileCacheStore.java  | 30 ++++++++++++++--------
 .../ConfigurableMetadataServiceExporter.java       |  4 +--
 .../dubbo/metadata/AbstractServiceNameMapping.java |  6 +++--
 .../registry/client/AbstractServiceDiscovery.java  |  2 +-
 .../StandardMetadataServiceURLBuilder.java         |  4 ++-
 5 files changed, 30 insertions(+), 16 deletions(-)

diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/cache/FileCacheStore.java 
b/dubbo-common/src/main/java/org/apache/dubbo/common/cache/FileCacheStore.java
index bdf8467..f70f606 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/cache/FileCacheStore.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/cache/FileCacheStore.java
@@ -51,7 +51,6 @@ public class FileCacheStore {
     private static final Set<Character> ILLEGALS = new HashSet<Character>();
     private static final String SUFFIX = ".dubbo.cache";
 
-    private String fileName;
     private File basePath;
     private File cacheFile;
     private FileLock directoryLock;
@@ -62,7 +61,6 @@ public class FileCacheStore {
             basePath = System.getProperty("user.home") + "/.dubbo/";
         }
         this.basePath = new File(basePath);
-        this.fileName = fileName;
 
         this.cacheFile = getFile(fileName, SUFFIX);
         if (cacheFile != null && !cacheFile.exists()) {
@@ -77,7 +75,7 @@ public class FileCacheStore {
             String line = reader.readLine();
             while (line != null && count <= entrySize) {
                 // content has '=' need to be encoded before write
-                if (!line.equals("") && !line.startsWith("#") && 
line.contains("=")) {
+                if (!line.startsWith("#") && line.contains("=")) {
                     String[] pairs = line.split("=");
                     properties.put(pairs[0], pairs[1]);
                     count++;
@@ -117,13 +115,25 @@ public class FileCacheStore {
                 throw new RuntimeException("Cache store path can't be created: 
" + candidate);
             }
 
-            try {
-                tryFileLock(name);
-            } catch (PathNotExclusiveException e) {
-                logger.warn("Path '" + basePath
-                    + "' is already used by an existing Dubbo process.\n"
-                    + "Please specify another one explicitly.");
-                throw e;
+            boolean autoCreated = false;
+            int index = 1;
+            while (true) {
+                try {
+                    tryFileLock(name);
+                    break;
+                } catch (PathNotExclusiveException e) {
+                    autoCreated = true;
+                    index++;
+                    name += index;
+                    if (index > 3) {
+                        logger.warn("Path '" + basePath + "/" + name
+                            + "' has already used by an existing Dubbo 
process.\n Please specify another one explicitly.");
+                        throw e;
+                    }
+                }
+            }
+            if (autoCreated && index < 3) {
+                logger.warn("Auto-generated cache file name is " + basePath + 
"/" + name);
             }
         }
 
diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/ConfigurableMetadataServiceExporter.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/ConfigurableMetadataServiceExporter.java
index 8d7ac95..5991ea1 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/ConfigurableMetadataServiceExporter.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/ConfigurableMetadataServiceExporter.java
@@ -170,8 +170,8 @@ public class ConfigurableMetadataServiceExporter {
         serviceConfig.setGroup(applicationConfig.getName());
         serviceConfig.setVersion(MetadataService.VERSION);
 //            serviceConfig.setMethods(generateMethodConfig());
-        serviceConfig.setConnections(1);
-        serviceConfig.setExecutes(100);
+        serviceConfig.setConnections(1); // separate connection
+        serviceConfig.setExecutes(100); // max tasks running at the same time
 
         return serviceConfig;
     }
diff --git 
a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractServiceNameMapping.java
 
b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractServiceNameMapping.java
index e18d789..1600080 100644
--- 
a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractServiceNameMapping.java
+++ 
b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractServiceNameMapping.java
@@ -145,8 +145,10 @@ public abstract class AbstractServiceNameMapping 
implements ServiceNameMapping,
         synchronized (mappingListeners) {
             MappingListener listener = 
mappingListeners.remove(subscribeURL.getProtocolServiceKey());
             //todo, remove listener from remote metadata center
-            listener.stop();
-            removeListener(subscribeURL, listener);
+            if (listener != null) {
+                listener.stop();
+                removeListener(subscribeURL, listener);
+            }
             if (mappingListeners.size() == 0) {
                 
removeCachedMapping(ServiceNameMapping.buildMappingKey(subscribeURL));
             }
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/AbstractServiceDiscovery.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/AbstractServiceDiscovery.java
index 2afed98..e256e04 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/AbstractServiceDiscovery.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/AbstractServiceDiscovery.java
@@ -124,7 +124,7 @@ public abstract class AbstractServiceDiscovery implements 
ServiceDiscovery {
 
     @Override
     public synchronized void unregister() throws RuntimeException {
-        // fixme, this metadata info may still being shared by other instances
+        // fixme, this metadata info might still being shared by other 
instances
 //        unReportMetadata(this.metadataInfo);
         doUnregister(this.serviceInstance);
     }
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/StandardMetadataServiceURLBuilder.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/StandardMetadataServiceURLBuilder.java
index 2b14326..5cf3b4a 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/StandardMetadataServiceURLBuilder.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/StandardMetadataServiceURLBuilder.java
@@ -43,6 +43,7 @@ import static 
org.apache.dubbo.common.utils.StringUtils.isBlank;
 import static 
org.apache.dubbo.metadata.MetadataConstants.DEFAULT_METADATA_TIMEOUT_VALUE;
 import static 
org.apache.dubbo.metadata.MetadataConstants.METADATA_PROXY_TIMEOUT_KEY;
 import static 
org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils.METADATA_SERVICE_URL_PARAMS_PROPERTY_NAME;
+import static org.apache.dubbo.remoting.Constants.CONNECTIONS_KEY;
 
 /**
  * Standard Dubbo provider enabling introspection service discovery mode.
@@ -100,7 +101,8 @@ public class StandardMetadataServiceURLBuilder implements 
MetadataServiceURLBuil
                 .setProtocol(protocol)
                 .setPath(MetadataService.class.getName())
                 .addParameter(TIMEOUT_KEY, 
ConfigurationUtils.get(applicationModel, METADATA_PROXY_TIMEOUT_KEY, 
DEFAULT_METADATA_TIMEOUT_VALUE))
-                .addParameter(SIDE_KEY, CONSUMER);
+                .addParameter(SIDE_KEY, CONSUMER)
+                .addParameter(CONNECTIONS_KEY, 1);
 
         // add parameters
         params.forEach(urlBuilder::addParameter);

Reply via email to