lease: do lease delection in the kv txn

This commit is contained in:
Xiang Li 2016-08-04 08:35:15 -07:00
parent 4d59b6f52c
commit 75c06cacae

View File

@ -232,17 +232,20 @@ func (le *lessor) Revoke(id LeaseID) error {
}
}
le.mu.Lock()
defer le.mu.Unlock()
delete(le.leaseMap, l.ID)
// lease deletion needs to be in the same backend transcation with the
// kv deletion. Or we might end up with not executing the revoke or not
// deleting the keys if etcdserver fails in between.
l.removeFrom(le.b)
err := le.rd.TxnEnd(tid)
if err != nil {
panic(err)
}
}
le.mu.Lock()
defer le.mu.Unlock()
delete(le.leaseMap, l.ID)
l.removeFrom(le.b)
return nil
}
@ -470,9 +473,7 @@ func (l Lease) persistTo(b backend.Backend) {
func (l Lease) removeFrom(b backend.Backend) {
key := int64ToBytes(int64(l.ID))
b.BatchTx().Lock()
b.BatchTx().UnsafeDelete(leaseBucketName, key)
b.BatchTx().Unlock()
}
// refresh refreshes the expiry of the lease.