packages/hyprspace: cancel parallel routing shortly after finding first address
This commit is contained in:
parent
92f1e8b71d
commit
e0aa5d5bdd
1 changed files with 6 additions and 1 deletions
|
@ -3,6 +3,7 @@ package p2p
|
|||
import (
|
||||
"context"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/libp2p/go-libp2p/core/peer"
|
||||
routedhost "github.com/libp2p/go-libp2p/p2p/host/routed"
|
||||
|
@ -18,20 +19,24 @@ func (pr ParallelRouting) FindPeer(ctx context.Context, p peer.ID) (peer.AddrInf
|
|||
|
||||
var info peer.AddrInfo
|
||||
info.ID = p
|
||||
subCtx, cancelSubCtx := context.WithTimeout(ctx, 30*time.Second)
|
||||
for _, r := range pr.routings {
|
||||
wg.Add(1)
|
||||
r2 := r
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
ai, err := r2.FindPeer(ctx, p)
|
||||
ai, err := r2.FindPeer(subCtx, p)
|
||||
if err == nil {
|
||||
mutex.Lock()
|
||||
defer mutex.Unlock()
|
||||
info.Addrs = append(info.Addrs, ai.Addrs...)
|
||||
// give the other routings a short time period to find a better address
|
||||
time.AfterFunc(500*time.Millisecond, cancelSubCtx)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
wg.Wait()
|
||||
cancelSubCtx()
|
||||
return info, nil
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue