Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add option for websocket message size limit #2266

Merged
merged 11 commits into from
May 21, 2024
11 changes: 6 additions & 5 deletions cmd/conf/chain.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,12 @@ type ParentChainConfig struct {
}

var L1ConnectionConfigDefault = rpcclient.ClientConfig{
URL: "",
Retries: 2,
Timeout: time.Minute,
ConnectionWait: time.Minute,
ArgLogLimit: 2048,
URL: "",
Retries: 2,
Timeout: time.Minute,
ConnectionWait: time.Minute,
ArgLogLimit: 2048,
WebsocketMessageSizeLimit: 256 * 1024 * 1024,
}

var L1ConfigDefault = ParentChainConfig{
Expand Down
38 changes: 21 additions & 17 deletions util/rpcclient/rpcclient.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,15 @@ import (
)

type ClientConfig struct {
URL string `json:"url,omitempty" koanf:"url"`
JWTSecret string `json:"jwtsecret,omitempty" koanf:"jwtsecret"`
Timeout time.Duration `json:"timeout,omitempty" koanf:"timeout" reload:"hot"`
Retries uint `json:"retries,omitempty" koanf:"retries" reload:"hot"`
ConnectionWait time.Duration `json:"connection-wait,omitempty" koanf:"connection-wait"`
ArgLogLimit uint `json:"arg-log-limit,omitempty" koanf:"arg-log-limit" reload:"hot"`
RetryErrors string `json:"retry-errors,omitempty" koanf:"retry-errors" reload:"hot"`
RetryDelay time.Duration `json:"retry-delay,omitempty" koanf:"retry-delay"`
URL string `json:"url,omitempty" koanf:"url"`
JWTSecret string `json:"jwtsecret,omitempty" koanf:"jwtsecret"`
Timeout time.Duration `json:"timeout,omitempty" koanf:"timeout" reload:"hot"`
Retries uint `json:"retries,omitempty" koanf:"retries" reload:"hot"`
ConnectionWait time.Duration `json:"connection-wait,omitempty" koanf:"connection-wait"`
ArgLogLimit uint `json:"arg-log-limit,omitempty" koanf:"arg-log-limit" reload:"hot"`
RetryErrors string `json:"retry-errors,omitempty" koanf:"retry-errors" reload:"hot"`
RetryDelay time.Duration `json:"retry-delay,omitempty" koanf:"retry-delay"`
WebsocketMessageSizeLimit int64 `json:"websocket-message-size-limit,omitempty" koanf:"websocket-message-size-limit"`

retryErrors *regexp.Regexp
}
Expand All @@ -46,16 +47,18 @@ func (c *ClientConfig) Validate() error {
type ClientConfigFetcher func() *ClientConfig

var TestClientConfig = ClientConfig{
URL: "self",
JWTSecret: "",
URL: "self",
JWTSecret: "",
WebsocketMessageSizeLimit: 256 * 1024 * 1024,
}

var DefaultClientConfig = ClientConfig{
URL: "self-auth",
JWTSecret: "",
Retries: 3,
RetryErrors: "websocket: close.*|dial tcp .*|.*i/o timeout|.*connection reset by peer|.*connection refused",
ArgLogLimit: 2048,
URL: "self-auth",
JWTSecret: "",
Retries: 3,
RetryErrors: "websocket: close.*|dial tcp .*|.*i/o timeout|.*connection reset by peer|.*connection refused",
ArgLogLimit: 2048,
WebsocketMessageSizeLimit: 256 * 1024 * 1024,
}

func RPCClientAddOptions(prefix string, f *flag.FlagSet, defaultConfig *ClientConfig) {
Expand All @@ -67,6 +70,7 @@ func RPCClientAddOptions(prefix string, f *flag.FlagSet, defaultConfig *ClientCo
f.Uint(prefix+".retries", defaultConfig.Retries, "number of retries in case of failure(0 mean one attempt)")
f.String(prefix+".retry-errors", defaultConfig.RetryErrors, "Errors matching this regular expression are automatically retried")
f.Duration(prefix+".retry-delay", defaultConfig.RetryDelay, "delay between retries")
f.Int64(prefix+".websocket-message-size-limit", defaultConfig.WebsocketMessageSizeLimit, "websocket message size limit used by the RPC client. 0 means no limit")
}

type RpcClient struct {
Expand Down Expand Up @@ -256,9 +260,9 @@ func (c *RpcClient) Start(ctx_in context.Context) error {
var err error
var client *rpc.Client
if jwt == nil {
client, err = rpc.DialContext(ctx, url)
client, err = rpc.DialOptions(ctx, url, rpc.WithWebsocketMessageSizeLimit(c.config().WebsocketMessageSizeLimit))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's test here if WebsocketMessageSizeLimit == 0 (it can happen e.g. for validation-server-configs). If it's 0 either use default or don't apply rpc.WithWebsocketMessageSizeLimit

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

} else {
client, err = rpc.DialOptions(ctx, url, rpc.WithHTTPAuth(node.NewJWTAuth([32]byte(*jwt))))
client, err = rpc.DialOptions(ctx, url, rpc.WithHTTPAuth(node.NewJWTAuth([32]byte(*jwt))), rpc.WithWebsocketMessageSizeLimit(c.config().WebsocketMessageSizeLimit))
}
cancelCtx()
if err == nil {
Expand Down
Loading