Files
coolify/backlog/tasks/task-00002 - Fix-Docker-cleanup-irregular-scheduling-in-cloud-environment.md

83 lines
3.3 KiB
Markdown

---
id: task-00002
title: Fix Docker cleanup irregular scheduling in cloud environment
status: Done
assignee:
- '@claude'
created_date: '2025-08-26 12:17'
updated_date: '2025-08-26 12:26'
labels:
- backend
- performance
- cloud
dependencies: []
priority: high
---
## Description
Docker cleanup jobs are running at irregular intervals instead of hourly as configured (0 * * * *) in the cloud environment with 2 Horizon workers and thousands of servers. The issue stems from the ServerManagerJob processing servers sequentially with a frozen execution time, causing timing mismatches when evaluating cron expressions for large server counts.
## Acceptance Criteria
<!-- AC:BEGIN -->
- [x] #1 Docker cleanup runs consistently at the configured hourly intervals
- [x] #2 All eligible servers receive cleanup jobs when due
- [x] #3 Solution handles thousands of servers efficiently
- [x] #4 Maintains backwards compatibility with existing settings
- [x] #5 Cloud subscription checks are properly enforced
<!-- AC:END -->
## Implementation Plan
1. Add processDockerCleanups() method to ScheduledJobManager
- Implement method to fetch all eligible servers
- Apply frozen execution time for consistent cron evaluation
- Check server functionality and cloud subscription status
- Dispatch DockerCleanupJob for servers where cleanup is due
2. Implement helper methods in ScheduledJobManager
- getServersForCleanup(): Fetch servers with proper cloud/self-hosted filtering
- shouldProcessDockerCleanup(): Validate server eligibility
- Reuse existing shouldRunNow() method with frozen execution time
3. Remove Docker cleanup logic from ServerManagerJob
- Delete lines 136-150 that handle Docker cleanup scheduling
- Keep other server management tasks intact
4. Test the implementation
- Verify hourly execution with test servers
- Check timezone handling
- Validate cloud subscription filtering
- Monitor for duplicate job prevention via WithoutOverlapping middleware
5. Deploy strategy
- First deploy updated ScheduledJobManager
- Monitor logs for successful hourly executions
- Once confirmed, remove cleanup from ServerManagerJob
- No database migrations required
## Implementation Notes
Successfully migrated Docker cleanup scheduling from ServerManagerJob to ScheduledJobManager.
**Changes Made:**
1. Added processDockerCleanups() method to ScheduledJobManager that processes all servers with a single frozen execution time
2. Implemented getServersForCleanup() to fetch servers with proper cloud/self-hosted filtering
3. Implemented shouldProcessDockerCleanup() for server eligibility validation
4. Removed Docker cleanup logic from ServerManagerJob (lines 136-150)
**Key Improvements:**
- All servers now evaluated against the same timestamp, ensuring consistent hourly execution
- Proper cloud subscription checks maintained
- Backwards compatible - no database migrations or settings changes required
- Follows the same proven pattern used for database backups
**Files Modified:**
- app/Jobs/ScheduledJobManager.php: Added Docker cleanup processing
- app/Jobs/ServerManagerJob.php: Removed Docker cleanup logic
**Testing:**
- Syntax validation passed
- Code formatting verified with Laravel Pint
- PHPStan analysis completed (existing warnings unrelated to changes)