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);
+      }
     }
   }
 }

Reply via email to