[#3187]Automatic updating of contracts for third parties using Servic… (#3212)
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 c62b14d..38de99e 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 @@
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 @@
}
}
- 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 a452259..bc7618a 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 @@
* 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;
+ }
}