hide ledger wantlist manipulation
Brian Tiger Chow committed
Sep 10, 2014 at 20:23 UTC
99db07c3a4fa77a367431333680fc671950105e1
2 files changed
+17
-8
bitswap/bitswap.go
+7
-8
@@ -137,7 +137,7 @@ func (bs *BitSwap) getBlock(k u.Key, p *peer.Peer, timeout time.Duration) ([]byt
137
func (bs *BitSwap) HaveBlock(blk *blocks.Block) error {
138
go func() {
139
for _, ledger := range bs.partners {
140
- if _, ok := ledger.WantList[blk.Key()]; ok {
140
+ if ledger.WantListContains(blk.Key()) {
141
//send block to node
142
if ledger.ShouldSend() {
143
bs.SendBlock(ledger.Partner, blk)
@@ -192,14 +192,13 @@ func (bs *BitSwap) handleMessages() {
192
// and then if we do, check the ledger for whether or not we should send it.
193
func (bs *BitSwap) peerWantsBlock(p *peer.Peer, want string) {
194
u.DOut("peer [%s] wants block [%s]\n", p.ID.Pretty(), u.Key(want).Pretty())
195
- ledg := bs.getLedger(p)
195
+ ledger := bs.getLedger(p)
196
197
dsk := ds.NewKey(want)
198
blk_i, err := bs.datastore.Get(dsk)
199
if err != nil {
200
if err == ds.ErrNotFound {
201
- // TODO: this needs to be different. We need timeouts.
202
- ledg.WantList[u.Key(want)] = struct{}{}
201
+ ledger.Wants(u.Key(want))
202
}
203
u.PErr("datastore get error: %v\n", err)
204
return
@@ -211,7 +210,7 @@ func (bs *BitSwap) peerWantsBlock(p *peer.Peer, want string) {
210
return
211
}
212
214
- if ledg.ShouldSend() {
213
+ if ledger.ShouldSend() {
214
u.DOut("Sending block to peer.\n")
215
bblk, err := blocks.NewBlock(blk)
216
if err != nil {
@@ -219,7 +218,7 @@ func (bs *BitSwap) peerWantsBlock(p *peer.Peer, want string) {
218
return
219
}
220
bs.SendBlock(p, bblk)
222
- ledg.SentBytes(len(blk))
221
+ ledger.SentBytes(len(blk))
222
} else {
223
u.DOut("Decided not to send block.")
224
}
@@ -276,7 +275,7 @@ func (bs *BitSwap) Halt() {
275
276
func (bs *BitSwap) SetStrategy(sf StrategyFunc) {
277
bs.strategy = sf
279
- for _, ledg := range bs.partners {
280
- ledg.Strategy = sf
278
+ for _, ledger := range bs.partners {
279
+ ledger.Strategy = sf
280
}
281
}
bitswap/ledger.go
+10
@@ -49,3 +49,13 @@ func (l *Ledger) ReceivedBytes(n int) {
49
l.LastExchange = time.Now()
50
l.Accounting.BytesRecv += uint64(n)
51
}
52
+
53
+// TODO: this needs to be different. We need timeouts.
54
+func (l *Ledger) Wants(k u.Key) {
55
+ l.WantList[k] = struct{}{}
56
+}
57
+
58
+func (l *Ledger) WantListContains(k u.Key) bool {
59
+ _, ok := l.WantList[k]
60
+ return ok
61
+}