Implement StopSessionsLifecycleHandler and ScheduleType.STOP
- Dominant language
- Python
- Stars
- 670
- Forks
- 183
- Avg merge
- 15h 13m
- Merged PRs (30d)
- 368
Description
Create a new sokovan lifecycle handler for processing STOPPING sessions. Follows the TerminateSessionsLifecycleHandler pattern but preserves session metadata.
Handler spec:
- target_statuses: [SessionStatus.STOPPING]
- execute(): send container destroy RPC to agents, set resource_allocations.free_at
- status_transitions.success: Session → STOPPED (via CHECK_STOPPING_PROGRESS)
- status_transitions.expired/give_up: Session → STOPPED (force complete)
- Key difference from terminate: SessionRow is NOT cleaned up, metadata preserved
Registration:
- Add ScheduleType.STOP to ScheduleType enum
- Add LockID.LOCKID_SOKOVAN_TARGET_STOPPING to LockID enum
- Register handler in factory._create_lifecycle_handlers()
Key files:
- NEW: manager/sokovan/scheduler/handlers/lifecycle/stop_sessions.py
- manager/scheduler/types.py (ScheduleType enum)
- manager/defs.py (LockID enum)
- manager/sokovan/scheduler/factory.py (_create_lifecycle_handlers)
- manager/sokovan/scheduler/handlers/__init__.py (export)
- Reference: manager/sokovan/scheduler/handlers/lifecycle/terminate_sessions.py
## Success Criteria
- [ ] StopSessionsLifecycleHandler processes sessions in STOPPING status
- [ ] Container destroy RPC sent to agents for all kernels
- [ ] resource_allocations.free_at is set (resources released)
- [ ] SessionRow is NOT deleted (metadata preserved for resume)
- [ ] Handler registered in factory and discoverable by coordinator
- [ ] pants check passes for affected packages
JIRA Issue: BA-4961
Contributor guide
Assessment
This issue has not been assessed yet.