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/incubator-servicecomb-java-chassis.git

commit 566e709f782a5007aa501fb364bb93410ae44d5d
Author: liubao <bao....@huawei.com>
AuthorDate: Tue Aug 14 16:24:16 2018 +0800

    [SCB-802]change implementation, only reset lastest version
---
 .../consumer/MicroserviceVersionRule.java          | 15 +++++++++--
 .../consumer/MicroserviceVersions.java             | 23 ----------------
 .../consumer/TestMicroserviceVersionRule.java      | 10 ++++++-
 .../consumer/TestMicroserviceVersions.java         | 31 ----------------------
 4 files changed, 22 insertions(+), 57 deletions(-)

diff --git 
a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/consumer/MicroserviceVersionRule.java
 
b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/consumer/MicroserviceVersionRule.java
index 22060ae..cff2fae 100644
--- 
a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/consumer/MicroserviceVersionRule.java
+++ 
b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/consumer/MicroserviceVersionRule.java
@@ -20,6 +20,7 @@ package org.apache.servicecomb.serviceregistry.consumer;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
+import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.function.Function;
@@ -111,9 +112,18 @@ public class MicroserviceVersionRule {
   }
 
   protected void resetLatestVersion() {
+    Map<String, MicroserviceVersion> tempVersions = new HashMap<>();
+    instances.values().forEach(item -> {
+      MicroserviceVersion version = versions.get(item.getServiceId());
+      if (version != null) {
+        tempVersions.put(item.getServiceId(), version);
+      }
+    });
+
     MicroserviceVersion lastLatestVersion = latestVersion;
-    latestVersion = null;
-    if (!versions.isEmpty()) {
+    if (!tempVersions.isEmpty()) {
+      latestVersion = 
tempVersions.values().stream().max(Comparator.comparing(MicroserviceVersion::getVersion)).get();
+    } else if (!versions.isEmpty()) {
       latestVersion = 
versions.values().stream().max(Comparator.comparing(MicroserviceVersion::getVersion)).get();
     }
 
@@ -172,5 +182,6 @@ public class MicroserviceVersionRule {
     instances = Collections.unmodifiableMap(tmpInstances);
 
     resetInstanceCache();
+    resetLatestVersion();
   }
 }
diff --git 
a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/consumer/MicroserviceVersions.java
 
b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/consumer/MicroserviceVersions.java
index ad4b721..ab4f479 100644
--- 
a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/consumer/MicroserviceVersions.java
+++ 
b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/consumer/MicroserviceVersions.java
@@ -18,10 +18,8 @@
 package org.apache.servicecomb.serviceregistry.consumer;
 
 import java.util.Comparator;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
@@ -193,30 +191,9 @@ public class MicroserviceVersions {
         microserviceVersionRule.setInstances(instances);
       }
       revision = rev;
-      // Clean up down versions in case of rollback and other interface not 
compatible scenarios. Users should ensure running versions are compatible.
-      pack();
     }
   }
 
