Mark Sapiro pushed to branch master at GNU Mailman / Mailman Core


Commits:
218ce387 by Kunal Mehta at 2021-05-23T22:31:43-07:00
Optimize MembershipManager.memberships_pending_removal()

This is the same fix as ee8dfef5ba1c basically.

MembershipManager.memberships_pending_removal() makes a query for a set
of members that potentially meet some bounce criteria and then for each
member found, it does further processing in Python.

While the first query is pretty fast, the function then makes a further
query for each member being checked to look up member.mailing_list. We
can easily optimize this by selecting the interval in the original query
since the mailinglist table is already part of the JOIN.

Signed-off-by: Kunal Mehta <lego...@debian.org>

- - - - -
c7b79d17 by Mark Sapiro at 2021-06-07T21:36:55+00:00
Merge branch 'faster-query-2' into 'master'

Optimize MembershipManager.memberships_pending_removal()

See merge request mailman/mailman!869
- - - - -


1 changed file:

- src/mailman/model/member.py


Changes:

=====================================
src/mailman/model/member.py
=====================================
@@ -271,15 +271,16 @@ class MembershipManager:
         from mailman.model.mailinglist import MailingList
         from mailman.model.preferences import Preferences
 
-        query = store.query(Member).join(
+        query = store.query(
+            Member,
+            MailingList.bounce_you_are_disabled_warnings_interval,
+            MailingList.bounce_you_are_disabled_warnings).join(
             MailingList, Member.list_id == MailingList._list_id).join(
             Member.preferences).filter(and_(
                 MailingList.process_bounces == True,    # noqa: E712
                 Member.total_warnings_sent >= 
MailingList.bounce_you_are_disabled_warnings,     # noqa: E501
                 Preferences.delivery_status == DeliveryStatus.by_bounces))
 
-        for member in query.all():
-            if ((member.last_warning_sent +
-                    
member.mailing_list.bounce_you_are_disabled_warnings_interval) <= now() or   # 
noqa: E501
-                    member.mailing_list.bounce_you_are_disabled_warnings == 0):
+        for member, interval, warnings in query.all():
+            if (member.last_warning_sent + interval) <= now() or warnings == 0:
                 yield member



View it on GitLab: 
https://gitlab.com/mailman/mailman/-/compare/f43d34a367b204ab2d54a05124f762d6f10335e9...c7b79d173ff95eebbea251d41945381d0332ca37

-- 
View it on GitLab: 
https://gitlab.com/mailman/mailman/-/compare/f43d34a367b204ab2d54a05124f762d6f10335e9...c7b79d173ff95eebbea251d41945381d0332ca37
You're receiving this email because of your account on gitlab.com.


_______________________________________________
Mailman-checkins mailing list -- mailman-checkins@python.org
To unsubscribe send an email to mailman-checkins-le...@python.org
https://mail.python.org/mailman3/lists/mailman-checkins.python.org/
Member address: arch...@jab.org

Reply via email to