Commit 07d22c8f authored by Hamdi Allam's avatar Hamdi Allam Committed by GitHub

Merge pull request #7985 from epociask/indexer.risk_mitigations

fix(indexer) Add API Timeouts & Closures
parents 2add4a5a 77817d9d
...@@ -9,6 +9,7 @@ import ( ...@@ -9,6 +9,7 @@ import (
"runtime/debug" "runtime/debug"
"strconv" "strconv"
"sync" "sync"
"time"
"github.com/ethereum-optimism/optimism/indexer/api/routes" "github.com/ethereum-optimism/optimism/indexer/api/routes"
"github.com/ethereum-optimism/optimism/indexer/config" "github.com/ethereum-optimism/optimism/indexer/config"
...@@ -63,6 +64,7 @@ func NewApi(logger log.Logger, bv database.BridgeTransfersView, serverConfig con ...@@ -63,6 +64,7 @@ func NewApi(logger log.Logger, bv database.BridgeTransfersView, serverConfig con
// (2) Inject routing middleware // (2) Inject routing middleware
apiRouter.Use(chiMetricsMiddleware(promRecorder)) apiRouter.Use(chiMetricsMiddleware(promRecorder))
apiRouter.Use(middleware.Timeout(time.Duration(serverConfig.WriteTimeout) * time.Second))
apiRouter.Use(middleware.Recoverer) apiRouter.Use(middleware.Recoverer)
apiRouter.Use(middleware.Heartbeat(HealthPath)) apiRouter.Use(middleware.Heartbeat(HealthPath))
......
...@@ -43,7 +43,12 @@ func runIndexer(ctx *cli.Context) error { ...@@ -43,7 +43,12 @@ func runIndexer(ctx *cli.Context) error {
log.Error("failed to connect to database", "err", err) log.Error("failed to connect to database", "err", err)
return err return err
} }
defer db.Close() defer func() {
err := db.Close()
if err != nil {
log.Error("failed to close database", "err", err)
}
}()
indexer, err := indexer.NewIndexer(log, db, cfg.Chain, cfg.RPCs, cfg.HTTPServer, cfg.MetricsServer) indexer, err := indexer.NewIndexer(log, db, cfg.Chain, cfg.RPCs, cfg.HTTPServer, cfg.MetricsServer)
if err != nil { if err != nil {
...@@ -70,7 +75,12 @@ func runApi(ctx *cli.Context) error { ...@@ -70,7 +75,12 @@ func runApi(ctx *cli.Context) error {
log.Error("failed to connect to database", "err", err) log.Error("failed to connect to database", "err", err)
return err return err
} }
defer db.Close() defer func() {
err := db.Close()
if err != nil {
log.Error("failed to close database", "err", err)
}
}()
api := api.NewApi(log, db.BridgeTransfers, cfg.HTTPServer, cfg.MetricsServer) api := api.NewApi(log, db.BridgeTransfers, cfg.HTTPServer, cfg.MetricsServer)
return api.Run(ctx.Context) return api.Run(ctx.Context)
......
...@@ -134,10 +134,11 @@ type DBConfig struct { ...@@ -134,10 +134,11 @@ type DBConfig struct {
Password string `toml:"password"` Password string `toml:"password"`
} }
// Configures the a server // Configures the server
type ServerConfig struct { type ServerConfig struct {
Host string `toml:"host"` Host string `toml:"host"`
Port int `toml:"port"` Port int `toml:"port"`
WriteTimeout int `toml:"timeout"`
} }
// LoadConfig loads the `indexer.toml` config file from a given path // LoadConfig loads the `indexer.toml` config file from a given path
......
...@@ -29,6 +29,7 @@ name = "$INDEXER_DB_NAME" ...@@ -29,6 +29,7 @@ name = "$INDEXER_DB_NAME"
[http] [http]
host = "127.0.0.1" host = "127.0.0.1"
port = 8080 port = 8080
timeout = 10
[metrics] [metrics]
host = "127.0.0.1" host = "127.0.0.1"
......
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