mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
storage: delete key instead of setting it to false
When getting the watched events, it iterate all keys in putm and delm to generate the events. If we don't delete the key from putm/delm, it would range on the key that is not actually put or deleted. This is incorrect. Fix the panic that happens when single put/delete is watched.
This commit is contained in:
@@ -317,12 +317,16 @@ func newOngoingTx() *ongoingTx {
|
||||
|
||||
func (tx *ongoingTx) put(k string) {
|
||||
tx.putm[k] = true
|
||||
tx.delm[k] = false
|
||||
if _, ok := tx.delm[k]; ok {
|
||||
delete(tx.delm, k)
|
||||
}
|
||||
}
|
||||
|
||||
func (tx *ongoingTx) del(k string) {
|
||||
tx.delm[k] = true
|
||||
tx.putm[k] = false
|
||||
if _, ok := tx.putm[k]; ok {
|
||||
delete(tx.putm, k)
|
||||
}
|
||||
}
|
||||
|
||||
type watching struct {
|
||||
|
||||
Reference in New Issue
Block a user