fengjiachun / Jupiter

Jupiter是一款性能非常不错的, 轻量级的分布式服务框架

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

DefaultRegistryServer#handlePublish(...)并发问题

anyoptional opened this issue · comments

Your question

DefaultRegistryServer#handlePublish(...)方法中提到putIfAbsent和config.newVersion()需要是原子操作, 所以需要加锁。按照我的理解,if (config.getConfig().putIfAbsent(meta.getAddress(), meta) == null) 这一步已经是原子操作了,相应地保证了 config.newVersion() 不会被执行多次,是不是这里不需要加锁呢?

Your scenes

Describe your use scenes (why need this feature)

Your advice

Describe the advice or solution you'd like

Environment

  • Jupiter version: Jupiter 1.3.1
  • JVM version (e.g. java -version): java 8
  • OS version (e.g. uname -a): Windows
  • Maven version: 3.6.0
  • IDE version: IDEA 2021

你好,看了下,代码有点久远不太想的起来当时的意图,不过你说的应该是对的,不需要加锁
可能有一点影响: version 是 config 粒度的,会导致 version 和原来的行为有差别

你好,看了下,代码有点久远不太想的起来当时的意图,不过你说的应该是对的,不需要加锁
可能有一点影响: version 是 config 粒度的,会导致 version 和原来的行为有差别

因为目前只看了代码库中注册中心部分,RPC还没来得及看,理解得可能比较片面。感谢解答。