Back to Changelog
v1.0.257
Migration system enterprise reliability overhaul: 14 fixes preventing batch migration failures like the Hayri 2026-06-06 incident
Bug Fixes
12- SSH retry pattern expanded with 6 new retryable error patterns (closed connection, session creation failure, handshake errors, i/o timeout, client disconnect, connection lost) and fixed lowercase EOF matching
- Added FileExistsChecked and DirExistsChecked SSH helpers that correctly distinguish SSH errors from genuine file absence — preventing false path-not-found failures during panel source detection
- SSH consecutive failure and reconnect attempt counters now reset after each successful command, preventing counter lock-up on long-running migrations
- Fixed SSH keepAlive data race: pingOnce now uses proper mutex locking, eliminating concurrent write panics on unstable connections
- Migration pipeline source-path detection for all 6 supported panels (Plesk, cPanel, CyberPanel, DirectAdmin, HestiaCP, CloudPanel) now uses SSH-resilient flow with EnsureConnected + DirExistsChecked + reconnect-retry
- Added EnsureConnected gate before every pipeline step execution, preventing ghost-connection failures mid-migration
- MigrationRunner now tracks session state with MarkMigrating/MarkSessionState(Completed|Failed) — sessions are always properly closed even on unexpected errors
- Added TouchActivity + SSH health gate before processing each site in batch migrations, catching stale connections early rather than failing mid-site
- Fixed system_users query using wrong column name (user_id instead of panel_user_id) — post-migration PHP-FPM reload now correctly identifies users to restart
- Fixed ClamAV malware scanner using wrong column names (user_id instead of panel_user_id, username instead of system_username) in system_users query — on-demand scans now work for all migrated users
- All 13 panel detectors now call EnsureConnected at the start of Detect() — eliminates ghost-connection false negatives during source panel type detection
- Session cleanup goroutine now skips sessions with Migrating, Recovering, or DiscoveryInProgress states, preventing premature SSH connection teardown that caused the Hayri 109-site rollback incident