async def maybe_connect_more_peers(self) -> None: rate_limiter = TokenBucket( rate=1 / PEER_CONNECT_INTERVAL, capacity=MAX_SEQUENTIAL_PEER_CONNECT, ) while self.is_operational: if self.is_full: await self.sleep(PEER_CONNECT_INTERVAL) continue await self.wait(rate_limiter.take()) try: await asyncio.gather(*(self._add_peers_from_backend(backend) for backend in self.peer_backends)) except OperationCancelled: break except asyncio.CancelledError: # no need to log this exception, this is expected raise except Exception: self.logger.exception( "unexpected error during peer connection") # Continue trying to connect to peers, even if there was a # surprising failure during one of the attempts. continue
async def maybe_connect_more_peers(self) -> None: rate_limiter = TokenBucket( rate=1 / PEER_CONNECT_INTERVAL, capacity=MAX_SEQUENTIAL_PEER_CONNECT, ) # We set this to 0 so that upon startup (when our RoutingTable will have only a few # entries) we use the less restrictive filter function and get as many connection # candidates as possible. last_candidates_count = 0 while self.is_operational: if self.is_full: await self.sleep(PEER_CONNECT_INTERVAL) continue await self.wait(rate_limiter.take()) if last_candidates_count >= self.available_slots: head = await self.get_chain_head() genesis_hash = await self.get_genesis_hash() fork_blocks = extract_fork_blocks(self.vm_configuration) should_skip = functools.partial( skip_candidate_if_on_list_or_fork_mismatch, genesis_hash, head.block_number, fork_blocks, ) else: self.logger.debug( "Didn't get enough candidates last time, falling back to skipping " "only peers that are blacklisted or already connected to") should_skip = skip_candidate_if_on_list # type: ignore try: candidate_counts = await asyncio.gather( *(self._add_peers_from_backend(backend, should_skip) for backend in self.peer_backends)) last_candidates_count = sum(candidate_counts) except OperationCancelled: break except asyncio.CancelledError: # no need to log this exception, this is expected raise except Exception: self.logger.exception( "unexpected error during peer connection") # Continue trying to connect to peers, even if there was a # surprising failure during one of the attempts. continue
async def maybe_connect_more_peers(self) -> None: rate_limiter = TokenBucket( rate=1 / PEER_CONNECT_INTERVAL, capacity=MAX_SEQUENTIAL_PEER_CONNECT, ) while self.is_operational: if self.is_full: await self.sleep(PEER_CONNECT_INTERVAL) continue await self.wait(rate_limiter.take()) await self.wait( asyncio.gather(*(self._add_peers_from_backend(backend) for backend in self.peer_backends)))