Fix key usage time update if the key is used in parallel for multiple operations (#2185)
This commit is contained in:
parent
3702dac0d5
commit
dde0052ca2
1 changed files with 9 additions and 4 deletions
|
@ -496,16 +496,21 @@ func UpdatePublicKey(key *PublicKey) error {
|
||||||
// UpdatePublicKeyUpdated updates public key use time.
|
// UpdatePublicKeyUpdated updates public key use time.
|
||||||
func UpdatePublicKeyUpdated(id int64) error {
|
func UpdatePublicKeyUpdated(id int64) error {
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
cnt, err := x.ID(id).Cols("updated_unix").Update(&PublicKey{
|
// Check if key exists before update as affected rows count is unreliable
|
||||||
|
// and will return 0 affected rows if two updates are made at the same time
|
||||||
|
if cnt, err := x.ID(id).Count(&PublicKey{}); err != nil {
|
||||||
|
return err
|
||||||
|
} else if cnt != 1 {
|
||||||
|
return ErrKeyNotExist{id}
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := x.ID(id).Cols("updated_unix").Update(&PublicKey{
|
||||||
Updated: now,
|
Updated: now,
|
||||||
UpdatedUnix: now.Unix(),
|
UpdatedUnix: now.Unix(),
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if cnt != 1 {
|
|
||||||
return ErrKeyNotExist{id}
|
|
||||||
}
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Reference in a new issue