Skip to content

Commit 7d09195

Browse files
committed
bugfix: the issue of possible infinite loop when cleaning up expired metadata info
1 parent beb6b95 commit 7d09195

File tree

1 file changed

+6
-6
lines changed

1 file changed

+6
-6
lines changed

Diff for: dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/AbstractServiceDiscovery.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -114,35 +114,35 @@ private AbstractServiceDiscovery(ApplicationModel applicationModel, String servi
114114
}
115115

116116
private void removeExpiredMetadataInfo(int metadataInfoCacheSize, int metadataInfoCacheExpireTime) {
117-
Long time = null;
117+
Long nextTime = null;
118118
if (metadataInfos.size() > metadataInfoCacheSize) {
119119
List<MetadataInfoStat> values = new ArrayList<>(metadataInfos.values());
120120
values.sort(Comparator.comparingLong(MetadataInfoStat::getUpdateTime));
121121
for (MetadataInfoStat v : values) {
122-
time = System.currentTimeMillis() - v.getUpdateTime();
122+
long time = System.currentTimeMillis() - v.getUpdateTime();
123123
if (time > metadataInfoCacheExpireTime) {
124124
metadataInfos.remove(v.metadataInfo.getRevision(), v);
125-
time = null;
126125
} else {
126+
nextTime = metadataInfoCacheExpireTime - time;
127127
break;
128128
}
129129
}
130130
}
131131
startRefreshCache(
132-
time == null ? metadataInfoCacheExpireTime / 2 : time,
132+
nextTime == null ? metadataInfoCacheExpireTime / 2 : nextTime,
133133
metadataInfoCacheSize,
134134
metadataInfoCacheExpireTime);
135135
}
136136

137-
private void startRefreshCache(long time, int metadataInfoCacheSize, int metadataInfoCacheExpireTime) {
137+
private void startRefreshCache(long nextTime, int metadataInfoCacheSize, int metadataInfoCacheExpireTime) {
138138
this.refreshCacheFuture = applicationModel
139139
.getFrameworkModel()
140140
.getBeanFactory()
141141
.getBean(FrameworkExecutorRepository.class)
142142
.getSharedScheduledExecutor()
143143
.schedule(
144144
() -> removeExpiredMetadataInfo(metadataInfoCacheSize, metadataInfoCacheExpireTime),
145-
time,
145+
nextTime,
146146
TimeUnit.MILLISECONDS);
147147
}
148148

0 commit comments

Comments
 (0)