Skip to content

feat: share precomputed agenda data with agenda.ics#10356

Open
jennifer-richards wants to merge 16 commits intoietf-tools:mainfrom
jennifer-richards:faster-ical
Open

feat: share precomputed agenda data with agenda.ics#10356
jennifer-richards wants to merge 16 commits intoietf-tools:mainfrom
jennifer-richards:faster-ical

Conversation

@jennifer-richards
Copy link
Member

@jennifer-richards jennifer-richards commented Feb 3, 2026

Speeds up the agenda.ics endpoints to near instant. Assuming we keep the caches warm as intended, it will also speed up all agenda page loads.

  • Refactors the agenda_ical() and its helpers to use the same precomputed data that is supplied to the agenda-neue frontend.
  • Adds agenda caching for all meetings, not just the current meeting, with a week-scale cache lifetime for non-current meetings.
  • Changes the ical links to use versionless agenda hrefs so they'll always point to the current revision.
  • Adds a task to populate/refresh the cache for all meetings so it will always be warm.
  • Renames agenda_data_refresh to agenda_data_refresh_task (keeps/deprecates old task until we deploy and update our config to use the new name)
  • Fixes caching for get_href / get_versionless_href mixes data between these calls #10355

I propose that we continue refreshing the agenda data for the "current" meeting every 5 minutes but only weekly for other meetings. That was assumed in choosing the new constants in settings.py. This does not add a mechanism for invalidating the cache dynamically if the agenda is changed. A change like that will need a manual cache refresh if waiting for the next regular refresh is not acceptable.

Note: The cache is kept in memcache. Data for each meeting is 200-300 kB, so it fits well within memcache's size limit. Restarting memcached will lose cached data, though. I think this is acceptable because memcached restarts are rare and the cache will recover on its own as requests come in, usually with at most one slow request per meeting.

@jennifer-richards jennifer-richards marked this pull request as ready for review February 5, 2026 01:52
@codecov
Copy link

codecov bot commented Feb 5, 2026

Codecov Report

❌ Patch coverage is 83.56164% with 24 lines in your changes missing coverage. Please review.
✅ Project coverage is 88.37%. Comparing base (a174f43) to head (4740c3c).
⚠️ Report is 2 commits behind head on main.

Files with missing lines Patch % Lines
ietf/meeting/views.py 82.20% 21 Missing ⚠️
ietf/meeting/tasks.py 85.00% 3 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main   #10356      +/-   ##
==========================================
- Coverage   88.38%   88.37%   -0.02%     
==========================================
  Files         325      325              
  Lines       43525    43638     +113     
==========================================
+ Hits        38470    38563      +93     
- Misses       5055     5075      +20     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

caching for get_href / get_versionless_href mixes data between these calls

1 participant