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 2f1df0ce8769340bdfa38011deed8159a330e9ef
Author: weixing <jeho0...@163.com>
AuthorDate: Thu May 10 17:11:03 2018 +0800

    [SCB-546] bug fix: in production enviroment, first time register 
microservice, schemas's summary is null, registerSchemas will throw exception.
    
    if the summary is null, will re-gister the schema.
---
 .../task/MicroserviceRegisterTask.java             |  2 +-
 .../task/TestMicroserviceRegisterTask.java         | 37 ++++++++++++++++++++++
 2 files changed, 38 insertions(+), 1 deletion(-)

diff --git 
a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/task/MicroserviceRegisterTask.java
 
b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/task/MicroserviceRegisterTask.java
index fe3f5c9..d8b186b 100644
--- 
a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/task/MicroserviceRegisterTask.java
+++ 
b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/task/MicroserviceRegisterTask.java
@@ -164,7 +164,7 @@ public class MicroserviceRegisterTask extends 
AbstractRegisterTask {
         String curSchemaSumary = existSchema.getSummary();
         String schemaSummary = Hashing.sha256().newHasher().putString(content, 
Charsets.UTF_8).hash().toString();
         if (!schemaSummary.equals(curSchemaSumary)) {
-          if 
(microservice.getInstance().getEnvironment().equalsIgnoreCase("development")) {
+          if (curSchemaSumary == null || 
microservice.getInstance().getEnvironment().equalsIgnoreCase("development")) {
             LOGGER.info(
                 "schemaId [{}]'s content changes and the current enviroment is 
development, so re-register it!",
                 schemaId);
diff --git 
a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/task/TestMicroserviceRegisterTask.java
 
b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/task/TestMicroserviceRegisterTask.java
index 2afbe48..7932d68 100644
--- 
a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/task/TestMicroserviceRegisterTask.java
+++ 
b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/task/TestMicroserviceRegisterTask.java
@@ -265,6 +265,43 @@ public class TestMicroserviceRegisterTask {
     Assert.assertEquals(1, taskList.size());
   }
 
+  @Test
+  public void testFirstRegisterForProd(@Mocked ServiceRegistryClient srClient) 
{
+    Microservice otherMicroservice = new Microservice();
+    otherMicroservice.setAppId(microservice.getAppId());
+    otherMicroservice.setServiceName("ms1");
+    otherMicroservice.addSchema("s1", "");
+
+    List<GetSchemaResponse> list = new ArrayList<>();
+    GetSchemaResponse resp = new GetSchemaResponse();
+    resp.setSchemaId("s1");
+    resp.setSummary(null);
+    list.add(resp);
+
+    new Expectations() {
+      {
+        srClient.getMicroserviceId(anyString, anyString, anyString, anyString);
+        result = "serviceId";
+        srClient.getMicroservice(anyString);
+        result = otherMicroservice;
+        srClient.getSchemas(anyString);
+        result = list;
+        srClient.registerSchema(microservice.getServiceId(), anyString, 
anyString);
+        result = true;
+      }
+    };
+
+    microservice.addSchema("s1", "");
+    microservice.getInstance().setEnvironment("production");
+    MicroserviceRegisterTask registerTask = new 
MicroserviceRegisterTask(eventBus, srClient, microservice);
+    registerTask.run();
+
+    Assert.assertEquals(true, registerTask.isRegistered());
+    Assert.assertEquals(true, registerTask.isSchemaIdSetMatch());
+    Assert.assertEquals("serviceId", microservice.getServiceId());
+    Assert.assertEquals(1, taskList.size());
+  }
+
   @Test(expected = IllegalStateException.class)
   public void testReRegisteredSetForProd(@Mocked ServiceRegistryClient 
srClient) {
     Microservice otherMicroservice = new Microservice();

-- 
To stop receiving notification emails like this one, please contact
liu...@apache.org.

Reply via email to