github.com/filecoin-project/bacalhau@v0.3.23-0.20230228154132-45c989550ace/pkg/requester/discovery/identity.go (about) 1 package discovery 2 3 import ( 4 "context" 5 6 "github.com/filecoin-project/bacalhau/pkg/model" 7 "github.com/filecoin-project/bacalhau/pkg/requester" 8 "github.com/filecoin-project/bacalhau/pkg/transport/bprotocol" 9 "github.com/libp2p/go-libp2p/core/host" 10 "github.com/libp2p/go-libp2p/core/peer" 11 "github.com/rs/zerolog/log" 12 ) 13 14 type IdentityNodeDiscovererParams struct { 15 Host host.Host 16 } 17 18 type IdentityNodeDiscoverer struct { 19 host host.Host 20 } 21 22 func NewIdentityNodeDiscoverer(params IdentityNodeDiscovererParams) *IdentityNodeDiscoverer { 23 return &IdentityNodeDiscoverer{ 24 host: params.Host, 25 } 26 } 27 28 func (d *IdentityNodeDiscoverer) FindNodes(ctx context.Context, job model.Job) ([]model.NodeInfo, error) { 29 var peers []peer.ID 30 31 // check local protocols in case the current node is also a compute node 32 // peerstore doesn't seem to hold protocols of the current node 33 for _, protocol := range d.host.Mux().Protocols() { 34 if protocol == bprotocol.AskForBidProtocolID { 35 peers = append(peers, d.host.ID()) 36 } 37 } 38 39 for _, peerID := range d.host.Peerstore().Peers() { 40 if peerID == d.host.ID() { 41 continue 42 } 43 supportedProtocols, err := d.host.Peerstore().SupportsProtocols(peerID, bprotocol.AskForBidProtocolID) 44 if err != nil { 45 log.Ctx(ctx).Warn().Err(err).Msgf("failed to get supported protocols for peer %s", peerID) 46 continue 47 } 48 if len(supportedProtocols) > 0 { 49 peers = append(peers, peerID) 50 } 51 } 52 53 nodeInfos := make([]model.NodeInfo, len(peers)) 54 for i, peerID := range peers { 55 nodeInfos[i] = model.NodeInfo{ 56 PeerInfo: d.host.Peerstore().PeerInfo(peerID), 57 NodeType: model.NodeTypeCompute, 58 ComputeNodeInfo: model.ComputeNodeInfo{}, 59 } 60 } 61 return nodeInfos, nil 62 } 63 64 // compile time check that IdentityNodeDiscoverer implements NodeDiscoverer 65 var _ requester.NodeDiscoverer = (*IdentityNodeDiscoverer)(nil)