Skip to content

Commit c31379b

Browse files
committed
fix: reacher
1 parent f6628dc commit c31379b

File tree

2 files changed

+16
-28
lines changed

2 files changed

+16
-28
lines changed

pkg/p2p/libp2p/internal/reacher/reacher.go

Lines changed: 14 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import (
1818

1919
const (
2020
pingTimeout = time.Second * 15
21-
workers = 8
21+
workers = 32
2222
retryAfterDuration = time.Minute * 5
2323
)
2424

@@ -32,8 +32,8 @@ type reacher struct {
3232
mu sync.Mutex
3333
peers map[string]*peer
3434

35-
work chan struct{}
36-
quit chan struct{}
35+
newPeer chan struct{}
36+
quit chan struct{}
3737

3838
pinger p2p.Pinger
3939
notifier p2p.ReachableNotifier
@@ -53,7 +53,7 @@ type Options struct {
5353
func New(streamer p2p.Pinger, notifier p2p.ReachableNotifier, o *Options) *reacher {
5454

5555
r := &reacher{
56-
work: make(chan struct{}, 1),
56+
newPeer: make(chan struct{}, 1),
5757
quit: make(chan struct{}),
5858
pinger: streamer,
5959
peers: make(map[string]*peer),
@@ -93,17 +93,15 @@ func (r *reacher) manage() {
9393

9494
for {
9595

96-
p, tryAfter := r.tryAcquirePeer()
96+
p, tryAfter := r.nextPeer()
9797

9898
// if no peer is returned,
9999
// wait until either more work or the closest retry-after time.
100-
101-
// wait for work and tryAfter
102100
if tryAfter > 0 {
103101
select {
104102
case <-r.quit:
105103
return
106-
case <-r.work:
104+
case <-r.newPeer:
107105
continue
108106
case <-time.After(tryAfter):
109107
continue
@@ -115,12 +113,12 @@ func (r *reacher) manage() {
115113
select {
116114
case <-r.quit:
117115
return
118-
case <-r.work:
116+
case <-r.newPeer:
119117
continue
120118
}
121119
}
122120

123-
// send p to channel
121+
// ping peer
124122
select {
125123
case <-r.quit:
126124
return
@@ -135,10 +133,6 @@ func (r *reacher) ping(c chan *peer, ctx context.Context) {
135133

136134
for p := range c {
137135

138-
r.mu.Lock()
139-
overlay := p.overlay
140-
r.mu.Unlock()
141-
142136
now := time.Now()
143137

144138
ctxt, cancel := context.WithTimeout(ctx, r.options.PingTimeout)
@@ -149,30 +143,25 @@ func (r *reacher) ping(c chan *peer, ctx context.Context) {
149143
if err == nil {
150144
r.metrics.Pings.WithLabelValues("success").Inc()
151145
r.metrics.PingTime.WithLabelValues("success").Observe(time.Since(now).Seconds())
152-
r.notifier.Reachable(overlay, p2p.ReachabilityStatusPublic)
146+
r.notifier.Reachable(p.overlay, p2p.ReachabilityStatusPublic)
153147
} else {
154148
r.metrics.Pings.WithLabelValues("failure").Inc()
155149
r.metrics.PingTime.WithLabelValues("failure").Observe(time.Since(now).Seconds())
156-
r.notifier.Reachable(overlay, p2p.ReachabilityStatusPrivate)
150+
r.notifier.Reachable(p.overlay, p2p.ReachabilityStatusPrivate)
157151
}
158-
159-
r.notifyManage()
160152
}
161153
}
162154

163-
func (r *reacher) tryAcquirePeer() (*peer, time.Duration) {
155+
func (r *reacher) nextPeer() (*peer, time.Duration) {
164156
r.mu.Lock()
165157
defer r.mu.Unlock()
166158

167-
var (
168-
now = time.Now()
169-
nextClosest time.Time
170-
)
159+
var nextClosest time.Time
171160

172161
for _, p := range r.peers {
173162

174163
// retry after has expired, retry
175-
if now.After(p.retryAfter) {
164+
if time.Now().After(p.retryAfter) {
176165
p.retryAfter = time.Now().Add(r.options.RetryAfterDuration)
177166
return p, 0
178167
}
@@ -193,7 +182,7 @@ func (r *reacher) tryAcquirePeer() (*peer, time.Duration) {
193182

194183
func (r *reacher) notifyManage() {
195184
select {
196-
case r.work <- struct{}{}:
185+
case r.newPeer <- struct{}{}:
197186
default:
198187
}
199188
}

pkg/topology/kademlia/kademlia.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,9 +123,8 @@ type kadOptions struct {
123123
}
124124

125125
var (
126-
oversaturationCounts = [swarm.MaxBins]int{64, 32, 16, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8}
127-
suffixBits = [swarm.MaxBins]int{5, 4, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}
128-
// prefixBits = [swarm.MaxBins]int{6, 5, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}
126+
oversaturationCounts = [swarm.MaxBins]int{64, 32, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}
127+
suffixBits = [swarm.MaxBins]int{5, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}
129128
)
130129

131130
func newKadOptions(o Options) kadOptions {

0 commit comments

Comments
 (0)