PrefectHQ
prefect
Blog
Docs
Changelog
Blog
Docs
Changelog
Overview
Branches
Benchmarks
Runs
Performance History
Latest Results
Give each db_vacuum kind its own connection pool flow_runs/events/orphans vacuum shared one cached, single-connection AsyncPostgresConfiguration keyed only by connection_url. Docket is Redis-backed and each kind's tasks are enqueued independently, so nothing prevents two kinds' tasks from running concurrently and contending for that one connection. Key the cache by (connection_url, kind) instead so each kind gets its own dedicated pool; batches within one kind still share one connection sequentially, which remains correct since each kind's own loop only enqueues its next task after the previous one completes. Fixes the connection-contention half of #22839. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
WAHIB-EL-KHADIRI:fix/db-vacuum-connection-contention
4 hours ago
Take the lock before deciding a deployment is fresh Filtering inside the `locked` CTE skipped the `FOR UPDATE`, so a concurrent uncommitted `NOT_READY` from the Foreman could win over a fresh poll — the hazard the `SKIP LOCKED` comment above it describes. Keep the CTE state-independent and choose the write set from the locked rows instead, reading the clock after the locking SELECT so that a row ageing past the refresh point during the lock wait is still refreshed. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
chuqCTC:fix/23129-conditional-mark-deployments-ready
6 hours ago
Restore deployment, work pool, and work queue links on V2 flow-run cards (#23113) Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: Alexander Streed <alex.s@prefect.io> Co-authored-by: Alex Streed <desertaxle@users.noreply.github.com>
main
9 hours ago
ui-v2: show tag names inline and make tag overflow focusable (#23116) Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: Alex Streed <desertaxle@users.noreply.github.com>
main
10 hours ago
chore(deps): Update python dependencies (#22928) Co-authored-by: prefect-renovate[bot] <313130218+prefect-renovate[bot]@users.noreply.github.com> Co-authored-by: Alex Streed <alex.s@prefect.io>
main
10 hours ago
Merge branch 'main' into fix/23129-conditional-mark-deployments-ready
chuqCTC:fix/23129-conditional-mark-deployments-ready
12 hours ago
Only write deployments that a poll actually changes `mark_deployments_ready` locked and updated every deployment on the polled work pool's queues regardless of their current state, so a queue with N deployments produced N row locks and N row updates per execution even with nothing scheduled or running. Narrow the `locked` CTE to rows that need the write: not `READY`, or a `last_polled` older than half of `deployment_last_polled_timeout_seconds`. The age is computed in SQL with `date_diff_seconds`, as the Foreman already does for worker heartbeats, so that time spent waiting for the lock cannot stale the comparison and suppress a refresh. Target the UPDATE at the ids the CTE returned rather than at the CTE itself, batched under `get_max_query_parameters()`. SQLAlchemy inlines the CTE into the UPDATE, so under READ COMMITTED it is re-evaluated on a second snapshot. That was safe while the predicate was state-independent; with this one, a row the Foreman flips between the two statements is written back to READY without entering `rows`, so its `prefect.deployment.ready` event is never emitted. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
chuqCTC:fix/23129-conditional-mark-deployments-ready
13 hours ago
Only write deployments that a poll actually changes `mark_deployments_ready` locked and updated every deployment on the polled work pool's queues regardless of their current state, so a queue with N deployments produced N row locks and N row updates per execution even with nothing scheduled or running. Narrow the `locked` CTE to rows that need the write: not `READY`, or a `last_polled` older than half of `deployment_last_polled_timeout_seconds`. The age is computed in SQL with `date_diff_seconds`, as the Foreman already does for worker heartbeats, so that time spent waiting for the lock cannot stale the comparison and suppress a refresh. Target the UPDATE at the ids the CTE returned rather than at the CTE itself. SQLAlchemy inlines the CTE into the UPDATE, so under READ COMMITTED it is re-evaluated on a second snapshot. That was safe while the predicate was state-independent; with this one, a row the Foreman flips between the two statements is written back to READY without entering `rows`, so its `prefect.deployment.ready` event is never emitted. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
chuqCTC:fix/23129-conditional-mark-deployments-ready
14 hours ago
Latest Branches
CodSpeed Performance Gauge
0%
Give each db_vacuum kind its own connection pool
#23136
4 hours ago
d7c1f94
WAHIB-EL-KHADIRI:fix/db-vacuum-connection-contention
CodSpeed Performance Gauge
0%
Only write deployments that a poll actually changes
#23130
7 hours ago
bbf4431
chuqCTC:fix/23129-conditional-mark-deployments-ready
CodSpeed Performance Gauge
0%
Add opt-in HTTPX2 support with a compatibility window
#23118
15 hours ago
30ce0cd
desertaxle/migrate-httpx2
© 2026 CodSpeed Technology
Home
Terms
Privacy
Docs