forked from LBRYCommunity/lbry-sdk
add semaphore on active estimation to avoid abuse
This commit is contained in:
parent
2f84c38f6a
commit
d35f7a5ed5
1 changed files with 3 additions and 1 deletions
|
@ -29,6 +29,7 @@ class SimpleMetrics:
|
|||
def __init__(self, port, node):
|
||||
self.prometheus_port = port
|
||||
self.dht_node: Node = node
|
||||
self.active_estimation_semaphore = asyncio.Semaphore(1)
|
||||
|
||||
async def handle_metrics_get_request(self, _):
|
||||
try:
|
||||
|
@ -61,7 +62,8 @@ class SimpleMetrics:
|
|||
# given everything is random, the odds of a peer having the same X prefix bits matching ours is roughly 1/(2^X)
|
||||
# we use that to estimate the network size, see issue #3463 for related papers and details
|
||||
amount = 20_000
|
||||
peers = await self.dht_node.peer_search(self.dht_node.protocol.node_id, count=amount, max_results=amount)
|
||||
with self.active_estimation_semaphore: # this is resource intensive, limit concurrency to 1
|
||||
peers = await self.dht_node.peer_search(self.dht_node.protocol.node_id, count=amount, max_results=amount)
|
||||
close_ids = [peer for peer in peers if peer.node_id[0] == self.dht_node.protocol.node_id[0]]
|
||||
return web.json_response(
|
||||
{"total_peers_found_during_estimation": len(peers),
|
||||
|
|
Loading…
Reference in a new issue