Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/19677.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add a ["Listing quarantined media changes" Admin API](https://element-hq.github.io/synapse/latest/admin_api/media_admin_api.html#listing-quarantined-media-changes) for retrieving a paginated record of when media became (un)quarantined.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Matches the changelog from #19558 so they merge

👍

11 changes: 8 additions & 3 deletions synapse/rest/admin/media.py
Original file line number Diff line number Diff line change
Expand Up @@ -249,13 +249,17 @@ async def on_GET(self, request: SynapseRequest) -> tuple[int, JsonDict]:

from_id = parse_integer(request, "from", default=0)
limit = 100 # arbitrary; not enough to cause problems (hopefully)
to_id = await self.store.get_current_quarantined_media_stream_id()
Comment thread
turt2live marked this conversation as resolved.

if to_id < from_id:
max_id = await self.store.get_max_quarantined_media_stream_id()
Comment thread
turt2live marked this conversation as resolved.
Outdated
if from_id > max_id:
# The caller is trying to get future data, which isn't possible.
Comment thread
turt2live marked this conversation as resolved.
Outdated
raise SynapseError(
HTTPStatus.BAD_REQUEST,
"The `from` position is ahead of the currently persisted position.",
"The `from` token is considered invalid because it includes stream positions "
"greater than the furthest persisted position across all of the workers."
"This indicates either a Synapse programming error (as we should never hand out "
"invalid future tokens) or a fabricated `from` token. If you've modified the token, "
"you can try paginating from the beginning again.",
errcode=Codes.INVALID_PARAM,
)

Expand All @@ -271,6 +275,7 @@ async def on_GET(self, request: SynapseRequest) -> tuple[int, JsonDict]:
errcode=Codes.UNKNOWN,
)

to_id = await self.store.get_current_quarantined_media_stream_id()
changes = await self.store.get_quarantined_media_changes(
from_id=from_id,
to_id=to_id,
Expand Down
8 changes: 8 additions & 0 deletions synapse/storage/databases/main/room.py
Original file line number Diff line number Diff line change
Expand Up @@ -1310,6 +1310,14 @@ async def get_current_quarantined_media_stream_id(self) -> int:
"""
return self._quarantined_media_changes_id_gen.get_current_token()

async def get_max_quarantined_media_stream_id(self) -> int:
Comment thread
turt2live marked this conversation as resolved.
Outdated
"""Gets the maximum position of the quarantined media changes stream.
Comment thread
turt2live marked this conversation as resolved.
Outdated

Returns:
int - the maximum stream ID
"""
return await self._quarantined_media_changes_id_gen.get_max_allocated_token()

async def wait_for_quarantined_media_stream_id(self, target_id: int) -> bool:
"""Waits until the quarantined media changes stream reaches the given stream ID.

Expand Down
Loading