Implement Soft Delete and Graceful Deletion for Projects and Resource Groups
- Dominant language
- Python
- Stars
- 670
- Forks
- 183
- Avg merge
- 17h 7m
- Merged PRs (30d)
- 358
Description
## Summary
Implement a comprehensive soft delete mechanism for Projects (GroupRow) and Resource Groups (ScalingGroupRow) to ease deletion of objects that have many foreign key references.
## Background
Projects and resource groups have many incoming FK references from `sessions`, `kernels`, `vfolders`, `endpoints`, `routings`, etc., preventing them from being deleted easily. Currently, deletion fails with cryptic database constraint errors.
## Goals
1. **Improved Error Messages**: Provide human-friendly error messages explaining why deletion is blocked
1. **Soft Delete State Management**: Introduce status enum (ACTIVE, DELETED) instead of hard delete
1. **Cascade Soft Delete**: Allow force deletion that marks related inactive entities as deleted
## Design Direction
- Don't remove database records unless they reach the history retention limit
- Put deleted objects in "DELETED" state to filter from normal API queries
- Ensure audit log recording for all destructive actions
## Related Issues
- BA-3287: Original idea issue
- BA-3290: Human-friendly constraint violation error messages
- BA-3292: Replace references with ghost entity
- BA-3293: Remove most FK constraints
## Affected Components
- `src/ai/backend/manager/models/group/`
- `src/ai/backend/manager/models/scaling_group/`
- `src/ai/backend/manager/repositories/group/`
- `src/ai/backend/manager/repositories/scaling_group/`
- `src/ai/backend/manager/services/group/`
- `src/ai/backend/manager/services/scaling_group/`
JIRA Issue: BA-3709
Contributor guide
Assessment
This issue has not been assessed yet.