db: connection retry logic
This commit is contained in:
parent
3e307658fa
commit
7e69320d2c
1 changed files with 42 additions and 21 deletions
|
@ -16,27 +16,7 @@ import (
|
||||||
var DB *gorm.DB
|
var DB *gorm.DB
|
||||||
|
|
||||||
func Start() {
|
func Start() {
|
||||||
host := os.Getenv("DB_HOST")
|
DB = connect()
|
||||||
port := os.Getenv("DB_PORT")
|
|
||||||
user := os.Getenv("DB_USER")
|
|
||||||
password := os.Getenv("DB_PASSWORD")
|
|
||||||
dbname := os.Getenv("DB_NAME")
|
|
||||||
|
|
||||||
connectionString := fmt.Sprintf(
|
|
||||||
"%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True",
|
|
||||||
user, password, host, port, dbname,
|
|
||||||
)
|
|
||||||
db, err := gorm.Open(mysql.Open(connectionString), &gorm.Config{
|
|
||||||
Logger: logger.Default.LogMode(logger.Silent),
|
|
||||||
NowFunc: func() time.Time {
|
|
||||||
utc, _ := time.LoadLocation("Europe/Rome")
|
|
||||||
return time.Now().In(utc)
|
|
||||||
},
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("failed to connect to database: %v", err)
|
|
||||||
}
|
|
||||||
DB = db
|
|
||||||
sqlDB, err := DB.DB()
|
sqlDB, err := DB.DB()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("failed to get database connection: %v", err)
|
log.Fatalf("failed to get database connection: %v", err)
|
||||||
|
@ -54,6 +34,47 @@ func Start() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func connect() *gorm.DB {
|
||||||
|
host := os.Getenv("DB_HOST")
|
||||||
|
port := os.Getenv("DB_PORT")
|
||||||
|
user := os.Getenv("DB_USER")
|
||||||
|
password := os.Getenv("DB_PASSWORD")
|
||||||
|
dbname := os.Getenv("DB_NAME")
|
||||||
|
|
||||||
|
connectionString := fmt.Sprintf(
|
||||||
|
"%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True",
|
||||||
|
user, password, host, port, dbname,
|
||||||
|
)
|
||||||
|
|
||||||
|
var conn *gorm.DB
|
||||||
|
var err error
|
||||||
|
|
||||||
|
maxRetries := 10
|
||||||
|
retryCount := 0
|
||||||
|
|
||||||
|
for retryCount < maxRetries {
|
||||||
|
conn, err = gorm.Open(mysql.Open(connectionString), &gorm.Config{
|
||||||
|
Logger: logger.Default.LogMode(logger.Silent),
|
||||||
|
NowFunc: func() time.Time {
|
||||||
|
utc, _ := time.LoadLocation("Europe/Rome")
|
||||||
|
return time.Now().In(utc)
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err == nil {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
retryCount++
|
||||||
|
log.Printf("failed to connect to database (attempt %d/%d)", retryCount, maxRetries)
|
||||||
|
if retryCount < maxRetries {
|
||||||
|
time.Sleep(2 * time.Second)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("failed to connect to database after %d attempts: %v", maxRetries, err)
|
||||||
|
}
|
||||||
|
return conn
|
||||||
|
}
|
||||||
|
|
||||||
func migrateDatabase() error {
|
func migrateDatabase() error {
|
||||||
err := DB.AutoMigrate(
|
err := DB.AutoMigrate(
|
||||||
&models.Media{},
|
&models.Media{},
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue