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