83 lines
3.3 KiB
Markdown
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)
|