Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

Commit f7baffd

Browse files
authored
Remove remaining pieces of groups code. (#12966)
* Remove an unused stream ID generator. * Remove the now unused remote profile cache.
1 parent 44de53b commit f7baffd

File tree

8 files changed

+6
-209
lines changed

8 files changed

+6
-209
lines changed

changelog.d/12966.removal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Remove support for the non-standard groups/communities feature from Synapse.

synapse/_scripts/synapse_port_db.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,7 @@
182182
"groups",
183183
"local_group_membership",
184184
"local_group_updates",
185+
"remote_profile_cache",
185186
}
186187

187188

synapse/handlers/profile.py

Lines changed: 1 addition & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,7 @@
2323
StoreError,
2424
SynapseError,
2525
)
26-
from synapse.metrics.background_process_metrics import wrap_as_background_process
27-
from synapse.types import (
28-
JsonDict,
29-
Requester,
30-
UserID,
31-
create_requester,
32-
get_domain_from_id,
33-
)
26+
from synapse.types import JsonDict, Requester, UserID, create_requester
3427
from synapse.util.caches.descriptors import cached
3528
from synapse.util.stringutils import parse_and_validate_mxc_uri
3629

@@ -50,9 +43,6 @@ class ProfileHandler:
5043
delegate to master when necessary.
5144
"""
5245

53-
PROFILE_UPDATE_MS = 60 * 1000
54-
PROFILE_UPDATE_EVERY_MS = 24 * 60 * 60 * 1000
55-
5646
def __init__(self, hs: "HomeServer"):
5747
self.store = hs.get_datastores().main
5848
self.clock = hs.get_clock()
@@ -73,11 +63,6 @@ def __init__(self, hs: "HomeServer"):
7363

7464
self._third_party_rules = hs.get_third_party_event_rules()
7565

76-
if hs.config.worker.run_background_tasks:
77-
self.clock.looping_call(
78-
self._update_remote_profile_cache, self.PROFILE_UPDATE_MS
79-
)
80-
8166
async def get_profile(self, user_id: str) -> JsonDict:
8267
target_user = UserID.from_string(user_id)
8368

@@ -116,30 +101,6 @@ async def get_profile(self, user_id: str) -> JsonDict:
116101
raise SynapseError(502, "Failed to fetch profile")
117102
raise e.to_synapse_error()
118103

119-
async def get_profile_from_cache(self, user_id: str) -> JsonDict:
120-
"""Get the profile information from our local cache. If the user is
121-
ours then the profile information will always be correct. Otherwise,
122-
it may be out of date/missing.
123-
"""
124-
target_user = UserID.from_string(user_id)
125-
if self.hs.is_mine(target_user):
126-
try:
127-
displayname = await self.store.get_profile_displayname(
128-
target_user.localpart
129-
)
130-
avatar_url = await self.store.get_profile_avatar_url(
131-
target_user.localpart
132-
)
133-
except StoreError as e:
134-
if e.code == 404:
135-
raise SynapseError(404, "Profile was not found", Codes.NOT_FOUND)
136-
raise
137-
138-
return {"displayname": displayname, "avatar_url": avatar_url}
139-
else:
140-
profile = await self.store.get_from_remote_profile_cache(user_id)
141-
return profile or {}
142-
143104
async def get_displayname(self, target_user: UserID) -> Optional[str]:
144105
if self.hs.is_mine(target_user):
145106
try:
@@ -509,45 +470,3 @@ async def check_profile_query_allowed(
509470
# so we act as if we couldn't find the profile.
510471
raise SynapseError(403, "Profile isn't available", Codes.FORBIDDEN)
511472
raise
512-
513-
@wrap_as_background_process("Update remote profile")
514-
async def _update_remote_profile_cache(self) -> None:
515-
"""Called periodically to check profiles of remote users we haven't
516-
checked in a while.
517-
"""
518-
entries = await self.store.get_remote_profile_cache_entries_that_expire(
519-
last_checked=self.clock.time_msec() - self.PROFILE_UPDATE_EVERY_MS
520-
)
521-
522-
for user_id, displayname, avatar_url in entries:
523-
is_subscribed = await self.store.is_subscribed_remote_profile_for_user(
524-
user_id
525-
)
526-
if not is_subscribed:
527-
await self.store.maybe_delete_remote_profile_cache(user_id)
528-
continue
529-
530-
try:
531-
profile = await self.federation.make_query(
532-
destination=get_domain_from_id(user_id),
533-
query_type="profile",
534-
args={"user_id": user_id},
535-
ignore_backoff=True,
536-
)
537-
except Exception:
538-
logger.exception("Failed to get avatar_url")
539-
540-
await self.store.update_remote_profile_cache(
541-
user_id, displayname, avatar_url
542-
)
543-
continue
544-
545-
new_name = profile.get("displayname")
546-
if not isinstance(new_name, str):
547-
new_name = None
548-
new_avatar = profile.get("avatar_url")
549-
if not isinstance(new_avatar, str):
550-
new_avatar = None
551-
552-
# We always hit update to update the last_check timestamp
553-
await self.store.update_remote_profile_cache(user_id, new_name, new_avatar)

synapse/storage/databases/main/__init__.py

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -151,10 +151,6 @@ def __init__(
151151
],
152152
)
153153

154-
self._group_updates_id_gen = StreamIdGenerator(
155-
db_conn, "local_group_updates", "stream_id"
156-
)
157-
158154
self._cache_id_gen: Optional[MultiWriterIdGenerator]
159155
if isinstance(self.database_engine, PostgresEngine):
160156
# We set the `writers` to an empty list here as we don't care about
@@ -197,20 +193,6 @@ def __init__(
197193
prefilled_cache=curr_state_delta_prefill,
198194
)
199195

200-
_group_updates_prefill, min_group_updates_id = self.db_pool.get_cache_dict(
201-
db_conn,
202-
"local_group_updates",
203-
entity_column="user_id",
204-
stream_column="stream_id",
205-
max_value=self._group_updates_id_gen.get_current_token(),
206-
limit=1000,
207-
)
208-
self._group_updates_stream_cache = StreamChangeCache(
209-
"_group_updates_stream_cache",
210-
min_group_updates_id,
211-
prefilled_cache=_group_updates_prefill,
212-
)
213-
214196
self._stream_order_on_start = self.get_room_max_stream_ordering()
215197
self._min_stream_order_on_start = self.get_room_min_stream_ordering()
216198

synapse/storage/databases/main/profile.py

Lines changed: 2 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,10 @@
1111
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
14-
from typing import Any, Dict, List, Optional
14+
from typing import Optional
1515

1616
from synapse.api.errors import StoreError
1717
from synapse.storage._base import SQLBaseStore
18-
from synapse.storage.database import LoggingTransaction
1918
from synapse.storage.databases.main.roommember import ProfileInfo
2019

2120

@@ -55,17 +54,6 @@ async def get_profile_avatar_url(self, user_localpart: str) -> Optional[str]:
5554
desc="get_profile_avatar_url",
5655
)
5756

58-
async def get_from_remote_profile_cache(
59-
self, user_id: str
60-
) -> Optional[Dict[str, Any]]:
61-
return await self.db_pool.simple_select_one(
62-
table="remote_profile_cache",
63-
keyvalues={"user_id": user_id},
64-
retcols=("displayname", "avatar_url"),
65-
allow_none=True,
66-
desc="get_from_remote_profile_cache",
67-
)
68-
6957
async def create_profile(self, user_localpart: str) -> None:
7058
await self.db_pool.simple_insert(
7159
table="profiles", values={"user_id": user_localpart}, desc="create_profile"
@@ -91,97 +79,6 @@ async def set_profile_avatar_url(
9179
desc="set_profile_avatar_url",
9280
)
9381

94-
async def update_remote_profile_cache(
95-
self, user_id: str, displayname: Optional[str], avatar_url: Optional[str]
96-
) -> int:
97-
return await self.db_pool.simple_update(
98-
table="remote_profile_cache",
99-
keyvalues={"user_id": user_id},
100-
updatevalues={
101-
"displayname": displayname,
102-
"avatar_url": avatar_url,
103-
"last_check": self._clock.time_msec(),
104-
},
105-
desc="update_remote_profile_cache",
106-
)
107-
108-
async def maybe_delete_remote_profile_cache(self, user_id: str) -> None:
109-
"""Check if we still care about the remote user's profile, and if we
110-
don't then remove their profile from the cache
111-
"""
112-
subscribed = await self.is_subscribed_remote_profile_for_user(user_id)
113-
if not subscribed:
114-
await self.db_pool.simple_delete(
115-
table="remote_profile_cache",
116-
keyvalues={"user_id": user_id},
117-
desc="delete_remote_profile_cache",
118-
)
119-
120-
async def is_subscribed_remote_profile_for_user(self, user_id: str) -> bool:
121-
"""Check whether we are interested in a remote user's profile."""
122-
res: Optional[str] = await self.db_pool.simple_select_one_onecol(
123-
table="group_users",
124-
keyvalues={"user_id": user_id},
125-
retcol="user_id",
126-
allow_none=True,
127-
desc="should_update_remote_profile_cache_for_user",
128-
)
129-
130-
if res:
131-
return True
132-
133-
res = await self.db_pool.simple_select_one_onecol(
134-
table="group_invites",
135-
keyvalues={"user_id": user_id},
136-
retcol="user_id",
137-
allow_none=True,
138-
desc="should_update_remote_profile_cache_for_user",
139-
)
140-
141-
if res:
142-
return True
143-
return False
144-
145-
async def get_remote_profile_cache_entries_that_expire(
146-
self, last_checked: int
147-
) -> List[Dict[str, str]]:
148-
"""Get all users who haven't been checked since `last_checked`"""
149-
150-
def _get_remote_profile_cache_entries_that_expire_txn(
151-
txn: LoggingTransaction,
152-
) -> List[Dict[str, str]]:
153-
sql = """
154-
SELECT user_id, displayname, avatar_url
155-
FROM remote_profile_cache
156-
WHERE last_check < ?
157-
"""
158-
159-
txn.execute(sql, (last_checked,))
160-
161-
return self.db_pool.cursor_to_dict(txn)
162-
163-
return await self.db_pool.runInteraction(
164-
"get_remote_profile_cache_entries_that_expire",
165-
_get_remote_profile_cache_entries_that_expire_txn,
166-
)
167-
16882

