Uploaded image for project: 'Apache ServiceComb'
  1. Apache ServiceComb
  2. SCB-2337

There is no timing verification for MicroserviceVersions

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Minor
    • Resolution: Fixed
    • java-chassis-2.1.5
    • java-chassis-2.6.0
    • Java-Chassis
    • None

    Description

      背景:当前正在使用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中,导致丢失此次更新事件,之后缓存无法恢复,服务间调用持续失败。

      Attachments

        Activity

          People

            liubao68 liubao
            maxucheng0 MaXuCheng
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: