mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-18 18:02:24 +00:00
Merge pull request #406 from ethersphere/prune-remove-2
swarm/network: Remove pruning implementation
This commit is contained in:
commit
54fc06044d
3 changed files with 0 additions and 86 deletions
|
|
@ -61,7 +61,6 @@ type KadParams struct {
|
||||||
RetryInterval int64 // initial interval before a peer is first redialed
|
RetryInterval int64 // initial interval before a peer is first redialed
|
||||||
RetryExponent int // exponent to multiply retry intervals with
|
RetryExponent int // exponent to multiply retry intervals with
|
||||||
MaxRetries int // maximum number of redial attempts
|
MaxRetries int // maximum number of redial attempts
|
||||||
PruneInterval int // interval between peer pruning cycles
|
|
||||||
// function to sanction or prevent suggesting a peer
|
// function to sanction or prevent suggesting a peer
|
||||||
Reachable func(OverlayAddr) bool
|
Reachable func(OverlayAddr) bool
|
||||||
}
|
}
|
||||||
|
|
@ -76,7 +75,6 @@ func NewKadParams() *KadParams {
|
||||||
RetryInterval: 4200000000, // 4.2 sec
|
RetryInterval: 4200000000, // 4.2 sec
|
||||||
MaxRetries: 42,
|
MaxRetries: 42,
|
||||||
RetryExponent: 2,
|
RetryExponent: 2,
|
||||||
PruneInterval: 0, // TODO:
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -576,38 +574,6 @@ func (k *Kademlia) string() string {
|
||||||
return "\n" + strings.Join(rows, "\n")
|
return "\n" + strings.Join(rows, "\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Prune implements a forever loop reacting to a ticker time channel given
|
|
||||||
// as the first argument
|
|
||||||
// the loop quits if the channel is closed
|
|
||||||
// it checks each kademlia bin and if the peer count is higher than
|
|
||||||
// the MaxBinSize parameter it drops the oldest n peers such that
|
|
||||||
// the bin is reduced to MinBinSize peers thus leaving slots to newly
|
|
||||||
// connecting peers
|
|
||||||
func (k *Kademlia) Prune(c <-chan time.Time) {
|
|
||||||
go func() {
|
|
||||||
for range c {
|
|
||||||
k.lock.RLock()
|
|
||||||
conns := k.conns
|
|
||||||
k.lock.RUnlock()
|
|
||||||
total := 0
|
|
||||||
conns.EachBin(k.base, pof, 0, func(po, size int, f func(func(pot.Val, int) bool) bool) bool {
|
|
||||||
extra := size - k.MinBinSize
|
|
||||||
if size > k.MaxBinSize {
|
|
||||||
n := 0
|
|
||||||
f(func(v pot.Val, po int) bool {
|
|
||||||
v.(*entry).conn().Drop(fmt.Errorf("bucket full"))
|
|
||||||
n++
|
|
||||||
return n < extra
|
|
||||||
})
|
|
||||||
total += extra
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
})
|
|
||||||
log.Trace(fmt.Sprintf("pruned %v peers", total))
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
|
|
||||||
// PeerPot keeps info about expected nearest neighbours and empty bins
|
// PeerPot keeps info about expected nearest neighbours and empty bins
|
||||||
// used for testing only
|
// used for testing only
|
||||||
type PeerPot struct {
|
type PeerPot struct {
|
||||||
|
|
|
||||||
|
|
@ -348,55 +348,6 @@ func TestSuggestPeerRetries(t *testing.T) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPruning(t *testing.T) {
|
|
||||||
k := newTestKademlia("00000000")
|
|
||||||
k.On("10000000", "11000000", "10100000", "10010000", "10001000", "10000100")
|
|
||||||
k.On("01000000", "01100000", "01000100", "01000010", "01000001")
|
|
||||||
k.On("00100000", "00110000", "00100010", "00100001")
|
|
||||||
k.MaxBinSize = 4
|
|
||||||
k.MinBinSize = 3
|
|
||||||
prune := make(chan time.Time)
|
|
||||||
defer close(prune)
|
|
||||||
k.Prune((<-chan time.Time)(prune))
|
|
||||||
prune <- time.Now()
|
|
||||||
quitc := make(chan bool)
|
|
||||||
timeout := time.NewTimer(1000 * time.Millisecond)
|
|
||||||
n := 0
|
|
||||||
dropped := make(map[string]error)
|
|
||||||
expDropped := []string{
|
|
||||||
"10010000",
|
|
||||||
"10100000",
|
|
||||||
"11000000",
|
|
||||||
"01000100",
|
|
||||||
"01100000",
|
|
||||||
}
|
|
||||||
go func() {
|
|
||||||
for e := range k.dropc {
|
|
||||||
err := e.(*dropError)
|
|
||||||
dropped[err.addr] = err.error
|
|
||||||
n++
|
|
||||||
if n == len(expDropped) {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
close(quitc)
|
|
||||||
}()
|
|
||||||
select {
|
|
||||||
case <-quitc:
|
|
||||||
case <-timeout.C:
|
|
||||||
t.Fatalf("timeout waiting for dropped peers. expected %v, got %v", len(expDropped), len(dropped))
|
|
||||||
}
|
|
||||||
for _, addr := range expDropped {
|
|
||||||
err := dropped[addr]
|
|
||||||
if err == nil {
|
|
||||||
t.Fatalf("expected peer %v to be dropped", addr)
|
|
||||||
}
|
|
||||||
if err.Error() != "bucket full" {
|
|
||||||
t.Fatalf("incorrect error. expected %v, got %v", "bucket full", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestKademliaHiveString(t *testing.T) {
|
func TestKademliaHiveString(t *testing.T) {
|
||||||
k := newTestKademlia("00000000").On("01000000", "00100000").Register("10000000", "10000001")
|
k := newTestKademlia("00000000").On("01000000", "00100000").Register("10000000", "10000001")
|
||||||
k.MaxProxDisplay = 8
|
k.MaxProxDisplay = 8
|
||||||
|
|
|
||||||
|
|
@ -53,10 +53,7 @@ func (s *Simulation) NewService(ctx *adapters.ServiceContext) (node.Service, err
|
||||||
kp.MaxRetries = 1000
|
kp.MaxRetries = 1000
|
||||||
kp.RetryExponent = 2
|
kp.RetryExponent = 2
|
||||||
kp.RetryInterval = 1000000
|
kp.RetryInterval = 1000000
|
||||||
kp.PruneInterval = 2000
|
|
||||||
kad := network.NewKademlia(addr.Over(), kp)
|
kad := network.NewKademlia(addr.Over(), kp)
|
||||||
ticker := time.NewTicker(time.Duration(kad.PruneInterval) * time.Millisecond)
|
|
||||||
kad.Prune(ticker.C)
|
|
||||||
hp := network.NewHiveParams()
|
hp := network.NewHiveParams()
|
||||||
hp.Discovery = !*noDiscovery
|
hp.Discovery = !*noDiscovery
|
||||||
hp.KeepAliveInterval = 300 * time.Millisecond
|
hp.KeepAliveInterval = 300 * time.Millisecond
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue