Skip to content

Commit 7fd96cb

Browse files
committed
perf: optimize notification for packages with a lot of subscribed users
1 parent dcc4cc3 commit 7fd96cb

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

src/shared/listeners/notify_users.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,10 @@ def create_package_subscription_notifications(
3636
return
3737

3838
# Find users subscribed to ANY of these packages
39-
subscribed_users = User.objects.filter(
39+
subscribed_users_qs = User.objects.filter(
4040
profile__package_subscriptions__overlap=affected_packages
4141
).select_related("profile")
42+
subscribed_users_set = set(subscribed_users_qs)
4243

4344
# Find maintainers of affected packages from cached suggestion
4445
maintainer_users = set()
@@ -55,14 +56,14 @@ def create_package_subscription_notifications(
5556
)
5657

5758
# Combine both sets of users, avoiding duplicates
58-
all_users_to_notify = set(subscribed_users) | maintainer_users
59+
all_users_to_notify = subscribed_users_set | maintainer_users
5960

6061
logger.debug(f"About to notify users about packages: {affected_packages}")
6162
logger.debug(f"Users to notify: {all_users_to_notify}")
6263

6364
logger.info(
6465
f"Creating notifications for {len(all_users_to_notify)} users for CVE {cve_id} "
65-
f"({len(subscribed_users)} subscribed, {len(maintainer_users)} maintainers)"
66+
f"({len(subscribed_users_set)} subscribed, {len(maintainer_users)} maintainers)"
6667
)
6768

6869
for user in all_users_to_notify:
@@ -71,7 +72,7 @@ def create_package_subscription_notifications(
7172
notification_reason = []
7273

7374
# Check if user is subscribed to any affected packages
74-
if user in subscribed_users:
75+
if user in subscribed_users_set:
7576
user_subscribed_packages = [
7677
pkg
7778
for pkg in user.profile.package_subscriptions
@@ -88,7 +89,7 @@ def create_package_subscription_notifications(
8889
pkg for pkg in affected_packages if pkg not in user_affected_packages
8990
]
9091
user_affected_packages.extend(maintainer_packages)
91-
if maintainer_packages or (user not in subscribed_users):
92+
if maintainer_packages or (user not in subscribed_users_set):
9293
notification_reason.append("maintainer of")
9394

9495
if not user_affected_packages:

0 commit comments

Comments
 (0)