Skip to content

Commit

Permalink
feat(f3): F3 sidecar should work with Kademlia disabled
Browse files Browse the repository at this point in the history
  • Loading branch information
hanabi1224 committed Jan 7, 2025
1 parent daaa743 commit 994b9da
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 4 deletions.
20 changes: 16 additions & 4 deletions f3-sidecar/p2p.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,10 @@ import (
const ListenAddr = "/ip4/127.0.0.1/tcp/0"

type P2PHost struct {
Host host.Host
DHT *dht.IpfsDHT
PubSub *pubsub.PubSub
Host host.Host
DHT *dht.IpfsDHT
BackupDHT *dht.IpfsDHT
PubSub *pubsub.PubSub
}

func createP2PHost(ctx context.Context, networkName string) (*P2PHost, error) {
Expand All @@ -36,6 +37,17 @@ func createP2PHost(ctx context.Context, networkName string) (*P2PHost, error) {
return nil, err
}

backupDthOpts := []dht.Option{
dht.Mode(dht.ModeAutoServer),
dht.ProtocolPrefix(protocol.ID(fmt.Sprintf("/fil/kad/f3-sidecar/%s", networkName))),
dht.DisableProviders(),
dht.DisableValues(),
}
backupHostDHT, err := dht.New(ctx, host, backupDthOpts...)
if err != nil {
return nil, err
}

ps, err := pubsub.NewGossipSub(ctx, host,
pubsub.WithPeerExchange(true),
pubsub.WithFloodPublish(true),
Expand All @@ -44,5 +56,5 @@ func createP2PHost(ctx context.Context, networkName string) (*P2PHost, error) {
return nil, err
}

return &P2PHost{host, hostDHT, ps}, nil
return &P2PHost{host, hostDHT, backupHostDHT, ps}, nil
}
5 changes: 5 additions & 0 deletions scripts/tests/calibnet_no_discovery_check.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,8 @@ export FULLNODE_API_INFO
until $FOREST_CLI_PATH net peers | grep "calib"; do
sleep 1s;
done

# Verify F3 is getting certificates from the network
until [[ $($FOREST_CLI_PATH f3 certs get --output json | jq '.GPBFTInstance') -gt 100 ]]; do
sleep 1s;
done
5 changes: 5 additions & 0 deletions scripts/tests/calibnet_other_check.sh
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,8 @@ echo "Test subcommand: net info"
$FOREST_CLI_PATH net info

$FOREST_CLI_PATH sync wait # allow the node to re-sync

# Verify F3 is getting certificates from the network
until [[ $($FOREST_CLI_PATH f3 certs get --output json | jq '.GPBFTInstance') -gt 100 ]]; do
sleep 1s;
done
15 changes: 15 additions & 0 deletions src/libp2p/discovery.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ use crate::utils::version::FOREST_VERSION_STRING;
pub struct DerivedDiscoveryBehaviour {
/// Kademlia discovery.
kademlia: Toggle<kad::Behaviour<kad::store::MemoryStore>>,
/// Kademlia discovery for bootstrapping F3 sidecar when the main Kademlia is disabled.
kademlia_f3_sidecar: kad::Behaviour<kad::store::MemoryStore>,
/// Discovers nodes on the local network.
mdns: Toggle<Mdns>,
/// [`identify::Behaviour`] needs to be manually hooked up with [`kad::Behaviour`] to make discovery work. See <https://docs.rs/libp2p/latest/libp2p/kad/index.html#important-discrepancies>
Expand Down Expand Up @@ -158,6 +160,12 @@ impl<'a> DiscoveryConfig<'a> {
} else {
None
};
let kademlia_f3_sidecar = new_kademlia(
local_peer_id,
StreamProtocol::try_from_owned(format!(
"/fil/kad/f3-sidecar/{network_name}/kad/1.0.0"
))?,
);

let mdns_opt = if enable_mdns {
Some(Mdns::new(Default::default(), local_peer_id).expect("Could not start mDNS"))
Expand All @@ -168,6 +176,7 @@ impl<'a> DiscoveryConfig<'a> {
Ok(DiscoveryBehaviour {
discovery: DerivedDiscoveryBehaviour {
kademlia: kademlia_opt.into(),
kademlia_f3_sidecar,
mdns: mdns_opt.into(),
identify: identify::Behaviour::new(
identify::Config::new("ipfs/0.1.0".into(), local_public_key)
Expand Down Expand Up @@ -441,6 +450,11 @@ impl NetworkBehaviour for DiscoveryBehaviour {
kademlia.add_address(peer_id, address.clone());
}
}
for address in &info.listen_addrs {
self.discovery
.kademlia_f3_sidecar
.add_address(peer_id, address.clone());
}
}
}
DerivedDiscoveryBehaviourEvent::Autonat(_) => {}
Expand Down Expand Up @@ -470,6 +484,7 @@ impl NetworkBehaviour for DiscoveryBehaviour {
trace!("Libp2p => Unhandled Kademlia event: {:?}", other)
}
},
DerivedDiscoveryBehaviourEvent::KademliaF3Sidecar(_) => {}
DerivedDiscoveryBehaviourEvent::Mdns(ev) => match ev {
MdnsEvent::Discovered(list) => {
if self.n_node_connected >= self.target_peer_count {
Expand Down

0 comments on commit 994b9da

Please sign in to comment.