⚡ Bolt: Optimize Job Event Sequence Number Generation - #175
Conversation
Replaces an inefficient `list_for_job` query that loaded all job events into memory just to find the next sequence number. Adds a specialized `get_max_sequence_no` query to `JobEventRepository` to do this directly in SQL via `func.coalesce(func.max(...), 0)`. Extends to all job modules including parse, synthesis, evaluation, knowledge and api/jobs services. Co-authored-by: crabcanon <3458947+crabcanon@users.noreply.github.com>
|
👋 Jules, reporting for duty! I'm here to lend a hand with this pull request. When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down. I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job! For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with New to Jules? Learn more at jules.google/docs. For security, I will only act on instructions from the user who triggered this task. |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
💡 What: Replaced
list_for_job(job_id, limit=1000)with a new highly optimizedget_max_sequence_no(job_id)method inJobEventRepositoryacross all job tracking services (parse, synthesis, evaluation, knowledge, and API).🎯 Why: Previously, when calculating the next sequence number for a job event, up to 1000 prior job events were fetched from the database and instantiated as SQLAlchemy objects in memory. This caused significant memory bloat, network transfer overhead, and CPU overhead just to access the sequence number of the final element in the array.
📊 Impact: Reduces job event append operations memory footprint from O(N) to O(1) in the sequence length. Database work is vastly reduced from retrieving hundreds of objects to executing a single optimized aggregation query (
func.coalesce(func.max(...), 0)).🔬 Measurement: Verify by executing end to end test suite - all tests should pass successfully without fetching any long arrays when jobs get updated.
PR created automatically by Jules for task 3432638182268863562 started by @crabcanon