async def _hang_until_account_served(self, event: CollectMissingAccount) -> None: try: await self.wait(self._serve_account(event)) except OperationCancelled: # Beam sync is shutting down, probably either because the node is closing, or # a pivot is required. So communicate that import should stop. await self._event_bus.broadcast( MissingAccountResult(is_retry_acceptable=False), event.broadcast_config(), ) raise
async def _serve_account(self, event: CollectMissingAccount) -> None: await self._state_downloader.ensure_node_present( event.missing_node_hash) _, num_nodes_collected = await self._state_downloader.download_account( event.address_hash, event.state_root_hash, ) await self._event_bus.broadcast( MissingAccountCollected(num_nodes_collected), event.broadcast_config(), )
async def _serve_account(self, event: CollectMissingAccount) -> None: _, num_nodes_collected = await self._state_downloader.download_account( event.address_hash, event.state_root_hash, event.urgent, ) bonus_node = await self._state_downloader.ensure_nodes_present( {event.missing_node_hash}, event.urgent, ) await self._event_bus.broadcast( MissingAccountResult(num_nodes_collected + bonus_node), event.broadcast_config(), )
async def _hang_until_account_served(self, event: CollectMissingAccount) -> None: try: await asyncio.wait_for( self._serve_account(event), timeout=BLOCK_IMPORT_MISSING_STATE_TIMEOUT, ) except asyncio.CancelledError: # Beam sync is shutting down, probably either because the node is closing, or # a pivot is required. So communicate that import should stop. await self._event_bus.broadcast( MissingAccountResult(is_retry_acceptable=False), event.broadcast_config(), ) raise except asyncio.TimeoutError: pass
async def collect_accounts(event: CollectMissingAccount): replace_missing_node(event.missing_node_hash) await event_bus.broadcast( MissingAccountResult(1), event.broadcast_config() )