lotus/markets/idxprov/mesh.go

57 lines
1.6 KiB
Go
Raw Normal View History

package idxprov
import (
"context"
"fmt"
2022-06-14 15:00:51 +00:00
logging "github.com/ipfs/go-log/v2"
"github.com/libp2p/go-libp2p-core/host"
2022-02-04 09:04:07 +00:00
"github.com/libp2p/go-libp2p-core/peer"
"github.com/filecoin-project/lotus/api/v1api"
)
var log = logging.Logger("idxprov")
const protectTag = "index-provider-gossipsub"
type MeshCreator interface {
Connect(ctx context.Context) error
}
type Libp2pMeshCreator struct {
fullnodeApi v1api.FullNode
marketsHost host.Host
}
func (mc Libp2pMeshCreator) Connect(ctx context.Context) error {
// Add the markets host ID to list of daemon's protected peers first, before any attempt to
// connect to full node over libp2p.
marketsPeerID := mc.marketsHost.ID()
if err := mc.fullnodeApi.NetProtectAdd(ctx, []peer.ID{marketsPeerID}); err != nil {
return fmt.Errorf("failed to call NetProtectAdd on the full node, err: %w", err)
}
2022-02-04 09:04:07 +00:00
faddrs, err := mc.fullnodeApi.NetAddrsListen(ctx)
if err != nil {
2022-02-04 09:58:47 +00:00
return fmt.Errorf("failed to fetch full node listen addrs, err: %w", err)
2022-02-04 09:04:07 +00:00
}
// Connect to the full node, ask it to protect the connection and protect the connection on
// markets end too.
if err := mc.marketsHost.Connect(ctx, faddrs); err != nil {
return fmt.Errorf("failed to connect index provider host with the full node: %w", err)
}
mc.marketsHost.ConnManager().Protect(faddrs.ID, protectTag)
2022-02-04 09:04:07 +00:00
log.Debugw("successfully connected to full node and asked it protect indexer provider peer conn", "fullNodeInfo", faddrs.String(),
"peerId", marketsPeerID)
return nil
}
func NewMeshCreator(fullnodeApi v1api.FullNode, marketsHost host.Host) MeshCreator {
return Libp2pMeshCreator{fullnodeApi, marketsHost}
}