You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@servicecomb.apache.org by "liubao (Jira)" <ji...@apache.org> on 2021/09/18 08:21:00 UTC

[jira] [Assigned] (SCB-2337) There is no timing verification for MicroserviceVersions

     [ 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)