Skip to content

Commit

Permalink
identify: set stream deadlines for Identify and Identify Push streams (
Browse files Browse the repository at this point in the history
  • Loading branch information
marten-seemann authored Jun 19, 2023
1 parent 5e3fc8a commit d3004ea
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 11 deletions.
11 changes: 6 additions & 5 deletions p2p/protocol/identify/id.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,7 @@ const ServiceName = "libp2p.identify"

const maxPushConcurrency = 32

// StreamReadTimeout is the read timeout on all incoming Identify family streams.
var StreamReadTimeout = 60 * time.Second
var Timeout = 60 * time.Second // timeout on all incoming Identify interactions

const (
legacyIDSize = 2 * 1024 // 2k Bytes
Expand Down Expand Up @@ -410,11 +409,14 @@ func (ids *idService) IdentifyWait(c network.Conn) <-chan struct{} {
}

func (ids *idService) identifyConn(c network.Conn) error {
s, err := c.NewStream(network.WithUseTransient(context.TODO(), "identify"))
ctx, cancel := context.WithTimeout(context.Background(), Timeout)
defer cancel()
s, err := c.NewStream(network.WithUseTransient(ctx, "identify"))
if err != nil {
log.Debugw("error opening identify stream", "peer", c.RemotePeer(), "error", err)
return err
}
s.SetDeadline(time.Now().Add(Timeout))

if err := s.SetProtocol(ID); err != nil {
log.Warnf("error setting identify protocol for stream: %s", err)
Expand All @@ -433,6 +435,7 @@ func (ids *idService) identifyConn(c network.Conn) error {

// handlePush handles incoming identify push streams
func (ids *idService) handlePush(s network.Stream) {
s.SetDeadline(time.Now().Add(Timeout))
ids.handleIdentifyResponse(s, true)
}

Expand Down Expand Up @@ -494,8 +497,6 @@ func (ids *idService) handleIdentifyResponse(s network.Stream, isPush bool) erro
}
defer s.Scope().ReleaseMemory(signedIDSize)

_ = s.SetReadDeadline(time.Now().Add(StreamReadTimeout))

c := s.Conn()

r := pbio.NewDelimitedReader(s, signedIDSize)
Expand Down
12 changes: 6 additions & 6 deletions p2p/protocol/identify/id_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -742,10 +742,10 @@ func TestLargePushMessage(t *testing.T) {
}

func TestIdentifyResponseReadTimeout(t *testing.T) {
timeout := identify.StreamReadTimeout
identify.StreamReadTimeout = 100 * time.Millisecond
timeout := identify.Timeout
identify.Timeout = 100 * time.Millisecond
defer func() {
identify.StreamReadTimeout = timeout
identify.Timeout = timeout
}()

ctx, cancel := context.WithCancel(context.Background())
Expand Down Expand Up @@ -788,10 +788,10 @@ func TestIdentifyResponseReadTimeout(t *testing.T) {
}

func TestIncomingIDStreamsTimeout(t *testing.T) {
timeout := identify.StreamReadTimeout
identify.StreamReadTimeout = 100 * time.Millisecond
timeout := identify.Timeout
identify.Timeout = 100 * time.Millisecond
defer func() {
identify.StreamReadTimeout = timeout
identify.Timeout = timeout
}()

ctx, cancel := context.WithCancel(context.Background())
Expand Down

0 comments on commit d3004ea

Please sign in to comment.