[ 
https://issues.apache.org/jira/browse/SCB-589?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16491590#comment-16491590
 ] 

ASF GitHub Bot commented on SCB-589:
------------------------------------

WillemJiang commented on a change in pull request #728:  [SCB-589] Consumer 
producer upgrade unordered
URL: 
https://github.com/apache/incubator-servicecomb-java-chassis/pull/728#discussion_r191044562
 
 

 ##########
 File path: 
core/src/main/java/org/apache/servicecomb/core/provider/consumer/ConsumerProviderManager.java
 ##########
 @@ -54,38 +51,32 @@ public void init() throws Exception {
     }
   }
 
-  public ReferenceConfig createReferenceConfig(String microserviceName, String 
microserviceVersion,
-      String transport) {
-    return new ReferenceConfig(consumerSchemaFactory, microserviceName, 
microserviceVersion, transport);
+  public ReferenceConfig createReferenceConfig(String microserviceName, String 
versionRule, String transport) {
+    return new ReferenceConfig(appManager, microserviceName, versionRule, 
transport);
   }
 
-  public ReferenceConfig getReferenceConfig(String microserviceName) {
-    ReferenceConfig config = referenceConfigMap.get(microserviceName);
-    if (config == null) {
-      synchronized (this) {
-        config = referenceConfigMap.get(microserviceName);
-        if (config == null) {
-          String key = "cse.references." + microserviceName;
-          DynamicStringProperty versionRule = 
DynamicPropertyFactory.getInstance()
-              .getStringProperty(key + ".version-rule",
-                  DynamicPropertyFactory.getInstance()
-                      .getStringProperty("cse.references.version-rule", 
Const.VERSION_RULE_LATEST)
-                      .getValue());
-          DynamicStringProperty transport =
-              DynamicPropertyFactory.getInstance().getStringProperty(key + 
".transport",
-                  DynamicPropertyFactory.getInstance()
-                      .getStringProperty("cse.references.transport",
-                          Const.ANY_TRANSPORT)
-                      .getValue());
-
-          config = new ReferenceConfig(consumerSchemaFactory, 
microserviceName, versionRule.getValue(),
-              transport.getValue());
-          referenceConfigMap.put(microserviceName, config);
-        }
-      }
-    }
+  public ReferenceConfig createReferenceConfig(String microserviceName) {
+    String key = "cse.references." + microserviceName;
 
-    return config;
+    String defaultVersionRule = DynamicPropertyFactory.getInstance()
+        .getStringProperty("cse.references.version-rule", 
DefinitionConst.VERSION_RULE_ALL)
+        .get();
+    String versionRule = DynamicPropertyFactory.getInstance()
+        .getStringProperty(key + ".version-rule", defaultVersionRule)
+        .get();
+
+    String defaultTransport = DynamicPropertyFactory.getInstance()
+        .getStringProperty("cse.references.transport", Const.ANY_TRANSPORT)
+        .get();
+    String transport = DynamicPropertyFactory.getInstance()
+        .getStringProperty(key + ".transport", defaultTransport)
+        .get();
+
+    return new ReferenceConfig(appManager, microserviceName, versionRule, 
transport);
+  }
+
+  public ReferenceConfig getReferenceConfig(String microserviceName) {
+    return referenceConfigMap.computeIfAbsent(microserviceName, 
this::createReferenceConfig);
 
 Review comment:
   Not sure if the ConcurrentHashMapEx.computeIfAbsent is atomic,  but if we 
use the JDK's  one, it's atomic.
   
https://stackoverflow.com/questions/26481796/concurrenthashmap-computeifabsent

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


> allow consumer upgrade before producer
> --------------------------------------
>
>                 Key: SCB-589
>                 URL: https://issues.apache.org/jira/browse/SCB-589
>             Project: Apache ServiceComb
>          Issue Type: Task
>          Components: Java-Chassis
>            Reporter: wujimin
>            Assignee: wujimin
>            Priority: Major
>
> 1.normal consumer use PrivateMicroserviceClassLoaderFactory, just like edge
> 2.consumer microserviceMeta will not save in microserviceMetaManager any 
> more, just like edge, use appManager; and change consumer default versionRule 
> from latest to all
> 3.allow consumer schema set or method set bigger than contract
> 4.protobuf dynamic class created in microservice classloader
> 5.seems that can delete MicroserviceMetaManager
> 6.edge remains task should be finished: 
> https://issues.apache.org/jira/browse/SCB-279
>  
> jackson hold classes by a LRU map, will not always hold class, so there is no 
> big problems.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to