@@ -209,9 +209,14 @@ def start(
209209 def start_health_check (self , node_address ):
210210 if not self ._running :
211211 return
212- node_address_hex = to_normalized_address (node_address )
213- self .log .debug ('HEALTHCHECK' , peer_address = node_address_hex )
212+
214213 with self ._health_semaphore :
214+ if node_address in self ._address_to_userids :
215+ return # already healthchecked
216+
217+ node_address_hex = to_normalized_address (node_address )
218+ self .log .debug ('HEALTHCHECK' , peer_address = node_address_hex )
219+
215220 candidates = [
216221 self ._get_user (user )
217222 for user in self ._client .search_user_directory (node_address_hex )
@@ -750,9 +755,13 @@ def _handle_presence_change(self, event):
750755
751756 def _get_user_presence (self , user_id : str ) -> UserPresence :
752757 if user_id not in self ._userid_to_presence :
753- self ._userid_to_presence [user_id ] = UserPresence (
754- self ._client .get_user_presence (user_id ),
755- )
758+ try :
759+ presence = UserPresence (
760+ self ._client .get_user_presence (user_id ),
761+ )
762+ except MatrixRequestError :
763+ presence = UserPresence .UNKNOWN
764+ self ._userid_to_presence [user_id ] = presence
756765 return self ._userid_to_presence [user_id ]
757766
758767 def _update_address_presence (self , address ):
0 commit comments