Rewrite db retry to reconfigure database on error
This commit is contained in:
parent
52e8013026
commit
dcca5becb5
|
@ -59,6 +59,34 @@ func getSqliteAddress() (*url.URL, error) {
|
||||||
return address, nil
|
return address, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func configureDatabase(config *gorm.Config) (*gorm.DB, error) {
|
||||||
|
var databaseDialect gorm.Dialector
|
||||||
|
switch drivers.DatabaseDriver() {
|
||||||
|
case drivers.DatabaseDriverMysql:
|
||||||
|
mysqlAddress, err := getMysqlAddress()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
log.Printf("Connecting to MYSQL database: %s", mysqlAddress)
|
||||||
|
databaseDialect = mysql.Open(mysqlAddress.String())
|
||||||
|
|
||||||
|
case drivers.DatabaseDriverSqlite:
|
||||||
|
sqliteAddress, err := getSqliteAddress()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
log.Printf("Opening SQLITE database: %s", sqliteAddress)
|
||||||
|
databaseDialect = sqlite.Open(sqliteAddress.String())
|
||||||
|
}
|
||||||
|
|
||||||
|
db, err := gorm.Open(databaseDialect, config)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return db, nil
|
||||||
|
}
|
||||||
|
|
||||||
// SetupDatabase connects to the database using environment variables
|
// SetupDatabase connects to the database using environment variables
|
||||||
func SetupDatabase() (*gorm.DB, error) {
|
func SetupDatabase() (*gorm.DB, error) {
|
||||||
|
|
||||||
|
@ -71,56 +99,31 @@ func SetupDatabase() (*gorm.DB, error) {
|
||||||
config.Logger = logger.Default.LogMode(logger.Warn)
|
config.Logger = logger.Default.LogMode(logger.Warn)
|
||||||
}
|
}
|
||||||
|
|
||||||
var databaseDialect gorm.Dialector
|
var db *gorm.DB
|
||||||
switch drivers.DatabaseDriver() {
|
|
||||||
case drivers.DatabaseDriverMysql:
|
|
||||||
mysqlAddress, err := getMysqlAddress()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
log.Printf("Connecting to MYSQL database: %s", mysqlAddress)
|
|
||||||
databaseDialect = mysql.New(mysql.Config{
|
|
||||||
DSN: mysqlAddress.String(),
|
|
||||||
DontSupportRenameIndex: true,
|
|
||||||
DontSupportRenameColumn: true,
|
|
||||||
})
|
|
||||||
|
|
||||||
case drivers.DatabaseDriverSqlite:
|
for retryCount := 1; retryCount <= 5; retryCount++ {
|
||||||
sqliteAddress, err := getSqliteAddress()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
log.Printf("Opening SQLITE database: %s", sqliteAddress)
|
|
||||||
databaseDialect = sqlite.Open(sqliteAddress.String())
|
|
||||||
}
|
|
||||||
|
|
||||||
db, err := gorm.Open(databaseDialect, &config)
|
var err error
|
||||||
|
db, err = configureDatabase(&config)
|
||||||
|
if err == nil {
|
||||||
sqlDB, dbErr := db.DB()
|
sqlDB, dbErr := db.DB()
|
||||||
if dbErr != nil {
|
if dbErr != nil {
|
||||||
log.Println(dbErr)
|
|
||||||
return nil, dbErr
|
return nil, dbErr
|
||||||
}
|
}
|
||||||
|
|
||||||
sqlDB.SetMaxOpenConns(80)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
for retryCount := 1; retryCount <= 5; retryCount++ {
|
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||||||
|
err = sqlDB.PingContext(ctx)
|
||||||
if err := sqlDB.PingContext(ctx); err == nil {
|
|
||||||
cancel()
|
cancel()
|
||||||
|
|
||||||
|
if err == nil {
|
||||||
return db, nil
|
return db, nil
|
||||||
}
|
}
|
||||||
|
}
|
||||||
cancel()
|
|
||||||
|
|
||||||
log.Printf("WARN: Could not ping database: %s. Will retry after 5 seconds\n", err)
|
log.Printf("WARN: Could not ping database: %s. Will retry after 5 seconds\n", err)
|
||||||
time.Sleep(time.Duration(5) * time.Second)
|
time.Sleep(time.Duration(5) * time.Second)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return db, nil
|
return db, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue