Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

p2p: use errors.Is for error comparison #24882

Merged
merged 5 commits into from
Jun 7, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion p2p/discover/lookup.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package discover

import (
"context"
"errors"
"time"

"github.com/ethereum/go-ethereum/p2p/enode"
Expand Down Expand Up @@ -141,7 +142,7 @@ func (it *lookup) slowdown() {
func (it *lookup) query(n *node, reply chan<- []*node) {
fails := it.tab.db.FindFails(n.ID(), n.IP())
r, err := it.queryfunc(n)
if err == errClosed {
if errors.Is(err, errClosed) {
// Avoid recording failures on shutdown.
reply <- nil
return
Expand Down
4 changes: 2 additions & 2 deletions p2p/discover/v4_udp.go
Original file line number Diff line number Diff line change
Expand Up @@ -328,7 +328,7 @@ func (t *UDPv4) findnode(toid enode.ID, toaddr *net.UDPAddr, target v4wire.Pubke
// enough nodes the reply matcher will time out waiting for the second reply, but
// there's no need for an error in that case.
err := <-rm.errc
if err == errTimeout && rm.reply != nil {
if errors.Is(err, errTimeout) && rm.reply != nil {
err = nil
}
return nodes, err
Expand Down Expand Up @@ -526,7 +526,7 @@ func (t *UDPv4) readLoop(unhandled chan<- ReadPacket) {
continue
} else if err != nil {
// Shut down the loop for permament errors.
if err != io.EOF {
if !errors.Is(err, io.EOF) {
t.log.Debug("UDP read error", "err", err)
}
return
Expand Down
4 changes: 2 additions & 2 deletions p2p/discover/v5_udp.go
Original file line number Diff line number Diff line change
Expand Up @@ -305,7 +305,7 @@ func (t *UDPv5) lookupWorker(destNode *node, target enode.ID) ([]*node, error) {
)
var r []*enode.Node
r, err = t.findnode(unwrapNode(destNode), dists)
if err == errClosed {
if errors.Is(err, errClosed) {
return nil, err
}
for _, n := range r {
Expand Down Expand Up @@ -623,7 +623,7 @@ func (t *UDPv5) readLoop() {
continue
} else if err != nil {
// Shut down the loop for permament errors.
if err != io.EOF {
if !errors.Is(err, io.EOF) {
t.log.Debug("UDP read error", "err", err)
}
return
Expand Down
2 changes: 1 addition & 1 deletion p2p/discover/v5wire/encoding.go
Original file line number Diff line number Diff line change
Expand Up @@ -596,7 +596,7 @@ func (c *Codec) decodeMessage(fromAddr string, head *Header, headerData, msgData
// Try decrypting the message.
key := c.sc.readKey(auth.SrcID, fromAddr)
msg, err := c.decryptMessage(msgData, head.Nonce[:], headerData, key)
if err == errMessageDecrypt {
if errors.Is(err, errMessageDecrypt) {
// It didn't work. Start the handshake since this is an ordinary message packet.
return &Unknown{Nonce: head.Nonce}, nil
}
Expand Down
5 changes: 3 additions & 2 deletions p2p/dnsdisc/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package dnsdisc
import (
"bytes"
"context"
"errors"
"fmt"
"math/rand"
"net"
Expand Down Expand Up @@ -204,7 +205,7 @@ func (c *Client) doResolveEntry(ctx context.Context, domain, hash string) (entry
}
for _, txt := range txts {
e, err := parseEntry(txt, c.cfg.ValidSchemes)
if err == errUnknownEntry {
if errors.Is(err, errUnknownEntry) {
continue
}
if !bytes.HasPrefix(crypto.Keccak256([]byte(txt)), wantHash) {
Expand Down Expand Up @@ -281,7 +282,7 @@ func (it *randomIterator) nextNode() *enode.Node {
}
n, err := ct.syncRandom(it.ctx)
if err != nil {
if err == it.ctx.Err() {
if errors.Is(err, it.ctx.Err()) {
return nil // context canceled.
}
it.c.cfg.Logger.Debug("Error in DNS random node sync", "tree", ct.loc.domain, "err", err)
Expand Down
12 changes: 10 additions & 2 deletions p2p/enr/entries.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package enr

import (
"errors"
"fmt"
"io"
"net"
Expand Down Expand Up @@ -180,9 +181,16 @@ func (err *KeyError) Error() string {
return fmt.Sprintf("ENR key %q: %v", err.Key, err.Err)
}

func (err *KeyError) Unwrap() error {
return err.Err
}

// IsNotFound reports whether the given error means that a key/value pair is
// missing from a record.
func IsNotFound(err error) bool {
kerr, ok := err.(*KeyError)
return ok && kerr.Err == errNotFound
var ke *KeyError
if errors.As(err, &ke) {
return ke.Err == errNotFound
}
return false
}
2 changes: 1 addition & 1 deletion p2p/peer.go
Original file line number Diff line number Diff line change
Expand Up @@ -416,7 +416,7 @@ func (p *Peer) startProtocols(writeStart <-chan struct{}, writeErr chan<- error)
if err == nil {
p.log.Trace(fmt.Sprintf("Protocol %s/%d returned", proto.Name, proto.Version))
err = errProtocolReturned
} else if err != io.EOF {
} else if !errors.Is(err, io.EOF) {
p.log.Trace(fmt.Sprintf("Protocol %s/%d failed", proto.Name, proto.Version), "err", err)
}
p.protoErr <- err
Expand Down
2 changes: 1 addition & 1 deletion p2p/peer_error.go
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ func discReasonForError(err error) DiscReason {
if reason, ok := err.(DiscReason); ok {
return reason
}
if err == errProtocolReturned {
if errors.Is(err, errProtocolReturned) {
return DiscQuitting
}
peerError, ok := err.(*peerError)
Expand Down
3 changes: 2 additions & 1 deletion p2p/simulations/http.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import (
"bytes"
"context"
"encoding/json"
"errors"
"fmt"
"html"
"io"
Expand Down Expand Up @@ -559,7 +560,7 @@ func (s *Server) CreateNode(w http.ResponseWriter, req *http.Request) {
config := &adapters.NodeConfig{}

err := json.NewDecoder(req.Body).Decode(config)
if err != nil && err != io.EOF {
if err != nil && !errors.Is(err, io.EOF) {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
Expand Down