mirror of
https://github.com/fluencelabs/go-libp2p-kad-dht
synced 2025-06-27 03:31:39 +00:00
dht/query: fix important panic
Withe queries (particularly providers), it was possible to
exit the query runner's Run BEFORE all its children were done,
because the runner itself only listened to the context. This
introduced the possibility of a panic (you can go check it
out by running the TestProvidersMany test on dht_test in commits
before this one). Thankfully, ctxgroup saved the day with
almost _zero_ changes to the sync flow, and now we have the
guarantee that the query runner will only exit if all its
children are done. ❤️
Conflicts:
routing/dht/query.go
This commit is contained in:
16
dht_net.go
16
dht_net.go
@ -7,6 +7,7 @@ import (
|
||||
inet "github.com/jbenet/go-ipfs/net"
|
||||
peer "github.com/jbenet/go-ipfs/peer"
|
||||
pb "github.com/jbenet/go-ipfs/routing/dht/pb"
|
||||
ctxutil "github.com/jbenet/go-ipfs/util/ctx"
|
||||
|
||||
context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
|
||||
ggio "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/gogoprotobuf/io"
|
||||
@ -21,8 +22,10 @@ func (dht *IpfsDHT) handleNewMessage(s inet.Stream) {
|
||||
defer s.Close()
|
||||
|
||||
ctx := dht.Context()
|
||||
r := ggio.NewDelimitedReader(s, inet.MessageSizeMax)
|
||||
w := ggio.NewDelimitedWriter(s)
|
||||
cr := ctxutil.NewReader(ctx, s) // ok to use. we defer close stream in this func
|
||||
cw := ctxutil.NewWriter(ctx, s) // ok to use. we defer close stream in this func
|
||||
r := ggio.NewDelimitedReader(cr, inet.MessageSizeMax)
|
||||
w := ggio.NewDelimitedWriter(cw)
|
||||
mPeer := s.Conn().RemotePeer()
|
||||
|
||||
// receive msg
|
||||
@ -76,8 +79,10 @@ func (dht *IpfsDHT) sendRequest(ctx context.Context, p peer.ID, pmes *pb.Message
|
||||
}
|
||||
defer s.Close()
|
||||
|
||||
r := ggio.NewDelimitedReader(s, inet.MessageSizeMax)
|
||||
w := ggio.NewDelimitedWriter(s)
|
||||
cr := ctxutil.NewReader(ctx, s) // ok to use. we defer close stream in this func
|
||||
cw := ctxutil.NewWriter(ctx, s) // ok to use. we defer close stream in this func
|
||||
r := ggio.NewDelimitedReader(cr, inet.MessageSizeMax)
|
||||
w := ggio.NewDelimitedWriter(cw)
|
||||
|
||||
start := time.Now()
|
||||
|
||||
@ -113,7 +118,8 @@ func (dht *IpfsDHT) sendMessage(ctx context.Context, p peer.ID, pmes *pb.Message
|
||||
}
|
||||
defer s.Close()
|
||||
|
||||
w := ggio.NewDelimitedWriter(s)
|
||||
cw := ctxutil.NewWriter(ctx, s) // ok to use. we defer close stream in this func
|
||||
w := ggio.NewDelimitedWriter(cw)
|
||||
|
||||
log.Debugf("%s writing", dht.self)
|
||||
if err := w.WriteMsg(pmes); err != nil {
|
||||
|
Reference in New Issue
Block a user