Skip to content

Commit 0f3754f

Browse files
committed
[FAB-10008] Fine tune gossip pull timeouts
The gossip request wait time needs to be slightly above the digest wait time in order to give the initiating peer some time to: - process the digests received - send back the requests Otherwise, the responding peer(s) might abandon the session because they prune the session after requestWaitTime passes since the time they send a digest. Change-Id: Ied95076e067fa9fac04513b53da0536f975aa9ca Signed-off-by: yacovm <yacovm@il.ibm.com>
1 parent d304c94 commit 0f3754f

File tree

4 files changed

+19
-13
lines changed

4 files changed

+19
-13
lines changed

examples/cluster/config/core.yaml

+5-2
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ peer:
119119
# Number of peers selected to push messages to
120120
propagatePeerNum: 3
121121
# Determines frequency of pull phases(unit: second)
122+
# Must be greater than digestWaitTime + responseWaitTime
122123
pullInterval: 4s
123124
# Number of peers to pull from
124125
pullPeerNum: 3
@@ -141,9 +142,11 @@ peer:
141142
# Buffer size of sending messages
142143
sendBuffSize: 20
143144
# Time to wait before pull engine processes incoming digests (unit: second)
145+
# Should be slightly smaller than requestWaitTime
144146
digestWaitTime: 1s
145-
# Time to wait before pull engine removes incoming nonce (unit: second)
146-
requestWaitTime: 1s
147+
# Time to wait before pull engine removes incoming nonce (unit: milliseconds)
148+
# Should be slightly bigger than digestWaitTime
149+
requestWaitTime: 1500ms
147150
# Time to wait before pull engine ends pull (unit: second)
148151
responseWaitTime: 2s
149152
# Alive check interval(unit: second)

gossip/gossip/algo/pull.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ import (
3434
*/
3535

3636
const (
37-
defDigestWaitTime = time.Duration(1) * time.Second
38-
defRequestWaitTime = time.Duration(1) * time.Second
39-
defResponseWaitTime = time.Duration(2) * time.Second
37+
defDigestWaitTime = time.Duration(1000) * time.Millisecond
38+
defRequestWaitTime = time.Duration(1500) * time.Millisecond
39+
defResponseWaitTime = time.Duration(2000) * time.Millisecond
4040
)
4141

4242
// SetDigestWaitTime sets the digest wait time

gossip/gossip/algo/pull_test.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -553,9 +553,9 @@ func TestDefaultConfig(t *testing.T) {
553553
// Check if we can read default duration when no properties are
554554
// defined in config file.
555555
viper.Reset()
556-
assert.Equal(t, time.Duration(1)*time.Second, util.GetDurationOrDefault("peer.gossip.digestWaitTime", defDigestWaitTime))
557-
assert.Equal(t, time.Duration(1)*time.Second, util.GetDurationOrDefault("peer.gossip.requestWaitTime", defRequestWaitTime))
558-
assert.Equal(t, time.Duration(2)*time.Second, util.GetDurationOrDefault("peer.gossip.responseWaitTime", defResponseWaitTime))
556+
assert.Equal(t, time.Duration(1000)*time.Millisecond, util.GetDurationOrDefault("peer.gossip.digestWaitTime", defDigestWaitTime))
557+
assert.Equal(t, time.Duration(1500)*time.Millisecond, util.GetDurationOrDefault("peer.gossip.requestWaitTime", defRequestWaitTime))
558+
assert.Equal(t, time.Duration(2000)*time.Millisecond, util.GetDurationOrDefault("peer.gossip.responseWaitTime", defResponseWaitTime))
559559

560560
// Check if the properties in the config file (core.yaml)
561561
// are set to the desired duration.
@@ -567,9 +567,9 @@ func TestDefaultConfig(t *testing.T) {
567567
viper.AutomaticEnv()
568568
err := viper.ReadInConfig()
569569
assert.NoError(t, err)
570-
assert.Equal(t, time.Duration(1)*time.Second, util.GetDurationOrDefault("peer.gossip.digestWaitTime", defDigestWaitTime))
571-
assert.Equal(t, time.Duration(1)*time.Second, util.GetDurationOrDefault("peer.gossip.requestWaitTime", defRequestWaitTime))
572-
assert.Equal(t, time.Duration(2)*time.Second, util.GetDurationOrDefault("peer.gossip.responseWaitTime", defResponseWaitTime))
570+
assert.Equal(t, time.Duration(1000)*time.Millisecond, util.GetDurationOrDefault("peer.gossip.digestWaitTime", defDigestWaitTime))
571+
assert.Equal(t, time.Duration(1500)*time.Millisecond, util.GetDurationOrDefault("peer.gossip.requestWaitTime", defRequestWaitTime))
572+
assert.Equal(t, time.Duration(2000)*time.Millisecond, util.GetDurationOrDefault("peer.gossip.responseWaitTime", defResponseWaitTime))
573573
}
574574

575575
func Strcmp(a interface{}, b interface{}) bool {

sampleconfig/core.yaml

+5-2
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ peer:
168168
# Number of peers selected to push messages to
169169
propagatePeerNum: 3
170170
# Determines frequency of pull phases(unit: second)
171+
# Must be greater than digestWaitTime + responseWaitTime
171172
pullInterval: 4s
172173
# Number of peers to pull from
173174
pullPeerNum: 3
@@ -190,9 +191,11 @@ peer:
190191
# Buffer size of sending messages
191192
sendBuffSize: 200
192193
# Time to wait before pull engine processes incoming digests (unit: second)
194+
# Should be slightly smaller than requestWaitTime
193195
digestWaitTime: 1s
194-
# Time to wait before pull engine removes incoming nonce (unit: second)
195-
requestWaitTime: 1s
196+
# Time to wait before pull engine removes incoming nonce (unit: milliseconds)
197+
# Should be slightly bigger than digestWaitTime
198+
requestWaitTime: 1500ms
196199
# Time to wait before pull engine ends pull (unit: second)
197200
responseWaitTime: 2s
198201
# Alive check interval(unit: second)

0 commit comments

Comments
 (0)