Skip to content

Commit

Permalink
Removes caching from client.get_joined_members and adds a force_resync
Browse files Browse the repository at this point in the history
to speed up the sync if necessary.
  • Loading branch information
err508 committed Mar 8, 2019
1 parent f18f3f6 commit 467a9df
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 23 deletions.
29 changes: 14 additions & 15 deletions raiden/network/transport/matrix/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

import gevent
import structlog
from cachetools.func import ttl_cache
from gevent.lock import Semaphore
from matrix_client.api import MatrixHttpApi
from matrix_client.client import CACHE, MatrixClient
Expand All @@ -29,21 +28,21 @@ def __init__(self, client, room_id):
# dict of 'type': 'content' key/value pairs
self.account_data: Dict[str, Dict[str, Any]] = dict()

@ttl_cache(ttl=10)
def get_joined_members(self) -> List[User]:
def get_joined_members(self, force_resync=False) -> List[User]:
""" Return a list of members of this room. """
response = self.client.api.get_room_members(self.room_id)
for event in response['chunk']:
if event['content']['membership'] == 'join':
user_id = event["state_key"]
if user_id not in self._members:
self._mkmembers(
User(
self.client.api,
user_id,
event['content'].get('displayname'),
),
)
if force_resync:
response = self.client.api.get_room_members(self.room_id)
for event in response['chunk']:
if event['content']['membership'] == 'join':
user_id = event["state_key"]
if user_id not in self._members:
self._mkmembers(
User(
self.client.api,
user_id,
event['content'].get('displayname'),
),
)
return list(self._members.values())

def _mkmembers(self, member):
Expand Down
14 changes: 6 additions & 8 deletions raiden/network/transport/matrix/transport.py
Original file line number Diff line number Diff line change
Expand Up @@ -1021,13 +1021,13 @@ def _get_room_for_address(
room = self._get_public_room(room_name, invitees=peers)

peer_ids = self._address_to_userids[address]
member_ids = {member.user_id for member in room.get_joined_members()}
member_ids = {member.user_id for member in room.get_joined_members(force_resync=True)}
room_is_empty = not bool(peer_ids & member_ids)
if room_is_empty:
last_ex: Optional[Exception] = False
retry_interval = 0.1
self.log.debug(
'Waiting for peer to join from invite.',
'Waiting for peer to join from invite',
peer_address=address_hex,
)
for _ in range(JOIN_RETRIES):
Expand All @@ -1048,13 +1048,11 @@ def _get_room_for_address(
if last_ex:
raise last_ex # re-raise if couldn't succeed in retries
else:
# leave room, if no one listens:
room.leave()
# Inform the client, that currently no one listens:
self.log.error(
'Peer has not joined from invite - Leaving empty room.',
'Peer has not joined from invite yet, should join in the eventually',
peer_address=address_hex,
)
return None

self._address_to_userids[address].update({user.user_id for user in peers})
self._set_room_id_for_address(address, room.room_id)
Expand Down Expand Up @@ -1102,7 +1100,7 @@ def _get_public_room(self, room_name, invitees: List[User]):
)
else:
# Invite users to existing room
member_ids = {user.user_id for user in room.get_joined_members()}
member_ids = {user.user_id for user in room.get_joined_members(force_resync=True)}
users_to_invite = set(invitees_uids) - member_ids
self.log.debug('Inviting users', room=room, invitee_ids=users_to_invite)
for invitee_id in users_to_invite:
Expand Down Expand Up @@ -1248,7 +1246,7 @@ def _maybe_invite_user(self, user: User):

room = self._client.rooms[room_ids[0]]
if not room._members:
room.get_joined_members()
room.get_joined_members(force_resync=True)
if user.user_id not in room._members:
self.log.debug('Inviting', user=user, room=room)
try:
Expand Down

0 comments on commit 467a9df

Please sign in to comment.