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) {