16983
class ProfileStore(ProfileWorkerStore):
170-
async def add_remote_profile_cache(
171-
self, user_id: str, displayname: str, avatar_url: str
172-
) -> None:
173-
"""Ensure we are caching the remote user's profiles.
174-
175-
This should only be called when `is_subscribed_remote_profile_for_user`
176-
would return true for the user.
177-
"""
178-
await self.db_pool.simple_upsert(
179-
table="remote_profile_cache",
180-
keyvalues={"user_id": user_id},
181-
values={
182-
"displayname": displayname,
183-
"avatar_url": avatar_url,
184-
"last_check": self._clock.time_msec(),
185-
},
186-
desc="add_remote_profile_cache",
187-
)
84+
pass

synapse/storage/databases/main/purge_events.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,6 @@ def _purge_room_txn(self, txn: LoggingTransaction, room_id: str) -> List[int]:
393393
"partial_state_events",
394394
"events",
395395
"federation_inbound_events_staging",
396-
"group_rooms",
397396
"local_current_membership",
398397
"partial_state_rooms_servers",
399398
"partial_state_rooms",
@@ -413,7 +412,6 @@ def _purge_room_txn(self, txn: LoggingTransaction, room_id: str) -> List[int]:
413412
"e2e_room_keys",
414413
"event_push_summary",
415414
"pusher_throttle",
416-
"group_summary_rooms",
417415
"room_account_data",
418416
"room_tags",
419417
# "rooms" happens last, to keep the foreign keys in the other tables

synapse/storage/schema/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@
7070
7171
Changes in SCHEMA_VERSION = 71:
7272
- event_edges.room_id is no longer read from.
73+
- Tables related to groups are no longer accessed.
7374
"""
7475

7576

tests/rest/admin/test_room.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2467,7 +2467,6 @@ def _block_room(self, room_id: str) -> None:
24672467
"event_push_actions",
24682468
"event_search",
24692469
"events",
2470-
"group_rooms",
24712470
"receipts_graph",
24722471
"receipts_linearized",
24732472
"room_aliases",
@@ -2484,7 +2483,6 @@ def _block_room(self, room_id: str) -> None:
24842483
"e2e_room_keys",
24852484
"event_push_summary",
24862485
"pusher_throttle",
2487-
"group_summary_rooms",
24882486
"room_account_data",
24892487
"room_tags",
24902488
# "state_groups", # Current impl leaves orphaned state groups around.

0 commit comments

Comments
 (0)