You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2021/05/17 13:56:03 UTC
[dubbo] branch master updated: Optimize the initialization logic of
AbstractMetadataReport (#7591)
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 <20...@qq.com>
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