-  private void pack() {
-    Set<String> microservices = new HashSet<>(instances.size());
-    instances.forEach(item -> {
-      microservices.add(item.getServiceId());
-    });
-    Set<String> downSet = new HashSet<>(instances.size());
-    versions.keySet().forEach(item -> {
-      if (!microservices.contains(item)) {
-        downSet.add(item);
-      }
-    });
-    downSet.forEach(item -> {
-      MicroserviceVersion version = versions.remove(item);
-      for (MicroserviceVersionRule microserviceVersionRule : 
versionRules.values()) {
-        microserviceVersionRule.deleteMicroserviceVersion(version);
-      }
-    });
-  }
-
   private List<MicroserviceInstance> mergeInstances(List<MicroserviceInstance> 
pulledInstances,
       List<MicroserviceInstance> inUseInstances) {
     List<MicroserviceInstance> upInstances = pulledInstances
diff --git 
a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/consumer/TestMicroserviceVersionRule.java
 
b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/consumer/TestMicroserviceVersionRule.java
index 8ac62a5..659c8af 100644
--- 
a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/consumer/TestMicroserviceVersionRule.java
+++ 
b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/consumer/TestMicroserviceVersionRule.java
@@ -78,7 +78,8 @@ public class TestMicroserviceVersionRule {
     microserviceVersionRule.addMicroserviceVersion(v2);
 
     microserviceVersionRule.deleteMicroserviceVersion(v2);
-    Assert.assertNull(microserviceVersionRule.getLatestMicroserviceVersion());
+    // keep a latest version always, event no versions.
+    
Assert.assertEquals(microserviceVersionRule.getLatestMicroserviceVersion(), v2);
   }
 
   @Test
@@ -110,5 +111,12 @@ public class TestMicroserviceVersionRule {
         microserviceVersionRule.getInstanceCache().getInstanceMap());
     Assert.assertSame(microserviceVersionRule.getInstances(),
         microserviceVersionRule.getVersionedCache().data());
+    
Assert.assertEquals(microserviceVersionRule.getLatestMicroserviceVersion(), v2);
+    microserviceVersionRule.setInstances(Arrays.asList(instance2));
+    
Assert.assertEquals(microserviceVersionRule.getLatestMicroserviceVersion(), v2);
+
+    MicroserviceVersion v3 = 
MicroserviceVersionTestUtils.createMicroserviceVersion("3", "3.0.0");
+    microserviceVersionRule.addMicroserviceVersion(v3);
+    
Assert.assertEquals(microserviceVersionRule.getLatestMicroserviceVersion(), v2);
   }
 }
diff --git 
a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/consumer/TestMicroserviceVersions.java
 
b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/consumer/TestMicroserviceVersions.java
index e4e48e5..9614048 100644
--- 
a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/consumer/TestMicroserviceVersions.java
+++ 
b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/consumer/TestMicroserviceVersions.java
@@ -25,7 +25,6 @@ import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils;
 import org.apache.servicecomb.serviceregistry.RegistryUtils;
-import org.apache.servicecomb.serviceregistry.ServiceRegistry;
 import org.apache.servicecomb.serviceregistry.api.Const;
 import org.apache.servicecomb.serviceregistry.api.MicroserviceKey;
 import org.apache.servicecomb.serviceregistry.api.registry.Microservice;
@@ -47,7 +46,6 @@ import com.google.common.eventbus.Subscribe;
 
 import mockit.Deencapsulation;
 import mockit.Expectations;
-import mockit.Injectable;
 import mockit.Mock;
 import mockit.MockUp;
 import mockit.Mocked;
@@ -387,33 +385,4 @@ public class TestMicroserviceVersions {
         new MicroserviceVersions(appManager, appId, "false" + appId + 
Const.APP_SERVICE_SEPARATOR + microserviceName);
     checkIsEventAccept(key, false);
   }
-
-  @Test
-  public void testPack(@Injectable MicroserviceInstance instance, @Injectable 
Microservice microservice) {
-    ServiceRegistry serviceRegistry = new MockUp<ServiceRegistry>() {
-      @Mock
-      Microservice getRemoteMicroservice(String microserviceId) {
-        return microservice;
-      }
-    }.getMockInstance();
-    RegistryUtils.setServiceRegistry(serviceRegistry);
-
-    new Expectations() {
-      {
-        instance.getStatus();
-        result = MicroserviceInstanceStatus.UP;
-        instance.getServiceId();
-        result = microserviceName;
-        microservice.getVersion();
-        result = "0.3.0";
-      }
-    };
-    List<MicroserviceInstance> instances = new ArrayList<>();
-    instances.add(instance);
-    MicroserviceVersions testVersions = new MicroserviceVersions(appManager, 
appId, microserviceName);
-    testVersions.safeSetInstances(instances, "100");
-    Assert.assertEquals(testVersions.getVersions().size(), 1);
-    testVersions.safeSetInstances(new ArrayList<>(), "120");
-    Assert.assertEquals(testVersions.getVersions().size(), 0);
-  }
 }

Reply via email to