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,049