Prefect 3.7.2 ships worker channel and cloud worker fixes

   |   4 minute read   |   Using 807 words

A look at what landed in PrefectHQ/prefect over the past week. The 3.7.2 release went out, the new worker channel got handshake and snapshot plumbing, and the Azure container worker finally retries on transient 5xx responses. About 53 commits across 421 files.

The worker channel keeps getting wired up

The bigger structural story this week is the worker channel. It is the new way workers talk to the server, and three commits in a row pushed it forward.

Add worker channel handshake and heartbeat introduced the handshake and heartbeat frames so the server can actually keep track of whether a worker is still alive. A few days later, work pool snapshot delivery was added so the server can push the current state of a work pool over that channel. Then a quick follow up fixed a bug where the ready frame returned worker_id=None, which broke any downstream code that used that field.

For anyone running self hosted Prefect this is worth noting. The contract for worker registration is changing, and if you have custom workers or proxies in front of the API you should watch later 3.7 releases.

Cloud worker reliability

A lot of the operator facing fixes target cloud workers and result storage.

The Azure container instance worker now retries transient 5xx errors when polling for container group state. Three retries, exponential backoff starting at one second. Operators who have run Prefect against Azure ACI know about the random 503 from the ARM API that used to kill a perfectly fine flow run. The retry only fires for status codes 500 and above, so 404 and 401 still fail fast.

The Google Cloud Run V2 worker got something different. Job submission retry settings are now configurable. You can tune attempts and initial delay through worker config instead of relying on the hardcoded defaults. Useful for fleets running in regions where the GCP control plane gets cranky during incidents.

Two more cloud fixes worth calling out:

Performance and import work

Two caching changes and one benchmark fix. The team is paying attention to startup cost and template resolution.

Block document template resolution is now cached. If a deployment references the same block several times the template no longer gets reparsed each time. The other caching change is in resolve_variables, which now caches variable reads inside a single call. Useful for deployments with many templated fields that share variables.

The other one is a fix to the benchmark itself. CodSpeed cold import benchmarks were not actually measuring cold imports because the import cache was warm. The numbers in benches/bench_import.py will read differently after this lands, so do not compare across that commit.

Operator usability cleanups

A handful of small fixes that matter once you actually run Prefect in production.

UI v2 work

The ui-v2 frontend got steady polish.

Deployment schedule status now reflects only the active flag and the badge layout was tightened. A separate change shows active and paused status on the deployment view. Tags on deployment details are now clickable, routing back into a filtered deployment list. Flow run log sort order persists in localStorage so it sticks across navigation.

Dark mode got a pass. Prose containers now get dark:prose-invert so markdown rendered inside the UI does not stay white on black, and the flow run graph uses calmer dark mode shades for nodes.

A 19 update bump of ui-v2-dependencies and a 13 update bump of uv-dependencies landed too, plus pydantic-settings was raised to >=2.9.1.

What to watch

  • The worker channel is still being assembled. If you maintain custom workers, watch for the contract to stabilize before pinning to a specific 3.7 release.
  • The Azure ACI retry policy is hardcoded to three attempts. If you want to tune it like the Cloud Run V2 worker, it is not configurable yet.
  • The pydantic-settings lower bound was raised to >=2.9.1. If your environment pins an older version, installs will start failing on upgrade.
  • The 3.7.2 release notes are out. Read them before bumping from 3.7.1.


denis256 at denis256.dev