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