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)
 | 
