Skip to content

Commit

Permalink
including heimdall timeout on config
Browse files Browse the repository at this point in the history
  • Loading branch information
lucca30 committed Feb 19, 2025
1 parent f4f30d9 commit e2f114b
Show file tree
Hide file tree
Showing 10 changed files with 71 additions and 14 deletions.
10 changes: 10 additions & 0 deletions cmd/utils/bor_flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package utils

import (
"os"
"time"

"github.com/urfave/cli/v2"

Expand All @@ -22,6 +23,13 @@ var (
Value: "http://localhost:1317",
}

// HeimdallTimeoutFlag flag for heimdall timeout
HeimdallTimeoutFlag = &cli.DurationFlag{
Name: "bor.heimdalltimeout",
Usage: "Timeout of Heimdall service",
Value: 5 * time.Second,
}

// WithoutHeimdallFlag no heimdall (for testing purpose)
WithoutHeimdallFlag = &cli.BoolFlag{
Name: "bor.withoutheimdall",
Expand Down Expand Up @@ -56,6 +64,7 @@ var (
// BorFlags all bor related flags
BorFlags = []cli.Flag{
HeimdallURLFlag,
HeimdallTimeoutFlag,
WithoutHeimdallFlag,
HeimdallgRPCAddressFlag,
RunHeimdallFlag,
Expand All @@ -67,6 +76,7 @@ var (
// SetBorConfig sets bor config
func SetBorConfig(ctx *cli.Context, cfg *eth.Config) {
cfg.HeimdallURL = ctx.String(HeimdallURLFlag.Name)
cfg.HeimdallTimeout = ctx.Duration(HeimdallTimeoutFlag.Name)
cfg.WithoutHeimdall = ctx.Bool(WithoutHeimdallFlag.Name)
cfg.HeimdallgRPCAddress = ctx.String(HeimdallgRPCAddressFlag.Name)
cfg.RunHeimdall = ctx.Bool(RunHeimdallFlag.Name)
Expand Down
1 change: 1 addition & 0 deletions cmd/utils/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -2314,6 +2314,7 @@ func MakeChain(ctx *cli.Context, stack *node.Node, readonly bool) (*core.BlockCh
configs := &ethconfig.Config{
Genesis: gspec,
HeimdallURL: ctx.String(HeimdallURLFlag.Name),
HeimdallTimeout: ctx.Duration(HeimdallTimeoutFlag.Name),
WithoutHeimdall: ctx.Bool(WithoutHeimdallFlag.Name),
HeimdallgRPCAddress: ctx.String(HeimdallgRPCAddressFlag.Name),
RunHeimdall: ctx.Bool(RunHeimdallArgsFlag.Name),
Expand Down
9 changes: 5 additions & 4 deletions consensus/bor/heimdall/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ var (
const (
heimdallAPIBodyLimit = 128 * 1024 * 1024 // 128 MB
stateFetchLimit = 50
apiHeimdallTimeout = 5 * time.Second
retryCall = 5 * time.Second
)

Expand All @@ -59,11 +58,13 @@ type Request struct {
start time.Time
}

func NewHeimdallClient(urlString string) *HeimdallClient {
func NewHeimdallClient(urlString string, timeout time.Duration) *HeimdallClient {
// REMOVE BEFORE PR
log.Info("############### timeout set on heimdall client", "valueSetByConfig", timeout)
return &HeimdallClient{
urlString: urlString,
client: http.Client{
Timeout: apiHeimdallTimeout,
Timeout: timeout,
},
closeCh: make(chan struct{}),
}
Expand Down Expand Up @@ -469,7 +470,7 @@ func internalFetch(ctx context.Context, client http.Client, u *url.URL) ([]byte,
}

func internalFetchWithTimeout(ctx context.Context, client http.Client, url *url.URL) ([]byte, error) {
ctx, cancel := context.WithTimeout(ctx, apiHeimdallTimeout)
ctx, cancel := context.WithTimeout(ctx, client.Timeout)
defer cancel()

// request data once
Expand Down
6 changes: 3 additions & 3 deletions consensus/bor/heimdall/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ func TestFetchCheckpointFromMockHeimdall(t *testing.T) {
require.NoError(t, err, "expect no error in starting mock heimdall server")

// Create a new heimdall client and use same port for connection
client := NewHeimdallClient(fmt.Sprintf("http://localhost:%d", port))
client := NewHeimdallClient(fmt.Sprintf("http://localhost:%d", port), 5*time.Second)
_, err = client.FetchCheckpoint(context.Background(), -1)
require.NoError(t, err, "expect no error in fetching checkpoint")

Expand Down Expand Up @@ -194,7 +194,7 @@ func TestFetchMilestoneFromMockHeimdall(t *testing.T) {
require.NoError(t, err, "expect no error in starting mock heimdall server")

// Create a new heimdall client and use same port for connection
client := NewHeimdallClient(fmt.Sprintf("http://localhost:%d", port))
client := NewHeimdallClient(fmt.Sprintf("http://localhost:%d", port), 5*time.Second)
_, err = client.FetchMilestone(context.Background())
require.NoError(t, err, "expect no error in fetching milestone")

Expand Down Expand Up @@ -250,7 +250,7 @@ func TestFetchShutdown(t *testing.T) {
require.NoError(t, err, "expect no error in starting mock heimdall server")

// Create a new heimdall client and use same port for connection
client := NewHeimdallClient(fmt.Sprintf("http://localhost:%d", port))
client := NewHeimdallClient(fmt.Sprintf("http://localhost:%d", port), 5*time.Second)

ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond)

Expand Down
2 changes: 2 additions & 0 deletions docs/cli/server.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ The ```bor server``` command runs the Bor client.

- ```bor.heimdall```: URL of Heimdall service (default: http://localhost:1317)

- ```bor.heimdalltimeout```: Timeout of Heimdall service (default: 5s)

- ```bor.heimdallgRPC```: Address of Heimdall gRPC service

- ```bor.logs```: Enables bor log retrieval (default: false)
Expand Down
5 changes: 4 additions & 1 deletion eth/ethconfig/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,9 @@ type Config struct {
// URL to connect to Heimdall node
HeimdallURL string

// timeout in heimdall requests
HeimdallTimeout time.Duration

// No heimdall service
WithoutHeimdall bool

Expand Down Expand Up @@ -242,7 +245,7 @@ func CreateConsensusEngine(chainConfig *params.ChainConfig, ethConfig *Config, d
} else if ethConfig.HeimdallgRPCAddress != "" {
heimdallClient = heimdallgrpc.NewHeimdallGRPCClient(ethConfig.HeimdallgRPCAddress)
} else {
heimdallClient = heimdall.NewHeimdallClient(ethConfig.HeimdallURL)
heimdallClient = heimdall.NewHeimdallClient(ethConfig.HeimdallURL, ethConfig.HeimdallTimeout)
}

return bor.New(chainConfig, db, blockchainAPI, spanner, heimdallClient, genesisContractsClient, false), nil
Expand Down
42 changes: 36 additions & 6 deletions eth/ethconfig/gen_config.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions internal/cli/server/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,8 @@ type HeimdallConfig struct {
// URL is the url of the heimdall server
URL string `hcl:"url,optional" toml:"url,optional"`

Timeout time.Duration `hcl:"timeout,optional" toml:"timeout,optional"`

// Without is used to disable remote heimdall during testing
Without bool `hcl:"bor.without,optional" toml:"bor.without,optional"`

Expand Down Expand Up @@ -930,6 +932,7 @@ func (c *Config) buildEth(stack *node.Node, accountManager *accounts.Manager) (*
}

n.HeimdallURL = c.Heimdall.URL
n.HeimdallTimeout = c.Heimdall.Timeout
n.WithoutHeimdall = c.Heimdall.Without
n.HeimdallgRPCAddress = c.Heimdall.GRPCAddress
n.RunHeimdall = c.Heimdall.RunHeimdall
Expand Down
6 changes: 6 additions & 0 deletions internal/cli/server/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,12 @@ func (c *Command) Flags(config *Config) *flagset.Flagset {
Value: &c.cliConfig.Heimdall.URL,
Default: c.cliConfig.Heimdall.URL,
})
f.DurationFlag(&flagset.DurationFlag{
Name: "bor.heimdalltimeout",
Usage: "Timeout of Heimdall service",
Value: &c.cliConfig.Heimdall.Timeout,
Default: c.cliConfig.Heimdall.Timeout,
})
f.BoolFlag(&flagset.BoolFlag{
Name: "bor.withoutheimdall",
Usage: "Run without Heimdall service (for testing purpose)",
Expand Down
1 change: 1 addition & 0 deletions scripts/getconfig.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ var nameTagMap = map[string]string{
"0-snapshot": "snapshot",
"\"bor.logs\"": "bor.logs",
"url": "bor.heimdall",
"timeout": "bor.heimdalltimeout",
"\"bor.without\"": "bor.withoutheimdall",
"grpc-address": "bor.heimdallgRPC",
"\"bor.runheimdall\"": "bor.runheimdall",
Expand Down

0 comments on commit e2f114b

Please sign in to comment.