Repository navigation
Fix leaderboard 500s and slow ranking queries - #265
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Leaderboard requests were exhausting Gunicorn's 30-second timeout and returning 500/503 responses. Scope and materialize run metadata for the requested leaderboard, compute submission counts once across GPUs, and fetch validation summaries only for winning runs. Preserve tied runs, distinct submission counts, secret-test eligibility, and hacked-submission filters. Cache null results for ended leaderboards so empty competitions stop triggering repeated SQL.
Production mitigation already applied: two concurrent partial indexes for secret-test eligibility, VACUUM ANALYZE of runs/submissions, and lower run-table vacuum thresholds. The repeatable SQL is in
docs/operations/leaderboard-query-indexes.sql. QR v2 recovered from a 31.6-second HTTP 503 to HTTP 200 in 4.0 seconds after database maintenance, before this application deployment.Validation:
tests/: 54 passed, 9 legacy page-rendering failures (before the final tie test). The same legacy tests also fail on unchanged main; API coverage passes.The query still scales with submissions within one leaderboard; this change bounds it to that leaderboard and avoids scanning other competitions. Database maintenance ran without blocking normal writes.