Add db connection retrying on startup

This commit is contained in:
Denis Arh
2019-02-04 10:15:38 +01:00
parent eba7af3e5c
commit 7115949354
4 changed files with 46 additions and 30 deletions
+4 -10
View File
@@ -10,10 +10,10 @@ import (
"github.com/SentimensRG/ctx"
"github.com/SentimensRG/ctx/sigctx"
"github.com/pkg/errors"
"github.com/titpetric/factory"
"github.com/titpetric/factory/resputil"
migrate "github.com/crusttech/crust/crm/db"
"github.com/crusttech/crust/internal/db"
systemService "github.com/crusttech/crust/system/service"
"github.com/crusttech/crust/crm/service"
@@ -46,15 +46,9 @@ func Init() error {
mail.SetupDialer(flags.smtp)
// start/configure database connection
factory.Database.Add("default", flags.db.DSN)
db := factory.Database.MustGet()
// @todo: profiling as an external service?
switch flags.db.Profiler {
case "stdout":
db.Profiler = &factory.Database.ProfilerStdout
default:
log.Println("No database query profiler selected")
db, err := db.TryToConnect(flags.db.DSN, flags.db.Profiler)
if err != nil {
return errors.Wrap(err, "could not connect to database")
}
// migrate database schema
+34
View File
@@ -0,0 +1,34 @@
package db
import (
"log"
"time"
"github.com/titpetric/factory"
)
func TryToConnect(dsn, profiler string) (db *factory.DB, err error) {
factory.Database.Add("default", dsn)
var try = 0
connect:
try++
db, err = factory.Database.Get()
if err != nil {
delay := time.Second * 5
log.Printf("Failed to connect, try %d, error: %v, retry in %.0fs", try, err, delay.Seconds())
time.Sleep(delay)
goto connect
}
// @todo: profiling as an external service?
switch profiler {
case "stdout":
db.Profiler = &factory.Database.ProfilerStdout
default:
log.Println("No database query profiler selected")
}
return
}
+4 -10
View File
@@ -10,9 +10,9 @@ import (
"github.com/SentimensRG/ctx"
"github.com/SentimensRG/ctx/sigctx"
"github.com/pkg/errors"
"github.com/titpetric/factory"
"github.com/titpetric/factory/resputil"
"github.com/crusttech/crust/internal/db"
migrate "github.com/crusttech/crust/sam/db"
systemService "github.com/crusttech/crust/system/service"
@@ -46,15 +46,9 @@ func Init() error {
mail.SetupDialer(flags.smtp)
// start/configure database connection
factory.Database.Add("default", flags.db.DSN)
db := factory.Database.MustGet()
// @todo: profiling as an external service?
switch flags.db.Profiler {
case "stdout":
db.Profiler = &factory.Database.ProfilerStdout
default:
log.Println("No database query profiler selected")
db, err := db.TryToConnect(flags.db.DSN, flags.db.Profiler)
if err != nil {
return errors.Wrap(err, "could not connect to database")
}
// migrate database schema
+4 -10
View File
@@ -10,9 +10,9 @@ import (
"github.com/SentimensRG/ctx"
"github.com/SentimensRG/ctx/sigctx"
"github.com/pkg/errors"
"github.com/titpetric/factory"
"github.com/titpetric/factory/resputil"
"github.com/crusttech/crust/internal/db"
migrate "github.com/crusttech/crust/system/db"
systemService "github.com/crusttech/crust/system/service"
@@ -45,15 +45,9 @@ func Init() error {
mail.SetupDialer(flags.smtp)
// start/configure database connection
factory.Database.Add("default", flags.db.DSN)
db := factory.Database.MustGet()
// @todo: profiling as an external service?
switch flags.db.Profiler {
case "stdout":
db.Profiler = &factory.Database.ProfilerStdout
default:
log.Println("No database query profiler selected")
db, err := db.TryToConnect(flags.db.DSN, flags.db.Profiler)
if err != nil {
return errors.Wrap(err, "could not connect to database")
}
// migrate database schema