This is an automated email from the ASF dual-hosted git repository.
albumenj 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 2c737a4 add exception catch for RemovalTask, ensure semaphore release
(#8170)
2c737a4 is described below
commit 2c737a4d87a42f0c97d3e627a5424034c2d2630b
Author: Albumen Kevin <[email protected]>
AuthorDate: Wed Jun 30 11:05:21 2021 +0800
add exception catch for RemovalTask, ensure semaphore release (#8170)
---
.../support/CacheableFailbackRegistry.java | 42 +++++++++++++---------
1 file changed, 25 insertions(+), 17 deletions(-)
diff --git
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/CacheableFailbackRegistry.java
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/CacheableFailbackRegistry.java
index 16e0f89..561b794 100644
---
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/CacheableFailbackRegistry.java
+++
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/CacheableFailbackRegistry.java
@@ -308,26 +308,34 @@ public abstract class CacheableFailbackRegistry extends
FailbackRegistry {
private static class RemovalTask implements Runnable {
@Override
public void run() {
- logger.info("Clearing cached URLs, size " + waitForRemove.size());
- Iterator<Map.Entry<ServiceAddressURL, Long>> it =
waitForRemove.entrySet().iterator();
- while (it.hasNext()) {
- Map.Entry<ServiceAddressURL, Long> entry = it.next();
- ServiceAddressURL removeURL = entry.getKey();
- long removeTime = entry.getValue();
- long current = System.currentTimeMillis();
- if (current - removeTime >=
cacheClearWaitingThresholdInMillis) {
- URLAddress urlAddress = removeURL.getUrlAddress();
- URLParam urlParam = removeURL.getUrlParam();
- if (current - urlAddress.getTimestamp() >=
cacheClearWaitingThresholdInMillis) {
- stringAddress.remove(urlAddress.getRawAddress());
- }
- if (current - urlParam.getTimestamp() >=
cacheClearWaitingThresholdInMillis) {
- stringParam.remove(urlParam.getRawParam());
+ logger.info("Clearing cached URLs, waiting to clear size " +
waitForRemove.size());
+ int clearCount = 0;
+ try {
+ Iterator<Map.Entry<ServiceAddressURL, Long>> it =
waitForRemove.entrySet().iterator();
+ while (it.hasNext()) {
+ Map.Entry<ServiceAddressURL, Long> entry = it.next();
+ ServiceAddressURL removeURL = entry.getKey();
+ long removeTime = entry.getValue();
+ long current = System.currentTimeMillis();
+ if (current - removeTime >=
cacheClearWaitingThresholdInMillis) {
+ URLAddress urlAddress = removeURL.getUrlAddress();
+ URLParam urlParam = removeURL.getUrlParam();
+ if (current - urlAddress.getTimestamp() >=
cacheClearWaitingThresholdInMillis) {
+ stringAddress.remove(urlAddress.getRawAddress());
+ }
+ if (current - urlParam.getTimestamp() >=
cacheClearWaitingThresholdInMillis) {
+ stringParam.remove(urlParam.getRawParam());
+ }
+ it.remove();
+ clearCount++;
}
- it.remove();
}
+ } catch (Throwable t) {
+ logger.error("Error occurred when clearing cached URLs", t);
+ } finally {
+ semaphore.release();
}
- semaphore.release();
+ logger.info("Clear cached URLs, size " + clearCount);
if (CollectionUtils.isNotEmptyMap(waitForRemove)) {
// move to next schedule