Skip to content

Commit 2f6dcf6

Browse files
committed
Mass-forget meetings in chunks of 100
Both postgres and sqlite can handle more than 100 at a time, but there is a limit and we do not want to hit that.
1 parent 4859f1e commit 2f6dcf6

1 file changed

Lines changed: 15 additions & 9 deletions

File tree

bbblb/services/poller.py

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,10 @@ async def poll_one(self, server_id):
9797
server = (
9898
await session.execute(model.Server.select(id=server_id))
9999
).scalar_one()
100-
meetings = await server.awaitable_attrs.meetings
101-
meetings = {meeting.internal_id: meeting for meeting in meetings}
100+
meetings: dict[str, model.Meeting] = {
101+
meeting.internal_id: meeting
102+
for meeting in await server.awaitable_attrs.meetings
103+
}
102104

103105
if not server.enabled:
104106
if not meetings:
@@ -153,20 +155,24 @@ async def poll_one(self, server_id):
153155

154156
async with self.db.session() as session:
155157
# Forget meetings not found on server
156-
forget_ids = set(
157-
meeting.internal_id
158+
forget_ids = list(
159+
meeting.id
158160
for meeting in meetings.values()
159161
if meeting.internal_id not in running_ids
160162
)
161163
if forget_ids:
162164
LOG.debug(
163-
f"{len(forget_ids)} meetings not found on server, ending them all"
165+
f"{len(forget_ids)} meetings not found on server, forgetting them all"
164166
)
165-
await session.execute(
166-
model.delete(model.Meeting).where(
167-
model.Meeting.internal_id.in_(forget_ids)
167+
chunk_size = 100
168+
for offset in range(0, len(forget_ids), chunk_size):
169+
await session.execute(
170+
model.delete(model.Meeting).where(
171+
model.Meeting.id.in_(
172+
forget_ids[offset : offset + chunk_size]
173+
)
174+
)
168175
)
169-
)
170176

171177
# Re-fetch server from DB so we can update load and state values
172178
server = (

0 commit comments

Comments
 (0)