This is an automated email from the ASF dual-hosted git repository.
liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git
The following commit(s) were added to refs/heads/master by this push:
new 9bf9a04 [SCB-2337]add synchronized check for MicroserviceVersions
update (#2593)
9bf9a04 is described below
commit 9bf9a044217bda9887557c046636d50430d9dfd3
Author: liubao68 <[email protected]>
AuthorDate: Sat Sep 18 16:03:28 2021 +0800
[SCB-2337]add synchronized check for MicroserviceVersions update (#2593)
---
.../registry/consumer/MicroserviceManager.java | 25 ++++++++++++++++------
1 file changed, 19 insertions(+), 6 deletions(-)
diff --git
a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/consumer/MicroserviceManager.java
b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/consumer/MicroserviceManager.java
index 49f94e4..d8a91fe 100644
---
a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/consumer/MicroserviceManager.java
+++
b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/consumer/MicroserviceManager.java
@@ -49,6 +49,9 @@ public class MicroserviceManager {
return versionsByName;
}
+ /**
+ * update instance information triggered by first timeout pull
+ */
public MicroserviceVersions getOrCreateMicroserviceVersions(String
microserviceName) {
// do not use ConcurrentHashMap computeIfAbsent for versionsByName
// because: when create MicroserviceVersions, one creation may depend on
another
@@ -109,19 +112,29 @@ public class MicroserviceManager {
return
microserviceVersions.getOrCreateMicroserviceVersionRule(versionRule);
}
+ /**
+ * update instance information triggered by scheduler
+ */
public void pullInstances() {
- for (MicroserviceVersions microserviceVersions : versionsByName.values()) {
- microserviceVersions.pullInstances();
+ synchronized (lock) {
+ for (MicroserviceVersions microserviceVersions :
versionsByName.values()) {
+ microserviceVersions.pullInstances();
- tryRemoveInvalidMicroservice(microserviceVersions);
+ tryRemoveInvalidMicroservice(microserviceVersions);
+ }
}
}
+ /**
+ * update instance information triggered by event
+ */
public void onMicroserviceInstanceChanged(MicroserviceInstanceChangedEvent
changedEvent) {
- for (MicroserviceVersions microserviceVersions : versionsByName.values()) {
- microserviceVersions.onMicroserviceInstanceChanged(changedEvent);
+ synchronized (lock) {
+ for (MicroserviceVersions microserviceVersions :
versionsByName.values()) {
+ microserviceVersions.onMicroserviceInstanceChanged(changedEvent);
- tryRemoveInvalidMicroservice(microserviceVersions);
+ tryRemoveInvalidMicroservice(microserviceVersions);
+ }
}
}
}