Fix key usage time update if the key is used in parallel for multiple operations (#2185)

tokarchuk/v1.17
Lauris BH 7 years ago committed by Lunny Xiao
parent 3702dac0d5
commit dde0052ca2
  1. 13
      models/ssh_key.go

@ -496,16 +496,21 @@ func UpdatePublicKey(key *PublicKey) error {
// UpdatePublicKeyUpdated updates public key use time.
func UpdatePublicKeyUpdated(id int64) error {
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,
UpdatedUnix: now.Unix(),
})
if err != nil {
return err
}
if cnt != 1 {
return ErrKeyNotExist{id}
}
return nil
}

Loading…
Cancel
Save