diff --git a/libfic/db.go b/libfic/db.go index 617dfac1..9ff54422 100644 --- a/libfic/db.go +++ b/libfic/db.go @@ -2,7 +2,9 @@ package fic import ( "database/sql" + "log" "os" + "time" _ "github.com/go-sql-driver/mysql" ) @@ -33,15 +35,20 @@ func DSNGenerator() string { return db_user + ":" + db_password + "@" + db_host + "/" + db_db } -func DBInit(dsn string) error { - var err error +func DBInit(dsn string) (err error) { if db, err = sql.Open("mysql", dsn + "?parseTime=true&foreign_key_checks=1"); err != nil { - return err + return } - if _, err := db.Exec(`SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';`); err != nil { - return err + + _, err = db.Exec(`SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';`) + for i := 0; err != nil && i < 5; i += 1 { + if _, err = db.Exec(`SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';`); err != nil && i <= 5 { + log.Println("An error occurs when trying to connect to DB, will retry in 2 seconds: ", err) + time.Sleep(2 * time.Second) + } } - return nil + + return } func DBCreate() error {