Skip to content

Release tracker actors between tests - #182

Merged
timkpaine merged 1 commit into
mainfrom
tkp/release-tracker-actors
Aug 21, 2026
Merged

Release tracker actors between tests#182
timkpaine merged 1 commit into
mainfrom
tkp/release-tracker-actors

Conversation

@timkpaine

@timkpaine timkpaine commented Aug 21, 2026

Copy link
Copy Markdown
Member

Fixes the CI failure on main after #181. Not a bug in the actor id fix — that change is correct.

Root cause

Both tracker actors pin node:__internal_head__: 0.1, and that resource totals 1.0 on the head node. Each RayTaskTracker creates two of them, so it costs 0.2 and a cluster admits exactly five. Measured:

head resource total : 1.0
  actor  1..10: ok      (head remaining 0.90 ... 0.00)
  actor 11:     COULD NOT SCHEDULE (resource exhausted)

The tests only called dashboard.stop(), never releasing the detached actors, so the budget accumulated across the module. Four trackers held 0.8; the new actor test made it five and exactly 1.0 — the cap, with zero headroom. Whichever tracker lost the race got an unschedulable callback actor, which never reported back, so get_df() stayed empty for the full 120s wait.

Sitting precisely on the boundary is why the same commit passed on the PR branch and locally, then failed on main.

Fix

Build trackers through a fixture that calls exit() in teardown. Verified that exit() returns the pin — seven trackers in sequence, each taking 0.2 and releasing back to 1.0:

start                head=1.00
  tracker 1 created  head=0.80
  tracker 1 exited   head=1.00
  ... x7

The new actor test failed on main with an empty dataframe, having passed
on the PR branch and locally. It is not a bug in the actor id fix.

Both tracker actors pin 0.1 of the head node's `node:__internal_head__`
budget, which totals 1.0, so each RayTaskTracker costs 0.2 and a cluster
admits exactly five. Measured: the eleventh pinned actor cannot be
scheduled at all.

Tests only stopped the dashboard, never the detached actors, so the
budget accumulated across the module. Four trackers held 0.8; adding the
actor test made it five and 1.0 — exactly the cap, with no headroom.
Whichever tracker lost the race got an unschedulable callback actor,
which never reported back, so the dataframe stayed empty. Sitting on the
boundary is why it passed in one environment and failed in another.

Build trackers through a fixture that calls exit() afterwards. Verified
that exit() returns the pin: seven trackers in sequence each take 0.2
and release back to 1.0.

The five-tracker ceiling itself is untouched here and is a real limit on
concurrent trackers per cluster.

Signed-off-by: Tim Paine <3105306+timkpaine@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown
Contributor

Test Results

38 tests  ±0   38 ✅ ±0   28s ⏱️ -7s
 1 suites ±0    0 💤 ±0 
 1 files   ±0    0 ❌ ±0 

Results for commit 3a64150. ± Comparison against base commit 93224b9.

@timkpaine
timkpaine marked this pull request as ready for review August 21, 2026 23:29
@timkpaine
timkpaine merged commit 2ee5f3b into main Aug 21, 2026
4 checks passed
@timkpaine
timkpaine deleted the tkp/release-tracker-actors branch August 21, 2026 23:29
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.

1 participant