Skip to content

Commit 06e03db

Browse files
committed
feat: extend MemberlistParams to support memberlist and broadcast
1 parent fd4e42f commit 06e03db

File tree

13 files changed

+161
-43
lines changed

13 files changed

+161
-43
lines changed

go.mod

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ require (
2828
github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7
2929
github.com/zeebo/blake3 v0.2.3
3030
go.uber.org/goleak v1.3.0
31-
golang.org/x/crypto v0.23.0
31+
golang.org/x/crypto v0.31.0
3232
golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842
3333
golang.org/x/mod v0.17.0
34-
golang.org/x/sync v0.7.0
34+
golang.org/x/sync v0.10.0
3535
golang.org/x/time v0.5.0
3636
gopkg.in/yaml.v3 v3.0.1
3737
)
@@ -87,9 +87,9 @@ require (
8787
go.uber.org/mock v0.4.0 // indirect
8888
golang.org/x/arch v0.7.0 // indirect
8989
golang.org/x/net v0.25.0 // indirect
90-
golang.org/x/sys v0.20.0 // indirect
91-
golang.org/x/text v0.15.0 // indirect
92-
golang.org/x/tools v0.21.0 // indirect
90+
golang.org/x/sys v0.28.0 // indirect
91+
golang.org/x/text v0.21.0 // indirect
92+
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect
9393
)
9494

9595
replace github.com/hashicorp/memberlist => github.com/spikeekips/memberlist v0.0.0-20230626195851-39f17fa10d23 // latest fix-data-race branch

go.sum

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -362,8 +362,8 @@ golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPh
362362
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
363363
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
364364
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
365-
golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI=
366-
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
365+
golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
366+
golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
367367
golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 h1:vr/HnozRka3pE4EsMEg1lgkXJkTFJCVUX+S/ZT6wYzM=
368368
golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc=
369369
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
@@ -396,8 +396,8 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ
396396
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
397397
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
398398
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
399-
golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
400-
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
399+
golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
400+
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
401401
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
402402
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
403403
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -438,8 +438,8 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
438438
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
439439
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
440440
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
441-
golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
442-
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
441+
golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
442+
golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
443443
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
444444
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
445445
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
@@ -453,8 +453,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
453453
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
454454
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
455455
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
456-
golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk=
457-
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
456+
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
457+
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
458458
golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
459459
golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
460460
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -463,8 +463,8 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn
463463
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
464464
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
465465
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
466-
golang.org/x/tools v0.21.0 h1:qc0xYgIbsSDt9EyWz05J5wfa7LOVW0YTLOXrqdLAWIw=
467-
golang.org/x/tools v0.21.0/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
466+
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg=
467+
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
468468
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
469469
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
470470
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

isaac/params.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ var (
2020
DefaultMinWaitNextBlockINITBallot = time.Second * 2
2121
DefaultStateCacheSize = 1 << 12
2222
DefaultOperationPoolCacheSize = 1 << 12
23+
DefaultBroadcastTimerMult = 5
2324
)
2425

