mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
parent
f9d27c37aa
commit
08818886b2
@ -58,7 +58,7 @@ You may notice that in this example the index is `2` even though it is the first
|
||||
This is because there are internal commands that also change the state behind the scenes, like adding and syncing servers.
|
||||
|
||||
5. `node.modifiedIndex`: like `node.createdIndex`, this attribute is also an etcd index.
|
||||
Actions that cause the value to change include `set`, `delete`, `update`, `create` and `compareAndSwap`.
|
||||
Actions that cause the value to change include `set`, `delete`, `update`, `create`, `compareAndSwap` and `compareAndDelete`.
|
||||
Since the `get` and `watch` commands do not change state in the store, they do not change the value of `node.modifiedIndex`.
|
||||
|
||||
|
||||
@ -475,6 +475,79 @@ The response should be:
|
||||
|
||||
We successfully changed the value from "one" to "two" since we gave the correct previous value.
|
||||
|
||||
### Atomic Compare-and-Delete
|
||||
|
||||
This command will delete a key only if the client-provided conditions are equal to the current conditions.
|
||||
|
||||
The current comparable conditions are:
|
||||
|
||||
1. `prevValue` - checks the previous value of the key.
|
||||
|
||||
2. `prevIndex` - checks the previous modifiedIndex of the key.
|
||||
|
||||
Here is a simple example. Let's first create a key: `foo=one`.
|
||||
|
||||
```sh
|
||||
curl -L http://127.0.0.1:4001/v2/keys/foo -XPUT -d value=one
|
||||
```
|
||||
|
||||
Now let's try some `CompareAndDelete` commands.
|
||||
|
||||
Trying to delete the key with `prevValue=two` fails as expected:
|
||||
```sh
|
||||
curl -L http://127.0.0.1:4001/v2/keys/foo?prevValue=two -XDELETE
|
||||
```
|
||||
|
||||
The error code explains the problem:
|
||||
|
||||
```json
|
||||
{
|
||||
"errorCode": 101,
|
||||
"message": "Compare failed",
|
||||
"cause": "[two != one] [0 != 8]",
|
||||
"index": 8
|
||||
}
|
||||
```
|
||||
|
||||
As does a `CompareAndDelete` with a mismatched `prevIndex`:
|
||||
|
||||
```sh
|
||||
curl -L http://127.0.0.1:4001/v2/keys/foo?prevIndex=1 -XDELETE
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"errorCode": 101,
|
||||
"message": "Compare failed",
|
||||
"cause": "[ != one] [1 != 8]",
|
||||
"index": 8
|
||||
}
|
||||
```
|
||||
|
||||
And now a valid `prevValue` condition:
|
||||
|
||||
```sh
|
||||
curl -L http://127.0.0.1:4001/v2/keys/foo?prevValue=one -XDELETE
|
||||
```
|
||||
|
||||
The successful response will look something like:
|
||||
|
||||
```json
|
||||
{
|
||||
"action": "compareAndDelete",
|
||||
"node": {
|
||||
"key": "/foo",
|
||||
"modifiedIndex": 9,
|
||||
"createdIndex": 8
|
||||
},
|
||||
"prevNode": {
|
||||
"key": "/foo",
|
||||
"value": "one",
|
||||
"modifiedIndex": 8,
|
||||
"createdIndex": 8
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Creating Directories
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user