Handle ETCD event cleared exception during blocking lock #250
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Currently if a lock is held by someone and you try to perform a blocking acquire, its possible for ETCD to return a 401 (etcd.EtcdEventIndexCleared) when more than 1000 events have occurred since the key was modified. This gets caught here https://github.com/jplana/python-etcd/blob/master/src/etcd/lock.py#L130 and another watch call is made with the same arguments which will again fail leaving it in a
while True
loop of repeated calls that fail.ETCD docs ( https://coreos.com/etcd/docs/latest/v2/api.html#waiting-for-a-change. ) describe how you recover from this situation by performing a get to obtain the current state and starting a watch from etcd-index + 1 .