2526
type Params struct {

isaac/states/broadcast.go

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,23 +21,26 @@ var (
2121

2222
type ballotBroadcastTimers struct {
2323
*sync.RWMutex
24-
timers *util.SimpleTimers
25-
broadcast func(context.Context, base.Ballot) error
26-
points map[util.TimerID]base.StagePoint
27-
interval time.Duration
24+
timers *util.SimpleTimers
25+
broadcast func(context.Context, base.Ballot) error
26+
points map[util.TimerID]base.StagePoint
27+
interval time.Duration
28+
broadcastTimerMult int
2829
}
2930

3031
func newBallotBroadcastTimers(
3132
timers *util.SimpleTimers,
3233
broadcast func(context.Context, base.Ballot) error,
3334
interval time.Duration,
35+
broadcastTimerMult int,
3436
) *ballotBroadcastTimers {
3537
return &ballotBroadcastTimers{
36-
RWMutex: &sync.RWMutex{},
37-
timers: timers,
38-
broadcast: broadcast,
39-
points: map[util.TimerID]base.StagePoint{},
40-
interval: interval,
38+
RWMutex: &sync.RWMutex{},
39+
timers: timers,
40+
broadcast: broadcast,
41+
points: map[util.TimerID]base.StagePoint{},
42+
interval: interval,
43+
broadcastTimerMult: broadcastTimerMult,
4144
}
4245
}
4346

@@ -71,11 +74,12 @@ func (bbt *ballotBroadcastTimers) Clone() *ballotBroadcastTimers {
7174
defer bbt.RUnlock()
7275

7376
return &ballotBroadcastTimers{
74-
RWMutex: bbt.RWMutex,
75-
timers: bbt.timers,
76-
broadcast: bbt.broadcast,
77-
points: bbt.points,
78-
interval: bbt.interval,
77+
RWMutex: bbt.RWMutex,
78+
timers: bbt.timers,
79+
broadcast: bbt.broadcast,
80+
points: bbt.points,
81+
interval: bbt.interval,
82+
broadcastTimerMult: bbt.broadcastTimerMult,
7983
}
8084
}
8185

@@ -165,7 +169,12 @@ func (bbt *ballotBroadcastTimers) addTimer(
165169

166170
if _, err := bbt.timers.New(
167171
ti,
168-
intervalf,
172+
func(t uint64) time.Duration {
173+
if strings.HasPrefix(ti.String(), "broadcast-init-ballot/") && !strings.Contains(ti.String(), "round=0") {
174+
return time.Duration(bbt.broadcastTimerMult) * intervalf(t)
175+
}
176+
return intervalf(t)
177+
},
169178
func(ctx context.Context, _ uint64) (bool, error) {
170179
return true, bbt.broadcast(ctx, bl)
171180
},

isaac/states/states.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ type StatesArgs struct {
3333
BallotBroadcaster BallotBroadcaster
3434
WhenStateSwitchedFunc func(StateType)
3535
IntervalBroadcastBallot func() time.Duration
36+
BroadcastTimerMult func() int
3637
WhenNewVoteproof func(base.Voteproof)
3738
NewHandoverXBroker NewHandoverXBrokerFunc
3839
NewHandoverYBroker NewHandoverYBrokerFunc
@@ -55,6 +56,9 @@ func NewStatesArgs() *StatesArgs {
5556
IntervalBroadcastBallot: func() time.Duration {
5657
return isaac.DefaultntervalBroadcastBallot
5758
},
59+
BroadcastTimerMult: func() int {
60+
return isaac.DefaultBroadcastTimerMult
61+
},
5862
WhenNewVoteproof: func(base.Voteproof) {},
5963
}
6064
}
@@ -106,6 +110,7 @@ func NewStates(networkID base.NetworkID, local base.LocalNode, args *StatesArgs)
106110
return nil
107111
},
108112
st.args.IntervalBroadcastBallot(),
113+
st.args.BroadcastTimerMult(),
109114
)
110115

111116
if st.args.Ballotbox != nil {

launch/local_params.go

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,14 @@ type MemberlistParams struct {
8484
retransmitMult int
8585
probeTimeout time.Duration
8686
probeInterval time.Duration
87+
gossipInterval time.Duration
8788
suspicionMult int
8889
suspicionMaxTimeoutMult int
8990
udpBufferSize int
9091
extraSameMemberLimit uint64
92+
broadcastTimerMult int
93+
userMsgLoopInterval time.Duration
94+
gosshipNodes int
9195
}
9296

9397
func defaultMemberlistParams() *MemberlistParams {
@@ -99,10 +103,14 @@ func defaultMemberlistParams() *MemberlistParams {
99103
retransmitMult: config.RetransmitMult,
100104
probeTimeout: config.ProbeTimeout,
101105
probeInterval: config.ProbeInterval,
106+
gossipInterval: config.GossipInterval,
102107
suspicionMult: config.SuspicionMult,
103108
suspicionMaxTimeoutMult: config.SuspicionMaxTimeoutMult,
104109
udpBufferSize: config.UDPBufferSize,
105110
extraSameMemberLimit: 1, //nolint:gomnd //...
111+
broadcastTimerMult: 5,
112+
userMsgLoopInterval: time.Millisecond * 33,
113+
gosshipNodes: config.GossipNodes,
106114
}
107115
}
108116

@@ -174,6 +182,38 @@ func (p *MemberlistParams) SetProbeInterval(d time.Duration) error {
174182
})
175183
}
176184

185+
func (p *MemberlistParams) GossipInterval() time.Duration {
186+
return p.gossipInterval
187+
}
188+
189+
func (p *MemberlistParams) SetGossipInterval(d time.Duration) error {
190+
return p.SetDuration(d, func(d time.Duration) (bool, error) {
191+
if p.gossipInterval == d {
192+
return false, nil
193+
}
194+
195+
p.gossipInterval = d
196+
197+
return true, nil
198+
})
199+
}
200+
201+
func (p *MemberlistParams) GosshipNodes() int {
202+
return p.gosshipNodes
203+
}
204+
205+
func (p *MemberlistParams) SetGosshipNodes(d int) error {
206+
return p.SetOverZeroInt(d, func(d int) (bool, error) {
207+
if p.gosshipNodes == d {
208+
return false, nil
209+
}
210+
211+
p.gosshipNodes = d
212+
213+
return true, nil
214+
})
215+
}
216+
177217
func (p *MemberlistParams) SuspicionMult() int {
178218
return p.suspicionMult
179219
}
@@ -238,6 +278,38 @@ func (p *MemberlistParams) SetExtraSameMemberLimit(d uint64) error {
238278
})
239279
}
240280

