skip triggering the before hooks on record delete retry
This commit is contained in:
		
							parent
							
								
									0fa5edb0b1
								
							
						
					
					
						commit
						44a69eb4ba
					
				|  | @ -353,7 +353,7 @@ func (dao *Dao) DeleteRecord(record *models.Record) error { | ||||||
| 	attempts := 1 | 	attempts := 1 | ||||||
| 
 | 
 | ||||||
| Retry: | Retry: | ||||||
| 	err := dao.deleteRecord(record) | 	err := dao.deleteRecord(record, attempts) | ||||||
| 	if err != nil && | 	if err != nil && | ||||||
| 		attempts <= maxAttempts && | 		attempts <= maxAttempts && | ||||||
| 		// note: we are checking the error msg so that we can handle both the cgo and noncgo errors
 | 		// note: we are checking the error msg so that we can handle both the cgo and noncgo errors
 | ||||||
|  | @ -366,8 +366,26 @@ Retry: | ||||||
| 	return err | 	return err | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (dao *Dao) deleteRecord(record *models.Record) error { | func (dao *Dao) deleteRecord(record *models.Record, attempts int) error { | ||||||
| 	return dao.RunInTransaction(func(txDao *Dao) error { | 	return dao.RunInTransaction(func(txDao *Dao) error { | ||||||
|  | 		// unset transaction dao before hook on retry to avoid
 | ||||||
|  | 		// triggering the same before callbacks multiple times
 | ||||||
|  | 		if attempts > 1 { | ||||||
|  | 			oldBeforeCreateFunc := txDao.BeforeCreateFunc | ||||||
|  | 			oldBeforeUpdateFunc := txDao.BeforeUpdateFunc | ||||||
|  | 			oldBeforeDeleteFunc := txDao.BeforeDeleteFunc | ||||||
|  | 			txDao.BeforeCreateFunc = nil | ||||||
|  | 			txDao.BeforeUpdateFunc = nil | ||||||
|  | 			txDao.BeforeDeleteFunc = nil | ||||||
|  | 			defer func() { | ||||||
|  | 				if txDao != nil { | ||||||
|  | 					txDao.BeforeCreateFunc = oldBeforeCreateFunc | ||||||
|  | 					txDao.BeforeUpdateFunc = oldBeforeUpdateFunc | ||||||
|  | 					txDao.BeforeDeleteFunc = oldBeforeDeleteFunc | ||||||
|  | 				} | ||||||
|  | 			}() | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
| 		// check for references
 | 		// check for references
 | ||||||
| 		refs, err := txDao.FindCollectionReferences(record.Collection()) | 		refs, err := txDao.FindCollectionReferences(record.Collection()) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue