Skip to content

nacos 2.0.0-bugfix版本,选主失败,此时nacos-client-2.0.0版本服务注册成功,但是控制台不显示 #5361

@MajorHe1

Description

@MajorHe1

Describe the bug
注意到有几个issue 在提2.0.0版本的 nacos-client无法注册服务的问题,例如
#5299
#5339
总体表现为客户端没有异常,但是控制台上看不到注册的服务。
我自己在测试的时候也发现了这个问题。

Expected behavior
其实这个时候服务是没有注册成功的,客户端应该给出异常信息

How to Reproduce
描述一下背景吧

  1. 首先nacos 集群 jraft 选主失败,假设此时存在三台机器 A、B、C,机器B、C处于 server is DOWN now 的状态,无法工作,剩下机器A正常工作
  2. 使用nacos-client-2.0.0版本向机器A注册服务,显示成功,没有异常,但是机器A的控制台并不能看到该服务,使用openAPI查询也查不到,证明此时服务注册其实并没有成功
  3. 使用nacos-client-1.4.1版本或更早的版本向机器A注册服务,显示成功,此时机器A的控制台可以看到该服务
  4. 使用nacos-client-2.0.0版本向机器A注册持久服务而非临时服务,显示成功,此时机器A的控制台可以看到该服务

原因分析
由上述2、3、4三种情况的对比可知,使用grpc协议注册出了问题,http协议注册是正常的。

分析代码
当grpc协议进行注册的时候:
image
可以看到只是publish 了事件就返回,所以客户端看不到异常。实际上事件的监听方在执行的时候,ClientRegisterServiceEvent 触发 ServiceChangedEvent,最后:
image
所以服务注册并没有成功。

修复建议
提交了一个简单的PR,将upgradeJudgement.isUseGrpcFeatures() 提前到注册之前就判断,可以临时解决一下
想知道nacos团队如何看待这个问题,有没有完善一点的解决方案
尤其是在做cp协议和ap协议分离的时候,因为这个问题我理解本质上是 jraft 选主失败导致的。

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions