Skip to content

[P3] releaseActorOnDeadWorker does not clear AteomPodUid — diverges from crashActor cleanup #618

Closed

Description

Severity: P3 (stale field; currently no operational impact but creates divergent state)
Component: Control Plane — cmd/ateapi/internal/controlapi/syncer.go
Audit ID: CP-7


Summary

releaseActorOnDeadWorker clears AteomPodNamespace, AteomPodName, AteomPodIp,
InProgressSnapshot, and WorkerPoolName from the actor record when it crashes the
actor due to a dead pod. However, it does not clear AteomPodUid. The crashActor
function in crash.go does clear AteomPodUid. This creates a divergent CRASHED
actor record depending on which code path caused the crash. The stale AteomPodUid
in syncer-crashed actors could confuse future validation logic that checks
allPopulated := actor.AteomPodUid != "" && ....


Root Cause

File: cmd/ateapi/internal/controlapi/syncer.go lines 308–314

func releaseActorOnDeadWorker(...) {
    actor.AteomPodNamespace = ""
    actor.AteomPodName = ""
    actor.AteomPodIp = ""
    actor.InProgressSnapshot = nil
    actor.WorkerPoolName = ""
    // MISSING: actor.AteomPodUid = ""
}

File: cmd/ateapi/internal/controlapi/crash.go line 69:

actor.AteomPodUid = ""  // Present in crashActor, absent in releaseActorOnDeadWorker

Steps to Reproduce

# Have a RUNNING actor; delete the worker pod to trigger releaseActorOnDeadWorker
kubectl delete pod -n ate-system <worker-pod>

# Inspect the resulting actor record in Valkey
kubectl exec -n ate-system valkey-cluster-0 -- \
  valkey-cli HGETALL actors:<atespace>:<actor-uid>
# AteomPodUid: <stale-uid>  ← should be ""
# AteomPodName: ""          ← correctly cleared

Suggested Fix

Add actor.AteomPodUid = "" to releaseActorOnDeadWorker in syncer.go to match
the cleanup performed by crashActor:

func releaseActorOnDeadWorker(...) {
    actor.AteomPodNamespace = ""
    actor.AteomPodName = ""
    actor.AteomPodIp = ""
    actor.AteomPodUid = ""  // ADD THIS
    actor.InProgressSnapshot = nil
    actor.WorkerPoolName = ""
}

Add a test that crashes an actor via the syncer path and verifies all pod-related
fields are cleared (matching the crashActor path).

Activity

  1. added a commit that references this issue on Jul 30, 2026
    b76bd4d
  2. changed the title [-]releaseActorOnDeadWorker does not clear AteomPodUid — diverges from crashActor cleanup[/-] [+][P3] releaseActorOnDeadWorker does not clear AteomPodUid — diverges from crashActor cleanup[/+] on Jul 30, 2026
  3. added a commit that references this issue on Jul 30, 2026
    e3fe79d
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions