Add WithRetry() to DBWrapper

This commit is contained in:
Noah Hilverling 2019-02-25 10:33:39 +01:00
parent b3afe0385a
commit daff13165d

View file

@ -635,6 +635,29 @@ func (dbw *DBWrapper) SqlExecQuiet(opDescription string, sql string, args ...int
}
}
return res, err
}
}
func IsRetryableError(err error) bool {
if strings.Contains(err.Error(), "Deadlock found when trying to get lock") {
return true
}
return false
}
func (dbw *DBWrapper) WithRetry(f func() (sql.Result, error)) (sql.Result, error) {
for {
res, err := f()
if err != nil {
if IsRetryableError(err) {
continue
} else {
return nil, err
}
}
return res, err
}
}