From 44bd01771270000a0fb8147851002b8962de68d6 Mon Sep 17 00:00:00 2001 From: Lz Date: Tue, 15 Mar 2022 11:26:45 +0800 Subject: [PATCH 1/3] fix(init): try ping postgres to check if it is ready --- .../0chain.net/blobbercore/datastore/postgres.go | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/code/go/0chain.net/blobbercore/datastore/postgres.go b/code/go/0chain.net/blobbercore/datastore/postgres.go index b622a3ba4..4eba3e825 100644 --- a/code/go/0chain.net/blobbercore/datastore/postgres.go +++ b/code/go/0chain.net/blobbercore/datastore/postgres.go @@ -2,6 +2,8 @@ package datastore import ( "context" + "database/sql" + "errors" "fmt" "time" @@ -26,6 +28,7 @@ func (store *postgresStore) Open() error { config.Configuration.DBPassword)), &gorm.Config{ SkipDefaultTransaction: true, // https://gorm.io/docs/performance.html#Disable-Default-Transaction PrepareStmt: true, //https://gorm.io/docs/performance.html#Caches-Prepared-Statement + DisableAutomaticPing: false, }) if err != nil { return common.NewErrorf("db_open_error", "Error opening the DB connection: %v", err) @@ -36,6 +39,10 @@ func (store *postgresStore) Open() error { return common.NewErrorf("db_open_error", "Error opening the DB connection: %v", err) } + if err := sqldb.Ping(); err != nil { + return common.NewErrorf("db_open_error", "Error opening the DB connection: %v", err) + } + sqldb.SetMaxIdleConns(100) sqldb.SetMaxOpenConns(200) sqldb.SetConnMaxLifetime(30 * time.Second) @@ -111,15 +118,15 @@ func (store *postgresStore) AutoMigrate() error { func (store *postgresStore) IsMigrated(m Migration) (bool, error) { var version string err := store.db. - Raw(`select version from "migrations" where version=?`, m.Version). - Pluck("version", &version). - Error + Raw(`SELECT version FROM "migrations" WHERE version=?`, m.Version). + Row(). + Scan(&version) if err == nil { return false, nil } - if err == gorm.ErrRecordNotFound { + if errors.Is(err, sql.ErrNoRows) { return false, nil } From 45262d6f230ee06f810eb4d507b7e16330bcdfb3 Mon Sep 17 00:00:00 2001 From: Lz Date: Tue, 15 Mar 2022 11:44:26 +0800 Subject: [PATCH 2/3] fix(init): try ping postgres to check if it is ready --- code/go/0chain.net/blobbercore/datastore/postgres.go | 1 - 1 file changed, 1 deletion(-) diff --git a/code/go/0chain.net/blobbercore/datastore/postgres.go b/code/go/0chain.net/blobbercore/datastore/postgres.go index 4eba3e825..8bc5d22a4 100644 --- a/code/go/0chain.net/blobbercore/datastore/postgres.go +++ b/code/go/0chain.net/blobbercore/datastore/postgres.go @@ -28,7 +28,6 @@ func (store *postgresStore) Open() error { config.Configuration.DBPassword)), &gorm.Config{ SkipDefaultTransaction: true, // https://gorm.io/docs/performance.html#Disable-Default-Transaction PrepareStmt: true, //https://gorm.io/docs/performance.html#Caches-Prepared-Statement - DisableAutomaticPing: false, }) if err != nil { return common.NewErrorf("db_open_error", "Error opening the DB connection: %v", err) From b8fe2b0b56c3e596610a88008698c4dd2be1a199 Mon Sep 17 00:00:00 2001 From: Lz Date: Tue, 15 Mar 2022 21:07:36 +0800 Subject: [PATCH 3/3] fix(datastore):fixed IsMigrated --- .../blobbercore/datastore/postgres.go | 27 +++++-------------- 1 file changed, 7 insertions(+), 20 deletions(-) diff --git a/code/go/0chain.net/blobbercore/datastore/postgres.go b/code/go/0chain.net/blobbercore/datastore/postgres.go index 8bc5d22a4..d511a1393 100644 --- a/code/go/0chain.net/blobbercore/datastore/postgres.go +++ b/code/go/0chain.net/blobbercore/datastore/postgres.go @@ -2,8 +2,6 @@ package datastore import ( "context" - "database/sql" - "errors" "fmt" "time" @@ -92,10 +90,8 @@ func (store *postgresStore) AutoMigrate() error { for i := 0; i < len(releases); i++ { v := releases[i] fmt.Print("\r + ", v.Version, " ") - isMigrated, err := store.IsMigrated(v) - if err != nil { - return err - } + isMigrated := store.IsMigrated(v) + if isMigrated { fmt.Print(" [SKIP]\n") continue @@ -114,20 +110,11 @@ func (store *postgresStore) AutoMigrate() error { return nil } -func (store *postgresStore) IsMigrated(m Migration) (bool, error) { - var version string - err := store.db. - Raw(`SELECT version FROM "migrations" WHERE version=?`, m.Version). - Row(). - Scan(&version) +func (store *postgresStore) IsMigrated(m Migration) bool { - if err == nil { - return false, nil - } - - if errors.Is(err, sql.ErrNoRows) { - return false, nil - } + var c int64 + store.db. + Raw(`SELECT 1 FROM "migrations" WHERE version=?`, m.Version).Count(&c) - return false, err + return c > 0 }