added periodic cleanup task

This commit is contained in:
lla-dane
2025-07-18 12:00:07 +05:30
parent 09e6feea8e
commit 07c8d4cd1f

View File

@ -84,6 +84,10 @@ class PeerStore(IPeerStore):
else:
raise PeerStoreError("peer ID not found")
# Clear the peer records
if peer_id in self.peer_record_map:
self.peer_record_map.pop(peer_id, None)
def valid_peer_ids(self) -> list[ID]:
"""
:return: all of the valid peer IDs stored in peer store
@ -108,6 +112,26 @@ class PeerStore(IPeerStore):
self.maybe_delete_peer_record(peer_id)
del self.peer_record_map[peer_id]
async def start_cleanup_task(self, cleanup_interval: int = 3600) -> None:
"""Start periodic cleanup of expired peer records and addresses."""
while True:
await trio.sleep(cleanup_interval)
self._cleanup_expired_records()
def _cleanup_expired_records(self) -> None:
"""Remove expired peer records and addresses"""
expired_peers = []
for peer_id, peer_data in self.peer_data_map.items():
if peer_data.is_expired():
expired_peers.append(peer_id)
for peer_id in expired_peers:
self.maybe_delete_peer_record(peer_id)
del self.peer_data_map[peer_id]
self._enforce_record_limit()
# --------PROTO-BOOK--------
def get_protocols(self, peer_id: ID) -> list[str]:
@ -204,8 +228,9 @@ class PeerStore(IPeerStore):
:param peer_id: The peer whose record we may delete/
"""
if not self.addrs(peer_id):
self.peer_record_map.pop(peer_id, None)
if peer_id in self.peer_record_map:
if not self.addrs(peer_id):
self.peer_record_map.pop(peer_id, None)
def consume_peer_record(self, envelope: Envelope, ttl: int) -> bool:
"""
@ -241,7 +266,6 @@ class PeerStore(IPeerStore):
merged_addrs = list(existing_addrs.union(new_addrs))
self.peer_record_map[peer_id] = PeerRecordState(envelope, record.seq)
self.clear_addrs(peer_id)
self.add_addrs(peer_id, merged_addrs, ttl)
return True
@ -325,6 +349,8 @@ class PeerStore(IPeerStore):
if peer_id in self.peer_data_map:
self.peer_data_map[peer_id].clear_addrs()
self.maybe_delete_peer_record(peer_id)
def peers_with_addrs(self) -> list[ID]:
"""
:return: all of the peer IDs which has addrsfloat stored in peer store