Skip to content

Commit

Permalink
fix outbound constraint satisfaction in oversubscription pruning
Browse files Browse the repository at this point in the history
  • Loading branch information
vyzo committed May 26, 2020
1 parent bac68a1 commit 9a1171a
Showing 1 changed file with 23 additions and 5 deletions.
28 changes: 23 additions & 5 deletions gossipsub.go
Original file line number Diff line number Diff line change
Expand Up @@ -1302,15 +1302,33 @@ func (gs *GossipSubRouter) heartbeat() {

// if it's less than D_out, bubble up some outbound peers from the random selection
if outbound < gs.Dout {
rotate := func(i int) {
// rotate the plst to the right and put the ith peer in the front
p := plst[i]
for j := i; j > 0; j-- {
plst[j] = plst[j-1]
}
plst[0] = p
}

// first bubble up all outbound peers already in the selection to the front
if outbound > 0 {
ihave := outbound
for i := 1; i < gs.D && ihave > 0; i++ {
p := plst[i]
if gs.outbound[p] {
rotate(i)
ihave--
}
}
}

// now bubble up enough outbound peers outside the selection to the front
ineed := gs.Dout - outbound
for i := gs.D; i < len(plst) && ineed > 0; i++ {
p := plst[i]
if gs.outbound[p] {
// rotate the plst to the right and put the outbound peer in the front
for j := i; j > 0; j-- {
plst[j] = plst[j-1]
}
plst[0] = p
rotate(i)
ineed--
}
}
Expand Down

0 comments on commit 9a1171a

Please sign in to comment.