Skip to content

Commit 2230242

Browse files
refactor: speed up finalizing proceedings (ietf-tools#7846)
* chore: increase nginx proxy_read_timeout * refactor: speed up bluesheet_data The affiliation helper was extremely slow. Using queryset annotation speeds it up by almost an order of magnitude. * chore: delint
1 parent 9b4671c commit 2230242

3 files changed

Lines changed: 28 additions & 11 deletions

File tree

ietf/meeting/utils.py

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212

1313
from django.conf import settings
1414
from django.contrib import messages
15-
from django.db.models import Q
15+
from django.db.models import OuterRef, Subquery, TextField, Q, Value
16+
from django.db.models.functions import Coalesce
1617
from django.template.loader import render_to_string
1718
from django.utils import timezone
1819
from django.utils.encoding import smart_str
@@ -149,19 +150,27 @@ def create_proceedings_templates(meeting):
149150

150151

151152
def bluesheet_data(session):
152-
def affiliation(meeting, person):
153-
# from OidcExtraScopeClaims.scope_registration()
154-
email_list = person.email_set.values_list("address")
155-
q = Q(person=person, meeting=meeting) | Q(email__in=email_list, meeting=meeting)
156-
reg = MeetingRegistration.objects.filter(q).exclude(affiliation="").first()
157-
return reg.affiliation if reg else ""
158-
159-
attendance = Attended.objects.filter(session=session).order_by("time")
160-
meeting = session.meeting
153+
attendance = (
154+
Attended.objects.filter(session=session)
155+
.annotate(
156+
affiliation=Coalesce(
157+
Subquery(
158+
MeetingRegistration.objects.filter(
159+
Q(meeting=session.meeting),
160+
Q(person=OuterRef("person")) | Q(email=OuterRef("person__email")),
161+
).values("affiliation")[:1]
162+
),
163+
Value(""),
164+
output_field=TextField(),
165+
)
166+
).distinct()
167+
.order_by("time")
168+
)
169+
161170
return [
162171
{
163172
"name": attended.person.plain_name(),
164-
"affiliation": affiliation(meeting, attended.person),
173+
"affiliation": attended.affiliation,
165174
}
166175
for attended in attendance
167176
]

k8s/nginx-auth.conf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,9 @@ server {
3434
proxy_set_header X-Forwarded-For $${keepempty}proxy_add_x_forwarded_for;
3535
proxy_set_header X-Real-IP $${keepempty}remote_addr;
3636
proxy_pass http://localhost:8000;
37+
# Set timeouts longer than Cloudflare proxy limits
38+
proxy_connect_timeout 60; # nginx default (Cf = 15)
39+
proxy_read_timeout 120; # nginx default = 60 (Cf = 100)
40+
proxy_send_timeout 60; # nginx default = 60 (Cf = 30)
3741
}
3842
}

k8s/nginx-datatracker.conf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ server {
2323
proxy_set_header X-Forwarded-For $${keepempty}proxy_add_x_forwarded_for;
2424
proxy_set_header X-Real-IP $${keepempty}remote_addr;
2525
proxy_pass http://localhost:8000;
26+
# Set timeouts longer than Cloudflare proxy limits
27+
proxy_connect_timeout 60; # nginx default (Cf = 15)
28+
proxy_read_timeout 120; # nginx default = 60 (Cf = 100)
29+
proxy_send_timeout 60; # nginx default = 60 (Cf = 30)
2630
client_max_body_size 0; # disable size check
2731
}
2832
}

0 commit comments

Comments
 (0)