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.
 | 
			
		||||
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…
	
	Add table
		Add a link
		
	
		Reference in a new issue