@cryptotaxi247 / kubo / commits / e4a8a2ed6

same block cant be sent twice to a peer within a certain time period

Jeromy committed Dec 7, 2014 at 20:54 UTC e4a8a2ed651bd745b03bb11073c06c0a559fbeb0
2 files changed +8 -5
exchange/bitswap/strategy/ledger.go
+2 -2
@@ -16,7 +16,7 @@ func newLedger(p peer.Peer, strategy strategyFunc) *ledger {
16 wantList: keySet{},
17 Strategy: strategy,
18 Partner: p,
19 - sentToPeer: make(map[u.Key]struct{}),
19 + sentToPeer: make(map[u.Key]time.Time),
20 }
21 }
22
@@ -43,7 +43,7 @@ type ledger struct {
43
44 // sentToPeer is a set of keys to ensure we dont send duplicate blocks
45 // to a given peer
46 - sentToPeer map[u.Key]struct{}
46 + sentToPeer map[u.Key]time.Time
47
48 Strategy strategyFunc
49 }
exchange/bitswap/strategy/strategy.go
+6 -3
@@ -10,6 +10,8 @@ import (
10 u "github.com/jbenet/go-ipfs/util"
11 )
12
13 +const resendTimeoutPeriod = time.Minute
14 +
15 var log = u.Logger("strategy")
16
17 // TODO niceness should be on a per-peer basis. Use-case: Certain peers are
@@ -66,8 +68,9 @@ func (s *strategist) ShouldSendBlockToPeer(k u.Key, p peer.Peer) bool {
68
69 ledger := s.ledger(p)
70
69 - // Dont resend blocks
70 - if _, ok := ledger.sentToPeer[k]; ok {
71 + // Dont resend blocks within a certain time period
72 + t, ok := ledger.sentToPeer[k]
73 + if ok && t.Add(resendTimeoutPeriod).After(time.Now()) {
74 return false
75 }
76
@@ -79,7 +82,7 @@ func (s *strategist) BlockSentToPeer(k u.Key, p peer.Peer) {
82 defer s.lock.Unlock()
83
84 ledger := s.ledger(p)
82 - ledger.sentToPeer[k] = struct{}{}
85 + ledger.sentToPeer[k] = time.Now()
86 }
87
88 func (s *strategist) Seed(int64) {