Migration
Big Bang / One shot
- Tous les problèmes remontent en même temps
 - Les sources d’erreurs sont très dures à investiguer
 - Pas de retour possible en arrière, car perte des modifications effectuées depuis le moment où la bascule a été lancée
 - On risque de reproduire l’existant sans faire mieux à cause de la course imposée par le Time-to-Market (TTM)
 
Migration progressive

web/app.php
try {
    // Try to handle the request from within Symfony
    $response = $kernel->handle($sfRequest, HttpKernelInterface::MASTER_REQUEST, false);
} catch (NotFoundHttpException $e) {
    // handle legacy
    $legacyHandler = $kernel->getContainer()->get('legacy.handler');
    if (!$response = $legacyHandler->parse($sfRequest)) {
        $legacyHandler->bootLegacy();
        $logger = $kernel->getContainer()->get('logger');
        $kernel->getContainer()->get('session')->save();
        try {
            require_once $legacyHandler->getLegacyPath();
            $response = $legacyHandler->handleResponse();
        } catch (\Exception $e) {
            // In case we have an error in the legacy, we want to be able to
            // have a nice error page instead of a blank page.
            $response = $legacyHandler->handleException($e, $sfRequest);
        }
    }
}
theodo_evolution_legacy_wrapper:
    root_dir: '%kernel.root_dir%/../legacy'
    kernel:
        id: theodo_evolution_legacy_wrapper.legacy_kernel.symfony14
        options:
            application: frontend
            environment: '%kernel.environment%'
            debug:       '%kernel.debug%'
Points vigilence
- die/exit dans le code Legacy
 - Usage de variable globales dans le code Legacy
 - Contenu session -> TheodoEvolutionSessionBundle
 - Vie de la session
 - Authentification / Authorisation
 - Transactions SQL
 - Response headers du legacy
 
Sens de la migration
- Déplacement du code legacy vers nouvelle version
 - Branchement du legacy sur la nouvelle version
 - Le code legacy peut appeler la nouvelle version mais jamais l'inverse
 
Migration des données
- Implementer si besoin une double écriture (Listener sur nouvelle APP génère des données dans la base légacy)
 - Commencer la migration par les entités "satelite"
 - Commencer par migrer les producteurs de donnés avant les consommateurs
 
Tips
- Inject le logger dans le legacy
	
- Logger toutes les requêtes SQL
 
 - Inject le container dans le legacy
 - Reverse engineering Doctrine
	
- Attentions au tinyInt => bool
 
 
deck
By Jérémy DERUSSÉ
deck
- 1,166