281+
func (p *MemberlistParams) BroadcastTimerMult() int {
282+
return p.broadcastTimerMult
283+
}
284+
285+
func (p *MemberlistParams) SetBroadcastTimerMult(d int) error {
286+
return p.SetOverZeroInt(d, func(d int) (bool, error) {
287+
if p.broadcastTimerMult == d {
288+
return false, nil
289+
}
290+
291+
p.broadcastTimerMult = d
292+
293+
return true, nil
294+
})
295+
}
296+
297+
func (p *MemberlistParams) UserMsgLoopInterval() time.Duration {
298+
return p.userMsgLoopInterval
299+
}
300+
301+
func (p *MemberlistParams) SetUserMsgLoopInterval(d time.Duration) error {
302+
return p.SetDuration(d, func(d time.Duration) (bool, error) {
303+
if p.userMsgLoopInterval == d {
304+
return false, nil
305+
}
306+
307+
p.userMsgLoopInterval = d
308+
309+
return true, nil
310+
})
311+
}
312+
241313
type MISCParams struct {
242314
*util.BaseParams
243315
syncSourceCheckerInterval time.Duration

launch/local_params_marshal.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,10 +109,14 @@ type memberlistParamsMarshaler struct {
109109
RetransmitMult int `json:"retransmit_mult,omitempty" yaml:"retransmit_mult,omitempty"`
110110
ProbeTimeout util.ReadableDuration `json:"probe_timeout,omitempty" yaml:"probe_timeout,omitempty"`
111111
ProbeInterval util.ReadableDuration `json:"probe_interval,omitempty" yaml:"probe_interval,omitempty"`
112+
GossipInterval util.ReadableDuration `json:"gossip_interval,omitempty" yaml:"gossip_interval,omitempty"`
113+
GosshipNodes int `json:"gossip_nodes,omitempty" yaml:"gossip_nodes,omitempty"`
112114
SuspicionMult int `json:"suspicion_mult,omitempty" yaml:"suspicion_mult,omitempty"`
113115
SuspicionMaxTimeoutMult int `json:"suspicion_max_timeout_mult,omitempty" yaml:"suspicion_max_timeout_mult,omitempty"`
114116
UDPBufferSize int `json:"udp_buffer_size,omitempty" yaml:"udp_buffer_size,omitempty"`
115117
ExtraSameMemberLimit uint64 `json:"extra_same_member_limit,omitempty" yaml:"extra_same_member_limit,omitempty"`
118+
BroadcastTimerMult int `json:"broadcast_timer_mult,omitempty" yaml:"broadcast_timer_mult,omitempty"`
119+
UserMsgLoopInterval util.ReadableDuration `json:"user_msg_loop_interval,omitempty" yaml:"user_msg_loop_interval,omitempty"`
116120
//revive:enable:line-length-limit
117121
}
118122

@@ -122,10 +126,14 @@ func (p *MemberlistParams) marshaler() memberlistParamsMarshaler {
122126
RetransmitMult: p.retransmitMult,
123127
ProbeTimeout: util.ReadableDuration(p.probeTimeout),
124128
ProbeInterval: util.ReadableDuration(p.probeInterval),
129+
GossipInterval: util.ReadableDuration(p.gossipInterval),
130+
GosshipNodes: p.gosshipNodes,
125131
SuspicionMult: p.suspicionMult,
126132
SuspicionMaxTimeoutMult: p.suspicionMaxTimeoutMult,
127133
UDPBufferSize: p.udpBufferSize,
128134
ExtraSameMemberLimit: p.extraSameMemberLimit,
135+
BroadcastTimerMult: p.broadcastTimerMult,
136+
UserMsgLoopInterval: util.ReadableDuration(p.userMsgLoopInterval),
129137
}
130138
}
131139

