This is an automated email from the ASF dual-hosted git repository.

albumenj pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/master by this push:
     new d476c5d  Optimize the initialization logic of AbstractMetadataReport 
(#7591)
d476c5d is described below

commit d476c5dd1c28c0a48c17998be1945f812be40e6a
Author: xiaoheng1 <[email protected]>
AuthorDate: Mon May 17 21:55:47 2021 +0800

    Optimize the initialization logic of AbstractMetadataReport (#7591)
---
 .../report/support/AbstractMetadataReport.java     | 34 ++++++++++++++--------
 1 file changed, 22 insertions(+), 12 deletions(-)

diff --git 
a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/support/AbstractMetadataReport.java
 
b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/support/AbstractMetadataReport.java
index f16a494..d094668 100644
--- 
a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/support/AbstractMetadataReport.java
+++ 
b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/support/AbstractMetadataReport.java
@@ -89,7 +89,8 @@ public abstract class AbstractMetadataReport implements 
MetadataReport {
 
     // Local disk cache, where the special key value.registries records the 
list of metadata centers, and the others are the list of notified service 
providers
     final Properties properties = new Properties();
-    private final ExecutorService reportCacheExecutor = 
Executors.newFixedThreadPool(1, new 
NamedThreadFactory("DubboSaveMetadataReport", true));
+    private final ExecutorService reportCacheExecutor =
+            Executors.newFixedThreadPool(1, new 
NamedThreadFactory("DubboSaveMetadataReport", true));
     final Map<MetadataIdentifier, Object> allMetadataReports = new 
ConcurrentHashMap<>(4);
 
     private final AtomicLong lastCacheChanged = new AtomicLong();
@@ -102,22 +103,26 @@ public abstract class AbstractMetadataReport implements 
MetadataReport {
     public MetadataReportRetry metadataReportRetry;
 
     public AbstractMetadataReport(URL reportServerURL) {
+
+        if (!initialized.compareAndSet(false, true)) {
+            return;
+        }
+
         setUrl(reportServerURL);
         // Start file save timer
-        String defaultFilename = System.getProperty("user.home") + 
"/.dubbo/dubbo-metadata-" + reportServerURL.getParameter(APPLICATION_KEY) + "-" 
+ reportServerURL.getAddress().replaceAll(":", "-") + ".cache";
+        String defaultFilename =
+                System.getProperty("user.home") + "/.dubbo/dubbo-metadata-" + 
reportServerURL.getParameter(APPLICATION_KEY) + "-" +
+                        reportServerURL.getAddress().replaceAll(":", "-") + 
".cache";
         String filename = reportServerURL.getParameter(FILE_KEY, 
defaultFilename);
         File file = null;
         if (ConfigUtils.isNotEmpty(filename)) {
             file = new File(filename);
             if (!file.exists() && file.getParentFile() != null && 
!file.getParentFile().exists()) {
                 if (!file.getParentFile().mkdirs()) {
-                    throw new IllegalArgumentException("Invalid service store 
file " + file + ", cause: Failed to create directory " + file.getParentFile() + 
"!");
+                    throw new IllegalArgumentException(
+                            "Invalid service store file " + file + ", cause: 
Failed to create directory " + file.getParentFile() + "!");
                 }
             }
-            // if this file exist, firstly delete it.
-            if (!initialized.getAndSet(true) && file.exists()) {
-                file.delete();
-            }
         }
         this.file = file;
         loadProperties();
@@ -126,7 +131,8 @@ public abstract class AbstractMetadataReport implements 
MetadataReport {
                 reportServerURL.getParameter(RETRY_PERIOD_KEY, 
DEFAULT_METADATA_REPORT_RETRY_PERIOD));
         // cycle report the data switch
         if (reportServerURL.getParameter(CYCLE_REPORT_KEY, 
DEFAULT_METADATA_REPORT_CYCLE_REPORT)) {
-            ScheduledExecutorService scheduler = 
Executors.newSingleThreadScheduledExecutor(new 
NamedThreadFactory("DubboMetadataReportTimer", true));
+            ScheduledExecutorService scheduler =
+                    Executors.newSingleThreadScheduledExecutor(new 
NamedThreadFactory("DubboMetadataReportTimer", true));
             scheduler.scheduleAtFixedRate(this::publishAll, 
calculateStartTime(), ONE_DAY_IN_MILLISECONDS, TimeUnit.MILLISECONDS);
         }
     }
@@ -159,7 +165,8 @@ public abstract class AbstractMetadataReport implements 
MetadataReport {
                  FileChannel channel = raf.getChannel()) {
                 FileLock lock = channel.tryLock();
                 if (lock == null) {
-                    throw new IOException("Can not lock the metadataReport 
cache file " + file.getAbsolutePath() + ", ignore and retry later, maybe multi 
java process use the file, please config: dubbo.metadata.file=xxx.properties");
+                    throw new IOException("Can not lock the metadataReport 
cache file " + file.getAbsolutePath() +
+                            ", ignore and retry later, maybe multi java 
process use the file, please config: dubbo.metadata.file=xxx.properties");
                 }
                 // Save
                 try {
@@ -260,7 +267,8 @@ public abstract class AbstractMetadataReport implements 
MetadataReport {
             // retry again. If failed again, throw exception.
             failedReports.put(providerMetadataIdentifier, serviceDefinition);
             metadataReportRetry.startRetryTask();
-            logger.error("Failed to put provider metadata " + 
providerMetadataIdentifier + " in  " + serviceDefinition + ", cause: " + 
e.getMessage(), e);
+            logger.error("Failed to put provider metadata " + 
providerMetadataIdentifier + " in  " + serviceDefinition + ", cause: " +
+                    e.getMessage(), e);
         }
     }
 
@@ -289,7 +297,8 @@ public abstract class AbstractMetadataReport implements 
MetadataReport {
             // retry again. If failed again, throw exception.
             failedReports.put(consumerMetadataIdentifier, serviceParameterMap);
             metadataReportRetry.startRetryTask();
-            logger.error("Failed to put consumer metadata " + 
consumerMetadataIdentifier + ";  " + serviceParameterMap + ", cause: " + 
e.getMessage(), e);
+            logger.error("Failed to put consumer metadata " + 
consumerMetadataIdentifier + ";  " + serviceParameterMap + ", cause: " +
+                    e.getMessage(), e);
         }
     }
 
@@ -392,7 +401,8 @@ public abstract class AbstractMetadataReport implements 
MetadataReport {
     class MetadataReportRetry {
         protected final Logger logger = LoggerFactory.getLogger(getClass());
 
-        final ScheduledExecutorService retryExecutor = 
Executors.newScheduledThreadPool(0, new 
NamedThreadFactory("DubboMetadataReportRetryTimer", true));
+        final ScheduledExecutorService retryExecutor =
+                Executors.newScheduledThreadPool(0, new 
NamedThreadFactory("DubboMetadataReportRetryTimer", true));
         volatile ScheduledFuture retryScheduledFuture;
         final AtomicInteger retryCounter = new AtomicInteger(0);
         // retry task schedule period

Reply via email to