From daff13165d6f6095c034da5ba2e0ac690dee04f9 Mon Sep 17 00:00:00 2001 From: Noah Hilverling Date: Mon, 25 Feb 2019 10:33:39 +0100 Subject: [PATCH] Add WithRetry() to DBWrapper --- mysql.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/mysql.go b/mysql.go index 96298c4e..81bdffc7 100644 --- a/mysql.go +++ b/mysql.go @@ -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 } } \ No newline at end of file