Skip to content

Commit 5493514

Browse files
send cancel async (#245)
1 parent 6869eb1 commit 5493514

File tree

2 files changed

+24
-17
lines changed

2 files changed

+24
-17
lines changed

impl/impl.go

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"errors"
66
"fmt"
7+
"time"
78

89
"github.com/hannahhoward/go-pubsub"
910
"github.com/ipfs/go-cid"
@@ -25,6 +26,7 @@ import (
2526
)
2627

2728
var log = logging.Logger("dt-impl")
29+
var cancelSendTimeout = 30 * time.Second
2830

2931
type manager struct {
3032
dataTransferNetwork network.DataTransferNetwork
@@ -294,24 +296,22 @@ func (m *manager) CloseDataTransferChannel(ctx context.Context, chid datatransfe
294296
log.Warnf("unable to close channel %s: %s", chid, err)
295297
}
296298

297-
// Send a cancel message to the remote peer
298-
log.Infof("%s: sending cancel channel to %s for channel %s", m.peerID, chst.OtherPeer(), chid)
299-
err = m.dataTransferNetwork.SendMessage(ctx, chst.OtherPeer(), m.cancelMessage(chid))
300-
if err != nil {
301-
err = fmt.Errorf("unable to send cancel message for channel %s to peer %s: %w",
302-
chid, m.peerID, err)
303-
_ = m.OnRequestDisconnected(chid, err)
304-
log.Warn(err)
305-
}
299+
// Send a cancel message to the remote peer async
300+
go func() {
301+
sctx, cancel := context.WithTimeout(context.Background(), cancelSendTimeout)
302+
defer cancel()
303+
log.Infof("%s: sending cancel channel to %s for channel %s", m.peerID, chst.OtherPeer(), chid)
304+
err = m.dataTransferNetwork.SendMessage(sctx, chst.OtherPeer(), m.cancelMessage(chid))
305+
if err != nil {
306+
err = fmt.Errorf("unable to send cancel message for channel %s to peer %s: %w",
307+
chid, m.peerID, err)
308+
_ = m.OnRequestDisconnected(chid, err)
309+
log.Warn(err)
310+
}
311+
}()
306312

307313
// Fire a cancel event
308314
fsmerr := m.channels.Cancel(chid)
309-
// If it wasn't possible to send a cancel message to the peer, return
310-
// that error
311-
if err != nil {
312-
return err
313-
}
314-
// If it wasn't possible to fire a cancel event, return that error
315315
if fsmerr != nil {
316316
return xerrors.Errorf("unable to send cancel to channel FSM: %w", fsmerr)
317317
}

impl/initiating_test.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,10 @@ func TestDataTransferInitiating(t *testing.T) {
213213
require.NoError(t, err)
214214
require.Len(t, h.transport.ClosedChannels, 1)
215215
require.Equal(t, h.transport.ClosedChannels[0], channelID)
216-
require.Len(t, h.network.SentMessages, 2)
216+
217+
require.Eventually(t, func() bool {
218+
return len(h.network.SentMessages) == 2
219+
}, 5*time.Second, 200*time.Millisecond)
217220
cancelMessage := h.network.SentMessages[1].Message
218221
require.False(t, cancelMessage.IsUpdate())
219222
require.False(t, cancelMessage.IsPaused())
@@ -266,7 +269,11 @@ func TestDataTransferInitiating(t *testing.T) {
266269
require.NoError(t, err)
267270
require.Len(t, h.transport.ClosedChannels, 1)
268271
require.Equal(t, h.transport.ClosedChannels[0], channelID)
269-
require.Len(t, h.network.SentMessages, 1)
272+
273+
require.Eventually(t, func() bool {
274+
return len(h.network.SentMessages) == 1
275+
}, 5*time.Second, 200*time.Millisecond)
276+
270277
cancelMessage := h.network.SentMessages[0].Message
271278
require.False(t, cancelMessage.IsUpdate())
272279
require.False(t, cancelMessage.IsPaused())

0 commit comments

Comments
 (0)