Skip to content

Commit

Permalink
Make max read size configurable
Browse files Browse the repository at this point in the history
  • Loading branch information
agouin committed Jun 4, 2024
1 parent 54beead commit 8c03918
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 10 deletions.
2 changes: 1 addition & 1 deletion cmd/horcrux/cmd/start.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ func startCmd() *cobra.Command {

go EnableDebugAndMetrics(cmd.Context(), out)

services, err = signer.StartRemoteSigners(services, logger, val, config.Config.Nodes())
services, err = signer.StartRemoteSigners(services, logger, val, config.Config.Nodes(), config.Config.MaxReadSize)
if err != nil {
return fmt.Errorf("failed to start remote signer(s): %w", err)
}
Expand Down
1 change: 1 addition & 0 deletions signer/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ type Config struct {
ChainNodes ChainNodes `yaml:"chainNodes"`
DebugAddr string `yaml:"debugAddr"`
GRPCAddr string `yaml:"grpcAddr"`
MaxReadSize int `yaml:"maxReadSize"`
}

func (c *Config) Nodes() (out []string) {
Expand Down
8 changes: 5 additions & 3 deletions signer/io.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,11 @@ import (
)

// ReadMsg reads a message from an io.Reader
func ReadMsg(reader io.Reader) (msg cometprotoprivval.Message, err error) {
const maxRemoteSignerMsgSize = 1024 * 10
protoReader := protoio.NewDelimitedReader(reader, maxRemoteSignerMsgSize)
func ReadMsg(reader io.Reader, maxReadSize int) (msg cometprotoprivval.Message, err error) {
if maxReadSize <= 0 {
maxReadSize = 1024 * 1024 // 1MB
}
protoReader := protoio.NewDelimitedReader(reader, maxReadSize)
_, err = protoReader.ReadMsg(&msg)
return msg, err
}
Expand Down
17 changes: 11 additions & 6 deletions signer/remote_signer.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ type ReconnRemoteSigner struct {
privVal PrivValidator

dialer net.Dialer

maxReadSize int
}

// NewReconnRemoteSigner return a ReconnRemoteSigner that will dial using the given
Expand All @@ -49,12 +51,14 @@ func NewReconnRemoteSigner(
logger cometlog.Logger,
privVal PrivValidator,
dialer net.Dialer,
maxReadSize int,
) *ReconnRemoteSigner {
rs := &ReconnRemoteSigner{
address: address,
privVal: privVal,
dialer: dialer,
privKey: cometcryptoed25519.GenPrivKey(),
address: address,
privVal: privVal,
dialer: dialer,
privKey: cometcryptoed25519.GenPrivKey(),
maxReadSize: maxReadSize,
}

rs.BaseService = *cometservice.NewBaseService(logger, "RemoteSigner", rs)
Expand Down Expand Up @@ -136,7 +140,7 @@ func (rs *ReconnRemoteSigner) loop(ctx context.Context) {
return
}

req, err := ReadMsg(conn)
req, err := ReadMsg(conn, rs.maxReadSize)
if err != nil {
rs.Logger.Error(
"Failed to read message from connection",
Expand Down Expand Up @@ -288,6 +292,7 @@ func StartRemoteSigners(
logger cometlog.Logger,
privVal PrivValidator,
nodes []string,
maxReadSize int,
) ([]cometservice.Service, error) {
var err error
go StartMetrics()
Expand All @@ -296,7 +301,7 @@ func StartRemoteSigners(
// A long timeout such as 30 seconds would cause the sentry to fail in loops
// Use a short timeout and dial often to connect within 3 second window
dialer := net.Dialer{Timeout: 2 * time.Second}
s := NewReconnRemoteSigner(node, logger, privVal, dialer)
s := NewReconnRemoteSigner(node, logger, privVal, dialer, maxReadSize)

err = s.Start()
if err != nil {
Expand Down

0 comments on commit 8c03918

Please sign in to comment.