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

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

wujimin 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_r191081945
 
 

 ##########
 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:
   ConcurrentHashMapEx extends from ConcurrentHashMap
   ConcurrentHashMap.computeIfAbsent even lock when key exists, so there is 
performance problem
   
   ```
     // ConcurrentHashMap.computeIfAbsent always do "synchronized" operation
     // so we wrap it to improve performance
     @Override
     public V computeIfAbsent(K key, Function<? super K, ? extends V> 
mappingFunction) {
       V value = get(key);
       if (value != null) {
         return value;
       }
   
       return super.computeIfAbsent(key, mappingFunction);
     }
   ```

----------------------------------------------------------------
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:
us...@infra.apache.org


> 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