@@ -143,10 +151,14 @@ type memberlistParamsUnmarshaler struct {
143151
RetransmitMult *int `json:"retransmit_mult,omitempty" yaml:"retransmit_mult,omitempty"`
144152
ProbeTimeout *util.ReadableDuration `json:"probe_timeout,omitempty" yaml:"probe_timeout,omitempty"`
145153
ProbeInterval *util.ReadableDuration `json:"probe_interval,omitempty" yaml:"probe_interval,omitempty"`
154+
GossipInterval *util.ReadableDuration `json:"gossip_interval,omitempty" yaml:"gossip_interval,omitempty"`
155+
GosshipNodes *int `json:"gossip_nodes,omitempty" yaml:"gossip_nodes,omitempty"`
146156
SuspicionMult *int `json:"suspicion_mult,omitempty" yaml:"suspicion_mult,omitempty"`
147157
SuspicionMaxTimeoutMult *int `json:"suspicion_max_timeout_mult,omitempty" yaml:"suspicion_max_timeout_mult,omitempty"`
148158
UDPBufferSize *int `json:"udp_buffer_size,omitempty" yaml:"udp_buffer_size,omitempty"`
149159
ExtraSameMemberLimit *uint64 `json:"extra_same_member_limit,omitempty" yaml:"extra_same_member_limit,omitempty"`
160+
BroadcastTimerMult *int `json:"broadcast_timer_mult,omitempty" yaml:"broadcast_timer_mult,omitempty"`
161+
UserMsgLoopInterval *util.ReadableDuration `json:"user_msg_loop_interval,omitempty" yaml:"user_msg_loop_interval,omitempty"`
150162
//revive:enable:line-length-limit
151163
}
152164

@@ -201,10 +213,20 @@ func (p *MemberlistParams) unmarshal(u memberlistParamsUnmarshaler) error {
201213
p.extraSameMemberLimit = *u.ExtraSameMemberLimit
202214
}
203215

216+
if u.BroadcastTimerMult != nil {
217+
p.broadcastTimerMult = *u.BroadcastTimerMult
218+
}
219+
220+
if u.GosshipNodes != nil {
221+
p.gosshipNodes = *u.GosshipNodes
222+
}
223+
204224
durargs := [][2]interface{}{
205225
{u.TCPTimeout, &p.tcpTimeout},
206226
{u.ProbeTimeout, &p.probeTimeout},
207227
{u.ProbeInterval, &p.probeInterval},
228+
{u.GossipInterval, &p.gossipInterval},
229+
{u.UserMsgLoopInterval, &p.userMsgLoopInterval},
208230
}
209231

210232
for i := range durargs {

0 commit comments

Comments
 (0)