1
0

Pull current hosts out from current_state table

This commit is contained in:
Erik Johnston
2022-05-21 16:42:51 +01:00
parent da10dfc311
commit 8e47d72992
3 changed files with 24 additions and 5 deletions

View File

@@ -602,7 +602,7 @@ class FederationSender(AbstractFederationSender):
room_id = receipt.room_id
# Work out which remote servers should be poked and poke them.
domains_set = await self.state.get_current_hosts_in_room(room_id)
domains_set = await self.store.get_current_hosts_in_room(room_id)
domains = [
d
for d in domains_set

View File

@@ -172,10 +172,6 @@ class StateHandler:
entry = await self.resolve_state_groups_for_events(room_id, latest_event_ids)
return await self.store.get_joined_users_from_state(room_id, entry)
async def get_current_hosts_in_room(self, room_id: str) -> FrozenSet[str]:
event_ids = await self.store.get_latest_event_ids_in_room(room_id)
return await self.get_hosts_in_room_at_events(room_id, event_ids)
async def get_hosts_in_room_at_events(
self, room_id: str, event_ids: Collection[str]
) -> FrozenSet[str]:

View File

@@ -887,6 +887,29 @@ class RoomMemberWorkerStore(EventsWorkerStore):
return True
async def get_current_hosts_in_room(self, room_id: str) -> Set[str]:
"""Get current hosts in room."""
if isinstance(self.database_engine, Sqlite3Engine):
users = await self.get_users_in_room(room_id)
return {get_domain_from_id(u) for u in users}
def get_current_hosts_in_room_txn(txn: LoggingTransaction) -> Set[str]:
sql = """
SELECT DISTINCT substring(state_key FROM '@[^:]*:(.*)$')
FROM current_state_events
WHERE
type = 'm.room.member'
AND membership = 'join'
AND room_id = ?
"""
txn.execute(sql, (room_id,))
return set(txn)
return await self.db_pool.runInteraction(
"get_current_hosts_in_room", get_current_hosts_in_room_txn
)
async def get_joined_hosts(
self, room_id: str, state_entry: "_StateCacheEntry"
) -> FrozenSet[str]: