You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2022/07/27 08:15:04 UTC

[servicecomb-java-chassis] branch master updated: [#3187]Automatic updating of contracts for third parties using Servic… (#3212)

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 aade1f2b7 [#3187]Automatic updating of contracts for third parties using Servic… (#3212)
aade1f2b7 is described below

commit aade1f2b7f93e80e515bce1b11618337719d0b37
Author: hujinming <84...@users.noreply.github.com>
AuthorDate: Wed Jul 27 16:14:59 2022 +0800

    [#3187]Automatic updating of contracts for third parties using Servic… (#3212)
---
 .../center/client/ServiceCenterRegistration.java   | 28 ++++++++++++----------
 .../client/model/ServiceCenterConfiguration.java   | 17 ++++++++++---
 2 files changed, 29 insertions(+), 16 deletions(-)

diff --git a/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterRegistration.java b/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterRegistration.java
index c62b14d54..38de99e91 100644
--- a/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterRegistration.java
+++ b/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterRegistration.java
@@ -131,12 +131,23 @@ public class ServiceCenterRegistration extends AbstractTask {
           startTask(new RegisterSchemaTask(0));
         } else {
           Microservice newMicroservice = serviceCenterClient.getMicroserviceByServiceId(serviceResponse.getServiceId());
-          dealIsSwaggerDifferent(newMicroservice);
           microservice.setServiceId(serviceResponse.getServiceId());
           microserviceInstance.setServiceId(serviceResponse.getServiceId());
           microserviceInstance.setMicroservice(microservice);
+          if (isSwaggerDifferent(newMicroservice)) {
+            if (serviceCenterConfiguration.isCanOverwriteSwagger()) {
+              LOGGER.warn("Service has already registered, but schema ids not equal, try to register it again");
+              startTask(new RegisterSchemaTask(0));
+              return;
+            }
+            if (serviceCenterConfiguration.isIgnoreSwaggerDifferent()) {
+              LOGGER.warn("Service has already registered, but schema ids not equal. Ignore and continue to register");
+            } else {
+              throw new IllegalStateException("Service has already registered, but schema ids not equal, stop register. "
+                      + "Change the microservice version or delete the old microservice info and try again.");
+            }
+          }
           eventBus.post(new MicroserviceRegistrationEvent(true));
-          LOGGER.info("microservice is already registered, meta info like swagger contents will not be updated.");
           startTask(new RegisterMicroserviceInstanceTask(0));
         }
       } catch (IllegalStateException e) {
@@ -149,17 +160,8 @@ public class ServiceCenterRegistration extends AbstractTask {
     }
   }
 
-  private void dealIsSwaggerDifferent(Microservice newMicroservice) {
-    if (isListEquals(newMicroservice.getSchemas(), microservice.getSchemas())) {
-      return;
-    }
-    if (!serviceCenterConfiguration.isIgnoreSwaggerDifferent()) {
-      throw new IllegalStateException("Service has already registered, but schema ids not equal, stop register. "
-          + "Change the microservice version or delete the old microservice info and try again.");
-    }
-    LOGGER.warn("Service has already registered, but schema ids not equal. However, it will continue to register. "
-        + "If you want to eliminate this warning. you can Change the microservice version or delete the old " +
-        "microservice info and try again. eg: version:1.0.0 -> 1.0.1");
+  private boolean isSwaggerDifferent(Microservice newMicroservice) {
+    return !isListEquals(newMicroservice.getSchemas(), microservice.getSchemas());
   }
 
   private boolean isListEquals(List<String> one, List<String> two) {
diff --git a/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/model/ServiceCenterConfiguration.java b/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/model/ServiceCenterConfiguration.java
index a45225980..bc7618aa0 100644
--- a/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/model/ServiceCenterConfiguration.java
+++ b/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/model/ServiceCenterConfiguration.java
@@ -24,14 +24,25 @@ public class ServiceCenterConfiguration {
    * when swagger is different between local with remote serviceCenter. if ignoreSwaggerDifferent is true.
    * it will ignore the different and continue the program. otherwise, the program will be stop.
    */
-  private Boolean ignoreSwaggerDifferent;
+  private boolean ignoreSwaggerDifferent;
 
-  public Boolean isIgnoreSwaggerDifferent() {
+  private boolean canOverwriteSwagger = true;
+
+  public boolean isIgnoreSwaggerDifferent() {
     return ignoreSwaggerDifferent;
   }
 
-  public ServiceCenterConfiguration setIgnoreSwaggerDifferent(Boolean ignoreSwaggerDifferent) {
+  public boolean isCanOverwriteSwagger(){
+    return canOverwriteSwagger;
+  }
+
+  public ServiceCenterConfiguration setIgnoreSwaggerDifferent(boolean ignoreSwaggerDifferent) {
     this.ignoreSwaggerDifferent = ignoreSwaggerDifferent;
     return this;
   }
+
+  public ServiceCenterConfiguration setCanOverwriteSwagger(boolean canOverwriteSwagger) {
+    this.canOverwriteSwagger = canOverwriteSwagger;
+    return this;
+  }
 }