Skip to content

Commit 5c138a6

Browse files
committed
change Err field in PeerStatus to string
The main use for this status is to send update messages through the WS, in the form of JSON. Marshalling a JSON field into an error object doesn't work in Go, so it's better to send the error message as string. See golang/go#5161
1 parent e9a8f81 commit 5c138a6

File tree

4 files changed

+20
-10
lines changed

4 files changed

+20
-10
lines changed

client-peerconn_test.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package torrent
22

33
import (
4-
"errors"
54
"io"
65
"os"
76
"testing"
@@ -37,7 +36,7 @@ func TestPeerConnObserverReadStatusOk(t *testing.T) {
3736

3837
status := readChannelTimeout(t, cfg.Observers.Peers.PeerStatus, 500*time.Millisecond).(PeerStatus)
3938
require.True(t, status.Ok)
40-
require.Nil(t, status.Err)
39+
require.Equal(t, "", status.Err)
4140
}
4241

4342
func TestPeerConnObserverReadStatusErr(t *testing.T) {
@@ -55,13 +54,13 @@ func TestPeerConnObserverReadStatusErr(t *testing.T) {
5554

5655
go func() {
5756
cfg.Observers.Peers.PeerStatus <- PeerStatus{
58-
Err: errors.New("test error"),
57+
Err: "test error",
5958
}
6059
}()
6160

6261
status := readChannelTimeout(t, cfg.Observers.Peers.PeerStatus, 500*time.Millisecond).(PeerStatus)
6362
require.False(t, status.Ok)
64-
require.EqualError(t, status.Err, "test error")
63+
require.Equal(t, status.Err, "test error")
6564
}
6665

6766
func TestPeerConnEstablished(t *testing.T) {
@@ -92,13 +91,13 @@ func TestPeerConnEstablished(t *testing.T) {
9291
// FIXME converting [20]byte to string is not enough to pass the test
9392
// require.Equal(t, "12345123451234512345", fmt.Sprintf("%+q", status.Id))
9493
require.True(t, status.Ok)
95-
require.Nil(t, status.Err)
94+
require.Equal(t, "", status.Err)
9695

9796
// Peer conn is dropped after transfer is finished. This is the next update we receive.
9897
status = readChannelTimeout(t, obs.Peers.PeerStatus, 500*time.Millisecond).(PeerStatus)
9998
// TODO a check on PeerID
10099
require.False(t, status.Ok)
101-
require.Nil(t, status.Err)
100+
require.Equal(t, "", status.Err)
102101
}
103102

104103
type ConfigureClient struct {

client.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1095,11 +1095,19 @@ func (cl *Client) runHandshookConn(c *PeerConn, t *Torrent) error {
10951095

10961096
// TODO here we could send an update to say the PeerConn state connected is true
10971097
// perhaps could also use c.pex.IsEnabled() or something similar
1098-
c.UpdatePeerConnStatus(PeerStatus{c.PeerID, true, nil})
1098+
c.UpdatePeerConnStatus(PeerStatus{
1099+
Id: c.PeerID,
1100+
Ok: true,
1101+
})
10991102

11001103
err := c.mainReadLoop()
11011104
if err != nil {
1102-
c.UpdatePeerConnStatus(PeerStatus{c.PeerID, false, err})
1105+
// c.UpdatePeerConnStatus(PeerStatus{c.PeerID, false, err})
1106+
c.UpdatePeerConnStatus(PeerStatus{
1107+
Id: c.PeerID,
1108+
Ok: false,
1109+
Err: fmt.Sprintf("%s", err),
1110+
})
11031111
return fmt.Errorf("main read loop: %w", err)
11041112
}
11051113
return nil

peerconn.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import (
3535
type PeerStatus struct {
3636
Id PeerID
3737
Ok bool
38-
Err error
38+
Err string // see https://github.com/golang/go/issues/5161
3939
}
4040

4141
type PeerObserver struct {

torrent.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1596,7 +1596,10 @@ func (t *Torrent) dropConnection(c *PeerConn) {
15961596
t.cl.event.Broadcast()
15971597
c.close()
15981598

1599-
c.UpdatePeerConnStatus(PeerStatus{c.PeerID, false, nil})
1599+
c.UpdatePeerConnStatus(PeerStatus{
1600+
Id: c.PeerID,
1601+
Ok: false,
1602+
})
16001603
t.logger.WithDefaultLevel(log.Debug).Printf("dropping connection to %+q, sent peerconn update", c.PeerID)
16011604

16021605
if t.deletePeerConn(c) {

0 commit comments

Comments
 (0)