mirror of
https://github.com/Luzifer/twitch-bot.git
synced 2024-12-28 15:41:16 +00:00
Knut Ahlers
0d10b5165f
to compensate for database temporarily not being available. This is not suitable for longer database outages as 5 retries with a 1.5 multiplier will not give much time to recover but should cover for cluster changes and short network hickups. Signed-off-by: Knut Ahlers <knut@ahlers.me>
25 lines
676 B
Go
25 lines
676 B
Go
package helpers
|
|
|
|
import (
|
|
"github.com/Luzifer/go_helpers/v2/backoff"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
const (
|
|
maxRetries = 5
|
|
)
|
|
|
|
// Retry contains a standard set of configuration parameters for an
|
|
// exponential backoff to be used throughout the bot
|
|
func Retry(fn func() error) error {
|
|
return backoff.NewBackoff().
|
|
WithMaxIterations(maxRetries).
|
|
Retry(fn)
|
|
}
|
|
|
|
// RetryTransaction takes a database object and a function acting on
|
|
// the database. The function will be run in a transaction on the
|
|
// database and will be retried as if executed using Retry
|
|
func RetryTransaction(db *gorm.DB, fn func(tx *gorm.DB) error) error {
|
|
return Retry(func() error { return db.Transaction(fn) })
|
|
}
|