remove excessive use of trio nursery

This commit is contained in:
ankur12-1610
2025-08-29 17:28:50 +05:30
parent 997094e5b7
commit 8f5dd3bd11

View File

@ -14,6 +14,8 @@ from libp2p.peer.peerstore import PERMANENT_ADDR_TTL
logger = logging.getLogger("libp2p.discovery.bootstrap") logger = logging.getLogger("libp2p.discovery.bootstrap")
resolver = DNSResolver() resolver = DNSResolver()
DEFAULT_CONNECTION_TIMEOUT = 10
class BootstrapDiscovery: class BootstrapDiscovery:
""" """
@ -34,7 +36,7 @@ class BootstrapDiscovery:
self.peerstore = swarm.peerstore self.peerstore = swarm.peerstore
self.bootstrap_addrs = bootstrap_addrs or [] self.bootstrap_addrs = bootstrap_addrs or []
self.discovered_peers: set[str] = set() self.discovered_peers: set[str] = set()
self.connection_timeout: int = 10 self.connection_timeout: int = DEFAULT_CONNECTION_TIMEOUT
async def start(self) -> None: async def start(self) -> None:
"""Process bootstrap addresses and emit peer discovery events in parallel.""" """Process bootstrap addresses and emit peer discovery events in parallel."""
@ -173,20 +175,9 @@ class BootstrapDiscovery:
peerDiscovery.emit_peer_discovered(peer_info) peerDiscovery.emit_peer_discovered(peer_info)
logger.info(f"Peer discovered: {peer_info.peer_id}") logger.info(f"Peer discovered: {peer_info.peer_id}")
# Use nursery for parallel connection attempt (non-blocking) # Connect to peer (parallel across different bootstrap addresses)
try: logger.debug("Connecting to discovered peer...")
async with trio.open_nursery() as connection_nursery: await self._connect_to_peer(peer_info.peer_id)
logger.debug("Starting parallel connection attempt...")
connection_nursery.start_soon(
self._connect_to_peer, peer_info.peer_id
)
except trio.Cancelled:
logger.debug(f"Connection attempt cancelled for {peer_info.peer_id}")
raise
except Exception as e:
logger.warning(
f"Connection nursery failed for {peer_info.peer_id}: {e}"
)
else: else:
logger.debug( logger.debug(
@ -194,33 +185,15 @@ class BootstrapDiscovery:
) )
# Even for existing peers, try to connect if not already connected # Even for existing peers, try to connect if not already connected
if peer_info.peer_id not in self.swarm.connections: if peer_info.peer_id not in self.swarm.connections:
logger.debug( logger.debug("Connecting to existing peer...")
"Starting parallel connection attempt for existing peer..." await self._connect_to_peer(peer_info.peer_id)
)
# Use nursery for parallel connection attempt (non-blocking)
try:
async with trio.open_nursery() as connection_nursery:
connection_nursery.start_soon(
self._connect_to_peer, peer_info.peer_id
)
except trio.Cancelled:
logger.debug(
f"Connection attempt cancelled for existing peer "
f"{peer_info.peer_id}"
)
raise
except Exception as e:
logger.warning(
f"Connection nursery failed for existing peer "
f"{peer_info.peer_id}: {e}"
)
async def _connect_to_peer(self, peer_id: ID) -> None: async def _connect_to_peer(self, peer_id: ID) -> None:
""" """
Attempt to establish a connection to a peer with timeout. Attempt to establish a connection to a peer with timeout.
Uses swarm.dial_peer to connect using addresses stored in peerstore. Uses swarm.dial_peer to connect using addresses stored in peerstore.
Times out after connection_timeout seconds to prevent hanging. Times out after self.connection_timeout seconds to prevent hanging.
""" """
logger.debug(f"Connection attempt for peer: {peer_id}") logger.debug(f"Connection attempt for peer: {peer_id}")