Skip to content

Commit 273bea8

Browse files
authored
Merge pull request #180 from cloudstruct/feat/localtxsubmission-timeout
feat: make localtxsubmission timeout configurable
2 parents 46f99b5 + 2fc77a9 commit 273bea8

File tree

7 files changed

+41
-9
lines changed

7 files changed

+41
-9
lines changed

protocol/blockfetch/client.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ func NewClient(protoOptions protocol.ProtocolOptions, cfg *Config) *Client {
2121
config: cfg,
2222
}
2323
// Update state map with timeouts
24-
stateMap := StateMap
24+
stateMap := StateMap.Copy()
2525
if entry, ok := stateMap[STATE_BUSY]; ok {
2626
entry.Timeout = c.config.BatchStartTimeout
2727
stateMap[STATE_BUSY] = entry
@@ -40,7 +40,7 @@ func NewClient(protoOptions protocol.ProtocolOptions, cfg *Config) *Client {
4040
Role: protocol.ProtocolRoleClient,
4141
MessageHandlerFunc: c.messageHandler,
4242
MessageFromCborFunc: NewMsgFromCbor,
43-
StateMap: StateMap,
43+
StateMap: stateMap,
4444
InitialState: STATE_IDLE,
4545
}
4646
c.Protocol = protocol.New(protoConfig)

protocol/chainsync/client.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func NewClient(protoOptions protocol.ProtocolOptions, cfg *Config) *Client {
3838
currentTipChan: make(chan Tip),
3939
}
4040
// Update state map with timeouts
41-
stateMap := StateMap
41+
stateMap := StateMap.Copy()
4242
if entry, ok := stateMap[STATE_INTERSECT]; ok {
4343
entry.Timeout = c.config.IntersectTimeout
4444
stateMap[STATE_INTERSECT] = entry
@@ -59,7 +59,7 @@ func NewClient(protoOptions protocol.ProtocolOptions, cfg *Config) *Client {
5959
Role: protocol.ProtocolRoleClient,
6060
MessageHandlerFunc: c.messageHandler,
6161
MessageFromCborFunc: msgFromCborFunc,
62-
StateMap: StateMap,
62+
StateMap: stateMap,
6363
InitialState: STATE_IDLE,
6464
}
6565
c.Protocol = protocol.New(protoConfig)

protocol/handshake/client.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ func NewClient(protoOptions protocol.ProtocolOptions, cfg *Config) *Client {
1919
config: cfg,
2020
}
2121
// Update state map with timeout
22-
stateMap := StateMap
22+
stateMap := StateMap.Copy()
2323
if entry, ok := stateMap[STATE_CONFIRM]; ok {
2424
entry.Timeout = c.config.Timeout
2525
stateMap[STATE_CONFIRM] = entry
@@ -34,7 +34,7 @@ func NewClient(protoOptions protocol.ProtocolOptions, cfg *Config) *Client {
3434
Role: protocol.ProtocolRoleClient,
3535
MessageHandlerFunc: c.handleMessage,
3636
MessageFromCborFunc: NewMsgFromCbor,
37-
StateMap: StateMap,
37+
StateMap: stateMap,
3838
InitialState: STATE_PROPOSE,
3939
}
4040
c.Protocol = protocol.New(protoConfig)

protocol/keepalive/client.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ func NewClient(protoOptions protocol.ProtocolOptions, cfg *Config) *Client {
2121
config: cfg,
2222
}
2323
// Update state map with timeout
24-
stateMap := StateMap
24+
stateMap := StateMap.Copy()
2525
if entry, ok := stateMap[STATE_SERVER]; ok {
2626
entry.Timeout = c.config.Timeout
2727
stateMap[STATE_SERVER] = entry

protocol/localtxsubmission/client.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,21 @@ type Client struct {
1515
}
1616

1717
func NewClient(protoOptions protocol.ProtocolOptions, cfg *Config) *Client {
18+
if cfg == nil {
19+
tmpCfg := NewConfig()
20+
cfg = &tmpCfg
21+
}
1822
c := &Client{
1923
config: cfg,
2024
submitResultChan: make(chan error),
2125
}
26+
// Update state map with timeout
27+
stateMap := StateMap.Copy()
28+
if entry, ok := stateMap[STATE_BUSY]; ok {
29+
entry.Timeout = c.config.Timeout
30+
stateMap[STATE_BUSY] = entry
31+
}
32+
// Configure underlying Protocol
2233
protoConfig := protocol.ProtocolConfig{
2334
Name: PROTOCOL_NAME,
2435
ProtocolId: PROTOCOL_ID,
@@ -28,7 +39,7 @@ func NewClient(protoOptions protocol.ProtocolOptions, cfg *Config) *Client {
2839
Role: protocol.ProtocolRoleClient,
2940
MessageHandlerFunc: c.messageHandler,
3041
MessageFromCborFunc: NewMsgFromCbor,
31-
StateMap: StateMap,
42+
StateMap: stateMap,
3243
InitialState: STATE_IDLE,
3344
}
3445
c.Protocol = protocol.New(protoConfig)

protocol/localtxsubmission/localtxsubmission.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package localtxsubmission
22

33
import (
4+
"time"
5+
46
"github.com/cloudstruct/go-ouroboros-network/protocol"
57
)
68

@@ -50,6 +52,7 @@ type LocalTxSubmission struct {
5052

5153
type Config struct {
5254
SubmitTxFunc SubmitTxFunc
55+
Timeout time.Duration
5356
}
5457

5558
// Callback function types
@@ -66,7 +69,9 @@ func New(protoOptions protocol.ProtocolOptions, cfg *Config) *LocalTxSubmission
6669
type LocalTxSubmissionOptionFunc func(*Config)
6770

6871
func NewConfig(options ...LocalTxSubmissionOptionFunc) Config {
69-
c := Config{}
72+
c := Config{
73+
Timeout: 30 * time.Second,
74+
}
7075
// Apply provided options functions
7176
for _, option := range options {
7277
option(&c)
@@ -79,3 +84,9 @@ func WithSubmitTxFunc(submitTxFunc SubmitTxFunc) LocalTxSubmissionOptionFunc {
7984
c.SubmitTxFunc = submitTxFunc
8085
}
8186
}
87+
88+
func WithTimeout(timeout time.Duration) LocalTxSubmissionOptionFunc {
89+
return func(c *Config) {
90+
c.Timeout = timeout
91+
}
92+
}

protocol/state.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,13 @@ type StateMapEntry struct {
4141
}
4242

4343
type StateMap map[State]StateMapEntry
44+
45+
// Copy returns a copy of the state map. This is mostly for convenience,
46+
// since we need to copy the state map in various places
47+
func (s StateMap) Copy() StateMap {
48+
ret := StateMap{}
49+
for k, v := range s {
50+
ret[k] = v
51+
}
52+
return ret
53+
}

0 commit comments

Comments
 (0)