diff --git a/apps/db-adapter/internal/api/server.go b/apps/db-adapter/internal/api/server.go index 8650812..7be735e 100644 --- a/apps/db-adapter/internal/api/server.go +++ b/apps/db-adapter/internal/api/server.go @@ -37,7 +37,7 @@ func New( panic("database operation timeout is required") } - return &server{db: drv, health: hc, logger: logger} + return &server{db: drv, health: hc, logger: logger, dbOpTimeout: databaseOperationTimeout} } func (srv *server) HealthCheck(c *gin.Context) { diff --git a/apps/db-adapter/internal/memgraph/init_database.go b/apps/db-adapter/internal/memgraph/init_database.go index ed26e95..e6264b5 100644 --- a/apps/db-adapter/internal/memgraph/init_database.go +++ b/apps/db-adapter/internal/memgraph/init_database.go @@ -2,6 +2,7 @@ package memgraph import ( "context" + "time" "github.com/neo4j/neo4j-go-driver/v5/neo4j" "go.uber.org/zap" @@ -14,10 +15,23 @@ func InitDatabase(logger *zap.Logger, dbURI, dbUser, dbPassword string) neo4j.Dr } ctx := context.Background() + for attempt := 1; attempt <= 5; attempt++ { + err = driver.VerifyConnectivity(ctx) + if err == nil { + break + } + + logger.Warn("Retrying connection to db...", + zap.Error(err), + zap.String("dbUser", dbUser), + zap.String("dbURI", dbURI), + zap.Int("attempt", attempt), + ) + time.Sleep(time.Duration(attempt*5) * time.Second) + } - err = driver.VerifyConnectivity(ctx) if err != nil { - logger.Panic("Unable to connect to db:", zap.Error(err), + logger.Panic("Unable to connect to db after retries:", zap.Error(err), zap.String("dbUser", dbUser), zap.String("dbURI", dbURI), ) diff --git a/apps/db-adapter/main.go b/apps/db-adapter/main.go index 625a3ce..423ff72 100644 --- a/apps/db-adapter/main.go +++ b/apps/db-adapter/main.go @@ -59,7 +59,7 @@ func init() { //nolint:gochecknoinits // this is a main package, init is ok memgraphPass = viper.GetString("MEMGRAPH_PASS") production = viper.GetBool("PRODUCTION") requestTimeout = time.Duration(viper.GetInt("REQUEST_TIMEOUT")) * time.Second - dbOpTimeout = time.Duration(viper.GetInt("DB_OP_TIMEOUT")) * time.Millisecond + dbOpTimeout = time.Duration(viper.GetInt("DB_OP_TIMEOUT")) * time.Second } func main() { diff --git a/apps/db-adapter/pkg/api/api.gen.go b/apps/db-adapter/pkg/api/api.gen.go index 446e178..7cb9210 100644 --- a/apps/db-adapter/pkg/api/api.gen.go +++ b/apps/db-adapter/pkg/api/api.gen.go @@ -30,13 +30,13 @@ const ( // Admin defines model for Admin. type Admin struct { - End *string `json:"end,omitempty"` - Id *int `json:"id,omitempty"` - Label *string `json:"label,omitempty"` - Properties *struct { + End *string `json:"End,omitempty"` + Id *int `json:"Id,omitempty"` + Label *string `json:"Label,omitempty"` + Props *struct { Added *int `json:"added,omitempty"` - } `json:"properties,omitempty"` - Start *string `json:"start,omitempty"` + } `json:"Props,omitempty"` + Start *string `json:"Start,omitempty"` } // FamilyRelationship defines model for FamilyRelationship. @@ -55,11 +55,11 @@ type FamilyTree struct { // Likes defines model for Likes. type Likes struct { - End *string `json:"end,omitempty"` - Id *int `json:"id,omitempty"` - Label *string `json:"label,omitempty"` - Properties *LikesProperties `json:"properties,omitempty"` - Start *string `json:"start,omitempty"` + End *string `json:"End,omitempty"` + Id *int `json:"Id,omitempty"` + Label *string `json:"Label,omitempty"` + Props *LikesProperties `json:"Props,omitempty"` + Start *string `json:"Start,omitempty"` } // LikesProperties defines model for LikesProperties. @@ -84,10 +84,9 @@ type OptimizedPersonNode struct { // Person defines model for Person. type Person struct { - Id *int `json:"id,omitempty"` - Labels *[]string `json:"labels,omitempty"` - Properties *PersonProperties `json:"properties,omitempty"` - Type *string `json:"type"` + Id *int `json:"Id,omitempty"` + Labels *[]string `json:"Labels,omitempty"` + Props *PersonProperties `json:"Props,omitempty"` } // PersonProperties defines model for PersonProperties. @@ -198,9 +197,9 @@ type PersonRegistration struct { // Recipe defines model for Recipe. type Recipe struct { - Id *int `json:"id,omitempty"` - Labels *[]string `json:"labels,omitempty"` - Properties *RecipeProperties `json:"properties,omitempty"` + Id *int `json:"Id,omitempty"` + Labels *[]string `json:"Labels,omitempty"` + Props *RecipeProperties `json:"Props,omitempty"` } // RecipeProperties defines model for RecipeProperties. @@ -227,12 +226,12 @@ type RecipeProperties struct { // Relationship defines model for Relationship. type Relationship struct { - End *int `json:"end,omitempty"` - Id *int `json:"id,omitempty"` - Label *string `json:"label,omitempty"` - Properties *FamilyRelationship `json:"properties,omitempty"` - Start *int `json:"start,omitempty"` - Type *string `json:"type"` + End *int `json:"End,omitempty"` + Id *int `json:"Id,omitempty"` + Label *string `json:"Label,omitempty"` + Props *FamilyRelationship `json:"Props,omitempty"` + Start *int `json:"Start,omitempty"` + Type *string `json:"Type"` } // GetProfileAdminsParams defines parameters for GetProfileAdmins.