Skip to content

Commit 29bfe6d

Browse files
authored
Make max read size configurable (#273)
* Make max read size configurable * Add init cmd flag * migrate cmd * fix test
1 parent 54beead commit 29bfe6d

File tree

9 files changed

+33
-14
lines changed

9 files changed

+33
-14
lines changed

cmd/horcrux/cmd/config.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ const (
1818
flagGRPCTimeout = "grpc-timeout"
1919
flagOverwrite = "overwrite"
2020
flagBare = "bare"
21-
flagGRPCAddress = "flagGRPCAddress"
21+
flagGRPCAddress = "gprc-address"
22+
flagMaxReadSize = "max-read-size"
2223
)
2324

2425
func configCmd() *cobra.Command {
@@ -70,6 +71,7 @@ for threshold signer mode, --cosigner flags and --threshold flag are required.
7071
}
7172
debugAddr, _ := cmdFlags.GetString(flagDebugAddr)
7273
grpcAddr, _ := cmdFlags.GetString(flagGRPCAddress)
74+
maxReadSize, _ := cmdFlags.GetInt(flagMaxReadSize)
7375
if signMode == string(signer.SignModeThreshold) {
7476
// Threshold Mode Config
7577
cosignersFlag, _ := cmdFlags.GetStringSlice(flagCosigner)
@@ -90,9 +92,10 @@ for threshold signer mode, --cosigner flags and --threshold flag are required.
9092
GRPCTimeout: grpcTimeout,
9193
RaftTimeout: raftTimeout,
9294
},
93-
ChainNodes: cn,
94-
DebugAddr: debugAddr,
95-
GRPCAddr: grpcAddr,
95+
ChainNodes: cn,
96+
DebugAddr: debugAddr,
97+
GRPCAddr: grpcAddr,
98+
MaxReadSize: maxReadSize,
9699
}
97100

98101
if !bare {
@@ -107,6 +110,7 @@ for threshold signer mode, --cosigner flags and --threshold flag are required.
107110
PrivValKeyDir: keyDir,
108111
ChainNodes: cn,
109112
DebugAddr: debugAddr,
113+
MaxReadSize: maxReadSize,
110114
}
111115
if !bare {
112116
if err = cfg.ValidateSingleSignerConfig(); err != nil {
@@ -162,5 +166,6 @@ for threshold signer mode, --cosigner flags and --threshold flag are required.
162166
"allows initialization without providing any flags. If flags are provided, will not perform final validation",
163167
)
164168
f.StringP(flagGRPCAddress, "g", "", "GRPC address if listener should be enabled")
169+
f.Int(flagMaxReadSize, 1024*1024, "max read size for remote signer connection")
165170
return cmd
166171
}

cmd/horcrux/cmd/config_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ chainNodes:
4848
- privValAddr: tcp://10.168.0.2:1234
4949
debugAddr: ""
5050
grpcAddr: ""
51+
maxReadSize: 1048576
5152
`,
5253
},
5354
{
@@ -64,6 +65,7 @@ chainNodes:
6465
- privValAddr: tcp://10.168.0.2:1234
6566
debugAddr: ""
6667
grpcAddr: ""
68+
maxReadSize: 1048576
6769
`,
6870
},
6971
{

cmd/horcrux/cmd/migrate.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,7 @@ func migrateCmd() *cobra.Command {
296296
}
297297

298298
config.Config.SignMode = signMode
299+
config.Config.MaxReadSize = 1024 * 1024
299300

300301
if err := config.WriteConfigFile(); err != nil {
301302
return err

cmd/horcrux/cmd/start.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ func startCmd() *cobra.Command {
7171

7272
go EnableDebugAndMetrics(cmd.Context(), out)
7373

74-
services, err = signer.StartRemoteSigners(services, logger, val, config.Config.Nodes())
74+
services, err = signer.StartRemoteSigners(services, logger, val, config.Config.Nodes(), config.Config.MaxReadSize)
7575
if err != nil {
7676
return fmt.Errorf("failed to start remote signer(s): %w", err)
7777
}

cmd/horcrux/cmd/testdata/config-migrated.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,4 @@ chainNodes:
1616
- privValAddr: tcp://127.0.0.1:3456
1717
debugAddr: ""
1818
grpcAddr: ""
19+
maxReadSize: 1048576

signer/config.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ type Config struct {
3535
ChainNodes ChainNodes `yaml:"chainNodes"`
3636
DebugAddr string `yaml:"debugAddr"`
3737
GRPCAddr string `yaml:"grpcAddr"`
38+
MaxReadSize int `yaml:"maxReadSize"`
3839
}
3940

4041
func (c *Config) Nodes() (out []string) {

signer/config_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -380,6 +380,7 @@ func TestRuntimeConfigWriteConfigFile(t *testing.T) {
380380
PrivValAddr: "tcp://127.0.0.1:3456",
381381
},
382382
},
383+
MaxReadSize: 1024 * 1024,
383384
},
384385
}
385386

@@ -404,6 +405,7 @@ chainNodes:
404405
- privValAddr: tcp://127.0.0.1:3456
405406
debugAddr: ""
406407
grpcAddr: ""
408+
maxReadSize: 1048576
407409
`, string(configYamlBz))
408410
}
409411

signer/io.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@ import (
88
)
99

1010
// ReadMsg reads a message from an io.Reader
11-
func ReadMsg(reader io.Reader) (msg cometprotoprivval.Message, err error) {
12-
const maxRemoteSignerMsgSize = 1024 * 10
13-
protoReader := protoio.NewDelimitedReader(reader, maxRemoteSignerMsgSize)
11+
func ReadMsg(reader io.Reader, maxReadSize int) (msg cometprotoprivval.Message, err error) {
12+
if maxReadSize <= 0 {
13+
maxReadSize = 1024 * 1024 // 1MB
14+
}
15+
protoReader := protoio.NewDelimitedReader(reader, maxReadSize)
1416
_, err = protoReader.ReadMsg(&msg)
1517
return msg, err
1618
}

signer/remote_signer.go

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ type ReconnRemoteSigner struct {
3737
privVal PrivValidator
3838

3939
dialer net.Dialer
40+
41+
maxReadSize int
4042
}
4143

4244
// NewReconnRemoteSigner return a ReconnRemoteSigner that will dial using the given
@@ -49,12 +51,14 @@ func NewReconnRemoteSigner(
4951
logger cometlog.Logger,
5052
privVal PrivValidator,
5153
dialer net.Dialer,
54+
maxReadSize int,
5255
) *ReconnRemoteSigner {
5356
rs := &ReconnRemoteSigner{
54-
address: address,
55-
privVal: privVal,
56-
dialer: dialer,
57-
privKey: cometcryptoed25519.GenPrivKey(),
57+
address: address,
58+
privVal: privVal,
59+
dialer: dialer,
60+
privKey: cometcryptoed25519.GenPrivKey(),
61+
maxReadSize: maxReadSize,
5862
}
5963

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

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

301306
err = s.Start()
302307
if err != nil {

0 commit comments

Comments
 (0)