Skip to content

Commit 1d0526e

Browse files
committed
handle error cases on streams
License: MIT Signed-off-by: Jeromy <[email protected]>
1 parent 56d5c3f commit 1d0526e

File tree

1 file changed

+26
-17
lines changed

1 file changed

+26
-17
lines changed

exchange/bitswap/wantmanager.go

+26-17
Original file line numberDiff line numberDiff line change
@@ -133,14 +133,6 @@ func (pm *WantManager) startPeerHandler(p peer.ID) *msgQueue {
133133
mq.out = fullwantlist
134134
mq.work <- struct{}{}
135135

136-
s, err := pm.network.NewMessageSender(pm.ctx, p)
137-
if err != nil {
138-
log.Error("error opening stream to peer: ", err)
139-
return nil
140-
}
141-
142-
mq.sender = s
143-
144136
pm.peers[p] = mq
145137
go mq.runQueue(pm.ctx)
146138
return mq
@@ -163,7 +155,11 @@ func (pm *WantManager) stopPeerHandler(p peer.ID) {
163155
}
164156

165157
func (mq *msgQueue) runQueue(ctx context.Context) {
166-
defer mq.sender.Close()
158+
defer func() {
159+
if mq.sender != nil {
160+
mq.sender.Close()
161+
}
162+
}()
167163
for {
168164
select {
169165
case <-mq.work: // there is work to be done
@@ -180,14 +176,25 @@ func (mq *msgQueue) doWork(ctx context.Context) {
180176
// allow ten minutes for connections
181177
// this includes looking them up in the dht
182178
// dialing them, and handshaking
183-
conctx, cancel := context.WithTimeout(ctx, time.Minute*10)
184-
defer cancel()
179+
if mq.sender == nil {
180+
conctx, cancel := context.WithTimeout(ctx, time.Minute*10)
181+
defer cancel()
182+
183+
err := mq.network.ConnectTo(conctx, mq.p)
184+
if err != nil {
185+
log.Infof("cant connect to peer %s: %s", mq.p, err)
186+
// TODO: cant connect, what now?
187+
return
188+
}
185189

186-
err := mq.network.ConnectTo(conctx, mq.p)
187-
if err != nil {
188-
log.Infof("cant connect to peer %s: %s", mq.p, err)
189-
// TODO: cant connect, what now?
190-
return
190+
nsender, err := mq.network.NewMessageSender(ctx, mq.p)
191+
if err != nil {
192+
log.Infof("cant open new stream to peer %s: %s", mq.p, err)
193+
// TODO: cant open stream, what now?
194+
return
195+
}
196+
197+
mq.sender = nsender
191198
}
192199

193200
// grab outgoing message
@@ -201,9 +208,11 @@ func (mq *msgQueue) doWork(ctx context.Context) {
201208
mq.outlk.Unlock()
202209

203210
// send wantlist updates
204-
err = mq.sender.SendMsg(wlm)
211+
err := mq.sender.SendMsg(wlm)
205212
if err != nil {
206213
log.Infof("bitswap send error: %s", err)
214+
mq.sender.Close()
215+
mq.sender = nil
207216
// TODO: what do we do if this fails?
208217
return
209218
}

0 commit comments

Comments
 (0)