diff --git a/models/ssh_key.go b/models/ssh_key.go index f70e16c62..649c50be6 100644 --- a/models/ssh_key.go +++ b/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 }