@cryptotaxi247 / kubo / commits / ef967ceee

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 }