Commit 9c39a63d authored by Will Cory's avatar Will Cory

🐛 fix(indexer): add retries to db connection

parent 0511b47b
......@@ -2,10 +2,13 @@
package database
import (
"context"
"fmt"
"github.com/ethereum-optimism/optimism/indexer/config"
_ "github.com/ethereum-optimism/optimism/indexer/database/serializers"
"github.com/ethereum-optimism/optimism/op-service/retry"
"github.com/pkg/errors"
"gorm.io/driver/postgres"
"gorm.io/gorm"
......@@ -31,6 +34,11 @@ type DB struct {
}
func NewDB(dbConfig config.DBConfig) (*DB, error) {
var db *DB
retryStrategy := &retry.ExponentialStrategy{Min: 1000, Max: 20_000, MaxJitter: 250}
_, err := retry.Do[interface{}](context.Background(), 10, retryStrategy, func() (interface{}, error) {
dsn := fmt.Sprintf("host=%s port=%d dbname=%s sslmode=disable", dbConfig.Host, dbConfig.Port, dbConfig.Name)
if dbConfig.User != "" {
dsn += fmt.Sprintf(" user=%s", dbConfig.User)
......@@ -41,17 +49,14 @@ func NewDB(dbConfig config.DBConfig) (*DB, error) {
gorm, err := gorm.Open(postgres.Open(dsn), &gorm.Config{
// The indexer will explicitly manage the transactions
SkipDefaultTransaction: true,
// We may choose to create an adapter such that the
// logger emits to the geth logger when on DEBUG mode
Logger: logger.Default.LogMode(logger.Silent),
})
if err != nil {
return nil, err
return nil, errors.Wrap(err, "failed to connect to database")
}
db := &DB{
db = &DB{
gorm: gorm,
Blocks: newBlocksDB(gorm),
ContractEvents: newContractEventsDB(gorm),
......@@ -59,7 +64,12 @@ func NewDB(dbConfig config.DBConfig) (*DB, error) {
BridgeMessages: newBridgeMessagesDB(gorm),
BridgeTransactions: newBridgeTransactionsDB(gorm),
}
return nil, nil
})
if err != nil {
return nil, errors.Wrap(err, "failed to connect to database after multiple retries")
}
return db, nil
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment