nacos write lock failed without retry

taor4pac  于 4个月前  发布在  Nacos
关注(0)|答案(2)|浏览(115)

Describe the bug
A clear and concise description of what the bug is.
nacos server版本: 2.1.0, 3节点部署 + derby
client: go-sdk
如图所示

这里dump配置的时候, 如果有其他请求正在读配置(readLock), 是不是会导致dump失败? dump失败的话就只能等对账任务了, 在此之前, server的md5 cache都是错误的.

Expected behavior
A clear and concise description of what you expected to happen.
获取写锁失败, 等待或者重试
Actually behavior
A clear and concise description of what you actually to happen.
某个nacos server节点获取写锁失败后, md5缓存一直是旧的, 直到几个小时后的全量对账任务触发, 配置才刷新.
正常节点:
01:00:30, 配置更新, 该配置缓存md5刷新为: 8d1943c68eecedc84e431c912fbca0e5
config-pull-check.log.2024-08-20.0

异常节点:
01:00:30 获取写锁失败, md5缓存一直未能刷新, 还是旧的: b7ce55d429195cf56609bd68787ebedf
config-dump.log.2024-08-20.0, 01:00:00

config-pull-check.log.2024-08-20.0, 01:00:00

直到几个小时后(06:19)的全量对账任务启动, md5才刷新
config-dump.log.2024-08-20.0, 06:00:00

config-pull-check.log.2024-08-20.0, 06:00:00

How to Reproduce
Steps to reproduce the behavior:
未能稳定复现

Desktop (please complete the following information):

Additional context
Add any other context about the problem here.
我们的客户端是go-sdk, 与java客户端不同的是, long-pulling和getInnerConfig可能会请求不同的nacos server

uplii1fm

uplii1fm1#

能否试一下新版本,我看最新版本的逻辑应该有修改过。

drnojrws

drnojrws2#

能否试一下新版本,我看最新版本的逻辑应该有修改过。

不知道我理解的对不对, 新版本的代码似乎还是没有解决这个问题, 更新配置时没有关心dump动作是否成功, 也没有重试机制

写配置:

ConfigDumpEvent事件处理, 忽略了dump动作的返回值, 没有做失败重试

而dump动作中, 还是会出现"只要被上了读锁, dump就会失败"的情况

不同的是新版本增加了一个定时任务DumpChangeConfigWorker, 每30s让dump动作失败有一个兜底, 让不一致的情况会在较短时间内自动修复.

求帮忙看看, 是我理解的有问题, 还是确实存在上述情况, 需要修复?

相关问题