Browse Source

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

for-closed-social
Lauris BH 7 years ago
committed by Lunny Xiao
parent
commit
dde0052ca2
1 changed files with 9 additions and 4 deletions
  1. +9
    -4
      models/ssh_key.go

+ 9
- 4
models/ssh_key.go View File

@ -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