我试图了解 etcd 上的“原子”更新是什么。
当我想到“原子”时,我认为有“之前”和“之后”(没有期间,如果更新失败,它仍然是“之前”)。
这是一个例子:
curl -s -XPUT http://localhost:2379/v2/keys/message -d value='Hidee Ho'
因此,此时,任何人都可以访问该消息并获取当前值:
curl -s http://localhost:2379/v2/keys/message
{"action":"get","node":{"key":"/message","value":"Hidee Ho","modifiedIndex":4748,"createdIndex":4748}}
稍后,我可以修改这个值,如下所示:
curl -s -XPUT http://localhost:2379/v2/keys/message -d value='Mr Hanky'
并且可以像以前一样获取结果。在我更改值“Hidee Ho”之前返回,更改后值“Mr Hanky”返回。所以,我的问题是我能保证其中一个结果吗?也就是说,我想确认将返回一个或另一个(而不是结果之间的nil值)。
我不是特别在意时间。如果我进行 Hanky 先生更新,并且随后的价值获取者在(短)一段时间内继续获得 Hidee Ho,那没关系。
我很困惑,因为协议中有一个 Atomic CompareAndSwap函数。据我所知,它不是原子的,而是“只有当值是我所说的值时才进行更新”。就我而言,我不太在乎过去的价值。我只想知道它已经改变了,除了“之前”或“之后”值之外,没有读者会看到任何东西。