[ https://issues.apache.org/jira/browse/SCB-2337?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
liubao reassigned SCB-2337: --------------------------- Assignee: liubao > There is no timing verification for MicroserviceVersions > -------------------------------------------------------- > > Key: SCB-2337 > URL: https://issues.apache.org/jira/browse/SCB-2337 > Project: Apache ServiceComb > Issue Type: Bug > Components: Java-Chassis > Affects Versions: java-chassis-2.1.5 > Reporter: MaXuCheng > Assignee: liubao > Priority: Minor > Fix For: java-chassis-2.6.0 > > > 背景:当前正在使用servicecomb-java-chassis 2.1.5版本,之前使用servicecomb-java-chassis > 1.3.1版本,在1.3.1版本中,MicroserviceVersions会定时(30s)触发pullInstances来更新实例缓存,在2.1.5发现仅能通过实例更新事件触发MicroserviceVersions中的缓存更新,如果更新事件丢失,且后续没有实例新的更新事件,缓存一致性无法保证。 > 现象:实例注册后更新实例属性成功,在其他服务实例中进行服务间调用时指定transactionControl仅调用存在对应属性的服务实例,Load > balancer报错无法找到可用实例。 > 原因分析:MicroserviceVersions在初始化时先进行了pullInstances之后将此microserviceVersions放入versionsByName的map中,在执行pullInstances时如果收到了更新事件,会触发MicroserviceManager里面的全量更新方法,此方法是通过遍历versionsByName中的MicroserviceVersions进行pullInstances的调用,此时之前创建的microserviceVersions未放入versionsByName中,导致丢失此次更新事件,之后缓存无法恢复,服务间调用持续失败。 -- This message was sent by Atlassian Jira (v8.3.4#803005)