contextify peermanager
Jeromy committed
May 13, 2015 at 16:35 UTC
ef967ceeef50995877c0245ccbde1bd87a0fe9c9
4 files changed
+14
-16
exchange/bitswap/bitswap.go
-2
@@ -316,8 +316,6 @@ func (bs *Bitswap) sendWantlistToProviders(ctx context.Context, entries []wantli
316
317
// TODO(brian): handle errors
318
func (bs *Bitswap) ReceiveMessage(ctx context.Context, p peer.ID, incoming bsmsg.BitSwapMessage) error {
319
- //defer log.EventBegin(ctx, "receiveMessage", p, incoming).Done()
320
-
319
// This call records changes to wantlists, blocks received,
320
// and number of bytes transfered.
321
bs.engine.MessageReceived(p, incoming)
exchange/bitswap/decision/engine.go
+1
-1
@@ -206,7 +206,7 @@ func (e *Engine) MessageReceived(p peer.ID, m bsmsg.BitSwapMessage) error {
206
l.CancelWant(entry.Key)
207
e.peerRequestQueue.Remove(entry.Key, p)
208
} else {
209
- log.Debugf("wants %s", entry.Key, entry.Priority)
209
+ log.Debugf("wants %s - %d", entry.Key, entry.Priority)
210
l.Wants(entry.Key, entry.Priority)
211
if exists, err := e.bs.Has(entry.Key); err == nil && exists {
212
e.peerRequestQueue.Push(entry.Entry, p)
exchange/bitswap/peermanager.go
+11
-11
@@ -53,24 +53,24 @@ type msgQueue struct {
53
done chan struct{}
54
}
55
56
-func (pm *PeerManager) SendBlock(env *engine.Envelope) {
56
+func (pm *PeerManager) SendBlock(ctx context.Context, env *engine.Envelope) {
57
// Blocks need to be sent synchronously to maintain proper backpressure
58
// throughout the network stack
59
defer env.Sent()
60
61
msg := bsmsg.New()
62
msg.AddBlock(env.Block)
63
- err := pm.network.SendMessage(context.TODO(), env.Peer, msg)
63
+ err := pm.network.SendMessage(ctx, env.Peer, msg)
64
if err != nil {
65
log.Error(err)
66
}
67
}
68
69
-func (pm *PeerManager) startPeerHandler(p peer.ID) {
69
+func (pm *PeerManager) startPeerHandler(ctx context.Context, p peer.ID) *msgQueue {
70
_, ok := pm.peers[p]
71
if ok {
72
// TODO: log an error?
73
- return
73
+ return nil
74
}
75
76
mq := new(msgQueue)
@@ -79,7 +79,8 @@ func (pm *PeerManager) startPeerHandler(p peer.ID) {
79
mq.p = p
80
81
pm.peers[p] = mq
82
- go pm.runQueue(mq)
82
+ go pm.runQueue(ctx, mq)
83
+ return mq
84
}
85
86
func (pm *PeerManager) stopPeerHandler(p peer.ID) {
@@ -93,14 +94,14 @@ func (pm *PeerManager) stopPeerHandler(p peer.ID) {
94
delete(pm.peers, p)
95
}
96
96
-func (pm *PeerManager) runQueue(mq *msgQueue) {
97
+func (pm *PeerManager) runQueue(ctx context.Context, mq *msgQueue) {
98
for {
99
select {
100
case <-mq.work: // there is work to be done
101
102
// TODO: this might not need to be done every time, figure out
103
// a good heuristic
103
- err := pm.network.ConnectTo(context.TODO(), mq.p)
104
+ err := pm.network.ConnectTo(ctx, mq.p)
105
if err != nil {
106
log.Error(err)
107
// TODO: cant connect, what now?
@@ -114,7 +115,7 @@ func (pm *PeerManager) runQueue(mq *msgQueue) {
115
116
if wlm != nil && !wlm.Empty() {
117
// send wantlist updates
117
- err = pm.network.SendMessage(context.TODO(), mq.p, wlm)
118
+ err = pm.network.SendMessage(ctx, mq.p, wlm)
119
if err != nil {
120
log.Error("bitswap send error: ", err)
121
// TODO: what do we do if this fails?
@@ -162,13 +163,12 @@ func (pm *PeerManager) Run(ctx context.Context) {
163
p, ok := pm.peers[msgp.to]
164
if !ok {
165
//TODO: decide, drop message? or dial?
165
- pm.startPeerHandler(msgp.to)
166
- p = pm.peers[msgp.to]
166
+ p = pm.startPeerHandler(ctx, msgp.to)
167
}
168
169
p.addMessage(msgp.msg)
170
case p := <-pm.connect:
171
- pm.startPeerHandler(p)
171
+ pm.startPeerHandler(ctx, p)
172
case p := <-pm.disconnect:
173
pm.stopPeerHandler(p)
174
case <-ctx.Done():
exchange/bitswap/workers.go
+2
-2
@@ -46,6 +46,7 @@ func (bs *Bitswap) startWorkers(px process.Process, ctx context.Context) {
46
bs.rebroadcastWorker(ctx)
47
})
48
49
+ // Start up a worker to manage sending out provides messages
50
px.Go(func(px process.Process) {
51
bs.provideCollector(ctx)
52
})
@@ -71,8 +72,7 @@ func (bs *Bitswap) taskWorker(ctx context.Context) {
72
continue
73
}
74
74
- //log.Event(ctx, "deliverBlocks", envelope.Message, envelope.Peer)
75
- bs.pm.SendBlock(envelope)
75
+ bs.pm.SendBlock(ctx, envelope)
76
case <-ctx.Done():
77
return
78
}