SlideShare une entreprise Scribd logo
1  sur  29
Télécharger pour lire hors ligne
Game of upgrades to DXP
Episode 1:
Migration des données
Les montagnes de Go et
les étangs d’erreurs
Sommaire
• Qui nous sommes?
• On va migrer vers DXP ou pas?
• Quelle est notre stratégie de migration?
• Migration des données
– Volumétrie
– Difficultés
– Optimisations
– Astuces
Quang Tu LE
Consultant Technique indépendant
• Technologies Java/Web depuis 2000
• 11 ans d’expériences sur la technologie Liferay
– Depuis la version 4.2.2 (2006)
@qtle linkedin.com/in/quangtule
Nicolas GRUE
Consultant Technique
• Technologies du Web depuis 1999
• 11 ans d’expériences sur la technologie Liferay
– Depuis la version 4.2.1 (2006)
• GFI Informatique, partenaire Gold depuis 2009
On va migrer vers DXP ou pas?
OUI
• Vouloir utiliser
fonctionnalités de Liferay
DXP
• Prêt pour intégrer des
nouvelles fonctionnalité de
DXP dans le futur
• Approche microservices
• Support éditeur étendu (vs
support limité)
NON
• Le projet est stable, pas ou
peu d ’évolution
• Peu d’utilisateurs, peu de
valeur ajoutée
• Le projet va disparaître dans
les 2 ans (ROI hasardeux)
Upgrade Liferay DXP
Upgrade Infrastructure
Upgrade data
Upgrade code
Upgrade team
Gap Analysis
Stratégie
Upgrade infrastructure
DXP compatibility matrix
• Explication de texte :
– Certifié = Le support Liferay dispose d’un environnement de référence et a validé la
plateforme logicielle
– Supporté = éligible au support Liferay
• Serveur d’application
– Java 8 obligatoire.
• Tomcat 8 est la solution la plus testée, la mieux maintenue, etc.
– Mais dans tous les cas, il faut en priorité cibler un serveur d’application certifié
(sinon, c’est le risque d’essuyer les plâtres d’un déploiement peu courant).
• OS
– RHEL/CentOS 6 est supporté, certifié en v7. Le couplage étant faible, on peut rester
en 6 (et laisser la porte ouverte à une mise à jour OS dans le futur)
• Navigateurs
– Attention, le support d’IE 10 et 9 est « limité » (et concernant IE9, c’est un
euphémisme !).
 Sauvegarder!
 Exécuter l’upgrade tool.
 Noter des erreurs.
 Restaurer!
 Corriger des erreurs.
 Exécuter encore et encore!
 Livrer un PTI final
Un script sql de correction.
Une procédure de lancement.
Upgrade database
Notre base de donnés
 Oracle 11g
 ~100Go de donnés
 ~256Go de fichiers dans data
Notre base de donnés
 IMPORT DUMP PP BEFORE UPGRADE:
 . . imported "INZ6"."JOURNALARTICLE" 24.59 GB 987908 rows
 . . imported "INZ6"."KALEOLOG" 705.1 MB 234071 rows
 . . imported "INZ6"."BUREAU_NOTIFICATION" 746.5 MB 2502617 rows
 . . imported "INZ6"."WIKIPAGE" 701.3 MB 79357 rows
 . . imported "INZ6"."EXPANDOVALUE" 619.0 MB 11767600 rows
 . . imported "INZ6"."STATISTIQUES_INDICATEUR" 598.0 MB 14287066 rows
 . . imported "INZ6"."PORTLETPREFERENCES" 369.8 MB 293297 rows
 . . imported "INZ6"."ASSETENTRY" 420.9 MB 1980575 rows
 . . imported "INZ6"."DDMCONTENT" 306.1 MB 146237 rows
 . . imported "INZ6"."RESOURCEPERMISSION" 384.4 MB 4404278 rows
 . . imported "INZ6"."KALEOTASKINSTANCETOKEN" 209.9 MB 27427 rows
 . . imported "INZ6"."SOCIALACTIVITY" 126.1 MB 1894990 rows
Pre-upgrade
• Nettoyage
– Données qui ne sont plus utilisées
– Version intermédiaire
– Données orphelines
• NormalizeDuplicateFields
– https://dev.liferay.com/fr/discover/deployment/-
/knowledge_base/6-2/upgrading-liferay#find-and-
remove-duplicate-field-names
– Optimisation
Préparation
• Config pour Document and Media
– portal-ext.properties
• dl.store.impl=com.liferay.portal.store.file.s
ystem.AdvancedFileSystemStore
– $liferay.home/osgi/config/com.liferay.portal.store.file.system.co
nfiguration.AdvancedFileSystemStoreConfiguration.cfg
• rootDir=chemin_vers_data
• Désactivation index
– $liferay.home/osgi/configcom.liferay.portal.search.configuration
.IndexStatusManagerConfiguration.cfg
• indexReadOnly=true
Exécution
• java -jar com.liferay.portal.tools.db.upgrade.client.jar
Params par défaut:
-Dfile.encoding=UTF8
-Duser.country=US
-Duser.language=en
-Duser.timezone=GMT -Xmx2048m
• java -jar com.liferay.portal.tools.db.upgrade.client.jar
-j "Vos paramètres"
• Nos paramètres actuels:
"-Dfile.encoding=UTF8 -Duser.country=FR
-Duser.language=fr -Xmx8192m
-Djava.io.tmpdir=../../tomcat-8.0.32/temp/"
Difficultés
• Temps d’exécution (~10h et terminé par 1
erreur)
• Temps de restauration (~ 2h )
• Erreurs spécifique Oracle
Erreur de validation de champ
Caused by: com.liferay.dynamic.data.mapping.exception.TemplateNameException: Name is null
at
com.liferay.dynamic.data.mapping.service.impl.DDMTemplateLocalServiceImpl.validateName(DDMTemplateLocalServiceImpl.java:16
81)
at com.liferay.dynamic.data.mapping.service.impl.DDMTemplateLocalServiceImpl.validate(DDMTemplateLocalServiceImpl.java:1668)
at com.liferay.dynamic.data.mapping.service.impl.DDMTemplateLocalServiceImpl.validate(DDMTemplateLocalServiceImpl.java:1619)
at com.liferay.dynamic.data.mapping.service.impl.DDMTemplateLocalServiceImpl.validate(DDMTemplateLocalServiceImpl.java:1608)
at com.liferay.dynamic.data.mapping.service.impl.DDMTemplateLocalServiceImpl.addTemplate(DDMTemplateLocalServiceImpl.java:206)
at com.liferay.dynamic.data.mapping.service.impl.DDMTemplateLocalServiceImpl.addTemplate(DDMTemplateLocalServiceImpl.java:130)
...
at com.sun.proxy.$Proxy392.addTemplate(Unknown Source)
at
com.liferay.portal.workflow.kaleo.forms.internal.upgrade.v1_1_0.UpgradeKaleoProcess.getNewDDMTemplateId(UpgradeKaleoProcess.java:1
72)
at com.liferay.portal.workflow.kaleo.forms.internal.upgrade.v1_1_0.UpgradeKaleoProcess.updateKaleoProcess(UpgradeKaleoProcess.java:272)
at com.liferay.portal.workflow.kaleo.forms.internal.upgrade.v1_1_0.UpgradeKaleoProcess.doUpgrade(UpgradeKaleoProcess.java:81)
at com.liferay.portal.kernel.upgrade.UpgradeProcess.upgrade(UpgradeProcess.java:90)
... 84 more
Explication
• Champs non traduits => localisés en DXP.
• Locale par défaut
– system-ext.properties
• user.country=FR
• user.language=fr
– Params de upgrade tool
java -jar com.liferay.portal.tools.db.upgrade.client.jar
-j "-Dfile.encoding=UTF8 -Duser.country=FR -Duser.language=fr "
Erreurs non blocantes, temps perdu
2018-01-26 13:55:38.575 WARN [main][UpgradeProcess:437] Fallback to recreating the table
java.sql.SQLException: ORA-22858: invalid alteration of datatype_ [Sanitized]
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:440)
...
at com.liferay.portal.dao.db.BaseDB.runSQL(BaseDB.java:264)
at com.liferay.portal.kernel.dao.db.BaseDBProcess.runSQL(BaseDBProcess.java:66)
at com.liferay.portal.kernel.upgrade.UpgradeProcess.alter(UpgradeProcess.java:409)
at com.liferay.portal.upgrade.v7_0_0.UpgradeExpando.doUpgrade(UpgradeExpando.java:32)
at com.liferay.portal.kernel.upgrade.UpgradeProcess.upgrade(UpgradeProcess.java:90)
at com.liferay.portal.kernel.upgrade.UpgradeProcess.upgrade(UpgradeProcess.java:119)
at com.liferay.portal.upgrade.UpgradeProcess_7_0_0.doUpgrade(UpgradeProcess_7_0_0.java:82)
at com.liferay.portal.kernel.upgrade.UpgradeProcess.upgrade(UpgradeProcess.java:90)
...
at com.liferay.portal.tools.db.upgrade.client.DBUpgraderLauncher.main(DBUpgraderLauncher.java:55)
2018-01-26 13:55:38.577 INFO [main][LoggingTimer:72] Starting
com.liferay.portal.kernel.upgrade.UpgradeProcess#upgradeTable#ExpandoValue
2018-01-26 13:55:38.578 INFO [main][Table:168] Starting backup of ExpandoValue to /tmp/temp-db-ExpandoValue-
1573805557879341259.tmp
2018-01-26 14:09:52.921 INFO [main][Table:204] Finished backup of ExpandoValue to /tmp/temp-db-ExpandoValue-
1573805557879341259.tmp in 854343 ms
2018-01-26 18:39:26.811 INFO [main][LoggingTimer:38] Completed
com.liferay.portal.kernel.upgrade.UpgradeProcess#upgradeTable#ExpandoValue in 17028234 ms (4h43m)
Optimisation
• Il est possible de surcharger les
UpgradeProccess
– Core Liferay: Portal-ext.properties
– Modules: Override lpkg de Liferay
• https://dev.liferay.com/fr/develop/tutorials/-
/knowledge_base/7-0/overriding-lpkg-files
• Ne sert qu’à l’upgrade des données
– Ne pas oublier de désintaller les surcharges
ensuite…
Optimisation / Core de Liferay
• Portal-ext.properties ou portal-upgrade-
ext.properties
upgrade.processes.master=
com.liferay.portal.upgrade.UpgradeProcess_6_0_1
2_to_6_1_0,
com.liferay.portal.upgrade.UpgradeProcess_6_1_1
,
com.company.liferay.portal.upgrade.CustomUpgrad
eProcess_6_2_0,
com.company.liferay.portal.upgrade.CustomUpgrad
eProcess_7_0_0,
com.liferay.portal.upgrade.UpgradeProcess_7_0_1
Optimisation / Modules
• Il est prévu de pouvoir faire un override partiel des lpkg
de Liferay
• https://dev.liferay.com/fr/develop/tutorials/-/knowledge_base/7-
0/overriding-lpkg-files
• Concrètement, il suffit de reconstruire un .jar présent
dans le lpkg,
• Le déposer dans /override
• et Liferay va le substituer
• Attention à bien retirer l’override après migration: ça
ne doit servir que pour du « one-shot »,
• pour résoudre un problème ponctuel, ajouter des logs, etc.
Optimisations: principe
• Une fois que l’on sait quel problème on va
rencontrer, on peut l’anticiper dans le code
que l’on surcharge. Exemple dans notre cas:
• Catch SQLException contenant le message « ORA-
22858 » => bascule sur une autre implémentation
adaptée à Oracle
• équivalent alter column type CLOB: ajout d’une colonne
en copie puis drop de l’originale
• Plus rapide que le backup de toute la table;
• permet aussi d’implémenter les préconisations des DBA
(storage spécifique des CLOB…)
Resultat
2018-02-05 19:40:21.997 INFO [main][CustomUpgradeProcessUtil:56] exec SQL: ALTER TABLE ExpandoColumn ADD (defaultData_clob CLOB null) LOB
(defaultData_clob) STORE AS SECUREFILE (TABLESPACE INTRANET_RECETTE ENABLE STORAGE IN ROW CHUNK 8192 NOCACHE LOGGING
STORAGE (INITIAL 104 K NEXT 1 M MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 BUFFER_POOL DEFAULT FLASH_CACHE
DEFAULT CELL_FLASH_CACHE DEFAULT))
2018-02-05 19:40:22.011 INFO [main][CustomUpgradeProcessUtil:58] exec SQL: success
2018-02-05 19:40:22.012 INFO [main][CustomUpgradeProcessUtil:56] exec SQL: UPDATE ExpandoColumn SET defaultData_clob = defaultData
2018-02-05 19:40:22.023 INFO [main][CustomUpgradeProcessUtil:58] exec SQL: success
2018-02-05 19:40:22.024 INFO [main][CustomUpgradeProcessUtil:56] exec SQL: ALTER TABLE ExpandoColumn DROP COLUMN defaultData
2018-02-05 19:40:22.053 INFO [main][CustomUpgradeProcessUtil:58] exec SQL: success
2018-02-05 19:40:22.054 INFO [main][CustomUpgradeProcessUtil:56] exec SQL: ALTER TABLE ExpandoColumn RENAME COLUMN defaultData_clob TO
defaultData
2018-02-05 19:40:22.064 INFO [main][CustomUpgradeProcessUtil:58] exec SQL: success
2018-02-05 19:40:22.065 INFO [main][CustomUpgradeProcessUtil:56] exec SQL: ALTER TABLE ExpandoValue ADD (data__clob CLOB null) LOB (data__clob)
STORE AS SECUREFILE (TABLESPACE INTRANET_RECETTE ENABLE STORAGE IN ROW CHUNK 8192 NOCACHE LOGGING STORAGE (INITIAL 104 K
NEXT 1 M MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT))
2018-02-05 19:40:22.078 INFO [main][CustomUpgradeProcessUtil:58] exec SQL: success
2018-02-05 19:40:22.078 INFO [main][CustomUpgradeProcessUtil:56] exec SQL: UPDATE ExpandoValue SET data__clob = data_
2018-02-05 19:45:00.264 INFO [main][CustomUpgradeProcessUtil:58] exec SQL: success
2018-02-05 19:45:00.266 INFO [main][CustomUpgradeProcessUtil:56] exec SQL: ALTER TABLE ExpandoValue DROP COLUMN data_
2018-02-05 19:46:49.341 INFO [main][CustomUpgradeProcessUtil:58] exec SQL: success
2018-02-05 19:46:49.342 INFO [main][CustomUpgradeProcessUtil:56] exec SQL: ALTER TABLE ExpandoValue RENAME COLUMN data__clob TO data_
2018-02-05 19:46:49.355 INFO [main][CustomUpgradeProcessUtil:58] exec SQL: success
2018-02-05 19:46:49.356 INFO [main][UpgradeProcess:99] Completed upgrade process
com.company.liferay.portal.upgrade.v7_0_0.CustomUpgradeExpando in 387361ms (6m27s)
Erreurs OutOfMemory
• com.liferay.journal.verify.JournalServiceVerifyPro
cess#verifyTree
• java.lang.OutOfMemoryError: GC overhead limit
exceeded
– avec –Xmx=4g
– 15h45mins au total
– 20mins sur verifyTree
• java.lang.OutOfMemoryError: Java heap space
– Avec –Xmx=6g
– 20h au total
– 4h sur verifyTree
Optimisation
• Augmenter la valeur -Xmx
– Test en cours avec 8G
• Diminuer le property
model.tree.rebuild.query.results.batch.size
– 10000 par défaut
– Test en cours avec 5000
Notre avis
• Outil séparé
– Plus pratique
– Config séparée
• Dommage que UpgradeProcess (Core) n’a pas
été conçu pour être repris après incident
• Pour l’upgrade des modules, en revanche,
c’est possible avec Gogo Shell
– Sauf pour les modules « à moitié upgradés » 
Comment réussir
• Code source de Liferay
• Logs
– META-INF/portal-log4j-ext.xml
• Gogo Command
– https://dev.liferay.com/fr/develop/reference/-
/knowledge_base/7-0/gogo-shell-command
• Avoir un bon serveur avec les volumétries
suffisants
• Support de DBA
Merci
Q&A

Contenu connexe

Tendances

Mise à jour d’un système Linux embarqué « Over The Air »
Mise à jour d’un système Linux embarqué « Over The Air »Mise à jour d’un système Linux embarqué « Over The Air »
Mise à jour d’un système Linux embarqué « Over The Air »Pierre-jean Texier
 
Déploiement de Silverpeas sur JOnAS
Déploiement de Silverpeas sur JOnASDéploiement de Silverpeas sur JOnAS
Déploiement de Silverpeas sur JOnASAlexis Hassler
 
T3UNIFR12 - Réussir sa mise à jour de typo3
T3UNIFR12 - Réussir sa mise à jour de typo3T3UNIFR12 - Réussir sa mise à jour de typo3
T3UNIFR12 - Réussir sa mise à jour de typo3sitengo
 
Installation et configuration d'openbravo
Installation et configuration d'openbravoInstallation et configuration d'openbravo
Installation et configuration d'openbravoSoumia Brabije
 
Rapport openembedded
Rapport openembeddedRapport openembedded
Rapport openembeddedAyoub Rouzi
 
Déploiement dans Azure depuis Visual Studio Team Services
Déploiement dans Azure depuis Visual Studio Team ServicesDéploiement dans Azure depuis Visual Studio Team Services
Déploiement dans Azure depuis Visual Studio Team ServicesAdrien Siffermann
 
Intellicore Tech Talk 10 - Apache Web Server Internals
Intellicore Tech Talk 10 - Apache Web Server InternalsIntellicore Tech Talk 10 - Apache Web Server Internals
Intellicore Tech Talk 10 - Apache Web Server InternalsNeil Armstrong
 
Presentation kernel - Kernel Linux - Configuration – Compilation & installation
Presentation kernel - Kernel Linux - Configuration –  Compilation & installationPresentation kernel - Kernel Linux - Configuration –  Compilation & installation
Presentation kernel - Kernel Linux - Configuration – Compilation & installationAyoub Rouzi
 
Rapport systéme embarqué busybox
Rapport systéme embarqué busyboxRapport systéme embarqué busybox
Rapport systéme embarqué busyboxAyoub Rouzi
 
Solution d'OTA
Solution d'OTASolution d'OTA
Solution d'OTASidereo
 
Installation et Configuration ee JDK et de Tomcat
Installation et Configuration ee JDK et de TomcatInstallation et Configuration ee JDK et de Tomcat
Installation et Configuration ee JDK et de TomcatMohamed Ben Bouzid
 
Liferay france symposium 2012 - montée de version d’une instance liferay
Liferay france symposium 2012 - montée de version d’une instance liferayLiferay france symposium 2012 - montée de version d’une instance liferay
Liferay france symposium 2012 - montée de version d’une instance liferaySébastien Le Marchand
 
Et pourquoi pas JEE ?
Et pourquoi pas JEE ?Et pourquoi pas JEE ?
Et pourquoi pas JEE ?PALO IT
 
Mises à jour logicielles en environnement Linux Embarqué, petit guide et tour...
Mises à jour logicielles en environnement Linux Embarqué, petit guide et tour...Mises à jour logicielles en environnement Linux Embarqué, petit guide et tour...
Mises à jour logicielles en environnement Linux Embarqué, petit guide et tour...Pierre-jean Texier
 
JSF2, Primefaces, Primefaces Mobile
JSF2, Primefaces, Primefaces MobileJSF2, Primefaces, Primefaces Mobile
JSF2, Primefaces, Primefaces MobileSylla Mamoudou
 
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)hibnico
 
T2 corrections-qc md
T2 corrections-qc mdT2 corrections-qc md
T2 corrections-qc mdinfcom
 

Tendances (20)

Mise à jour d’un système Linux embarqué « Over The Air »
Mise à jour d’un système Linux embarqué « Over The Air »Mise à jour d’un système Linux embarqué « Over The Air »
Mise à jour d’un système Linux embarqué « Over The Air »
 
Android ORMLite
Android   ORMLiteAndroid   ORMLite
Android ORMLite
 
Déploiement de Silverpeas sur JOnAS
Déploiement de Silverpeas sur JOnASDéploiement de Silverpeas sur JOnAS
Déploiement de Silverpeas sur JOnAS
 
T3UNIFR12 - Réussir sa mise à jour de typo3
T3UNIFR12 - Réussir sa mise à jour de typo3T3UNIFR12 - Réussir sa mise à jour de typo3
T3UNIFR12 - Réussir sa mise à jour de typo3
 
Installation et configuration d'openbravo
Installation et configuration d'openbravoInstallation et configuration d'openbravo
Installation et configuration d'openbravo
 
Rapport openembedded
Rapport openembeddedRapport openembedded
Rapport openembedded
 
Déploiement dans Azure depuis Visual Studio Team Services
Déploiement dans Azure depuis Visual Studio Team ServicesDéploiement dans Azure depuis Visual Studio Team Services
Déploiement dans Azure depuis Visual Studio Team Services
 
Intellicore Tech Talk 10 - Apache Web Server Internals
Intellicore Tech Talk 10 - Apache Web Server InternalsIntellicore Tech Talk 10 - Apache Web Server Internals
Intellicore Tech Talk 10 - Apache Web Server Internals
 
Presentation kernel - Kernel Linux - Configuration – Compilation & installation
Presentation kernel - Kernel Linux - Configuration –  Compilation & installationPresentation kernel - Kernel Linux - Configuration –  Compilation & installation
Presentation kernel - Kernel Linux - Configuration – Compilation & installation
 
Rapport systéme embarqué busybox
Rapport systéme embarqué busyboxRapport systéme embarqué busybox
Rapport systéme embarqué busybox
 
Solution d'OTA
Solution d'OTASolution d'OTA
Solution d'OTA
 
Installation et Configuration ee JDK et de Tomcat
Installation et Configuration ee JDK et de TomcatInstallation et Configuration ee JDK et de Tomcat
Installation et Configuration ee JDK et de Tomcat
 
Liferay france symposium 2012 - montée de version d’une instance liferay
Liferay france symposium 2012 - montée de version d’une instance liferayLiferay france symposium 2012 - montée de version d’une instance liferay
Liferay france symposium 2012 - montée de version d’une instance liferay
 
Et pourquoi pas JEE ?
Et pourquoi pas JEE ?Et pourquoi pas JEE ?
Et pourquoi pas JEE ?
 
Présentation1
Présentation1Présentation1
Présentation1
 
Mises à jour logicielles en environnement Linux Embarqué, petit guide et tour...
Mises à jour logicielles en environnement Linux Embarqué, petit guide et tour...Mises à jour logicielles en environnement Linux Embarqué, petit guide et tour...
Mises à jour logicielles en environnement Linux Embarqué, petit guide et tour...
 
JSF2, Primefaces, Primefaces Mobile
JSF2, Primefaces, Primefaces MobileJSF2, Primefaces, Primefaces Mobile
JSF2, Primefaces, Primefaces Mobile
 
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
 
T2 corrections-qc md
T2 corrections-qc mdT2 corrections-qc md
T2 corrections-qc md
 
APACHE HTTP
APACHE HTTPAPACHE HTTP
APACHE HTTP
 

Similaire à Game of upgrades to liferay dxp - ep1: Migration de données

Cours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdfCours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdfboulonvert
 
Au cœur du Framework .NET 4.5.1
Au cœur du Framework .NET 4.5.1Au cœur du Framework .NET 4.5.1
Au cœur du Framework .NET 4.5.1Microsoft
 
Elasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésElasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésMathieu Elie
 
Comment sauvegarder correctement vos données
Comment sauvegarder correctement vos donnéesComment sauvegarder correctement vos données
Comment sauvegarder correctement vos donnéesEDB
 
Réplication de base de données oracle avec Golden Gate
Réplication de base de données oracle avec Golden GateRéplication de base de données oracle avec Golden Gate
Réplication de base de données oracle avec Golden GateMor THIAM
 
De la DB à la DB-as-a-Service : avantages, limites et étapes pour franchir l...
De la DB à la DB-as-a-Service : avantages, limites et étapes pour franchir l...De la DB à la DB-as-a-Service : avantages, limites et étapes pour franchir l...
De la DB à la DB-as-a-Service : avantages, limites et étapes pour franchir l...Scaleway
 
Au coeur du framework .net 4.5.1
Au coeur du framework .net 4.5.1Au coeur du framework .net 4.5.1
Au coeur du framework .net 4.5.1Cellenza
 
Track 2 - Atelier 3 - Comment Ysance met le cloud au service du digital avec ...
Track 2 - Atelier 3 - Comment Ysance met le cloud au service du digital avec ...Track 2 - Atelier 3 - Comment Ysance met le cloud au service du digital avec ...
Track 2 - Atelier 3 - Comment Ysance met le cloud au service du digital avec ...Amazon Web Services
 
Développer et déployer une application php maintenable
Développer et déployer une application php maintenableDévelopper et déployer une application php maintenable
Développer et déployer une application php maintenableLeTesteur
 
l'Industrialisation (avec PHP) @MMIConnect
l'Industrialisation (avec PHP) @MMIConnectl'Industrialisation (avec PHP) @MMIConnect
l'Industrialisation (avec PHP) @MMIConnectFlorent DENIS
 
Perfug BOF devoxx2017.pptx
Perfug BOF devoxx2017.pptxPerfug BOF devoxx2017.pptx
Perfug BOF devoxx2017.pptxMarc Bojoly
 
resume-theorique-m202-v1-0-6308e0082c37c (3).pdf
resume-theorique-m202-v1-0-6308e0082c37c (3).pdfresume-theorique-m202-v1-0-6308e0082c37c (3).pdf
resume-theorique-m202-v1-0-6308e0082c37c (3).pdfFootballLovers9
 
Conference drupal 8 au Forum PHP 2013 à Paris
Conference drupal 8 au Forum PHP 2013 à ParisConference drupal 8 au Forum PHP 2013 à Paris
Conference drupal 8 au Forum PHP 2013 à ParisChipway
 
Industrialiser la gestion des fichiers multimedia #dcparis13
Industrialiser la gestion des fichiers multimedia #dcparis13Industrialiser la gestion des fichiers multimedia #dcparis13
Industrialiser la gestion des fichiers multimedia #dcparis13Aurelien Navarre
 
Importer 500 millions de données de MySQL vers Neo4j
Importer 500 millions de données de MySQL vers Neo4jImporter 500 millions de données de MySQL vers Neo4j
Importer 500 millions de données de MySQL vers Neo4jGabriel Pillet 🐙
 
Hug france - Administration Hadoop et retour d’expérience BI avec Impala, lim...
Hug france - Administration Hadoop et retour d’expérience BI avec Impala, lim...Hug france - Administration Hadoop et retour d’expérience BI avec Impala, lim...
Hug france - Administration Hadoop et retour d’expérience BI avec Impala, lim...Modern Data Stack France
 
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...XavierPestel
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !VISEO
 

Similaire à Game of upgrades to liferay dxp - ep1: Migration de données (20)

Cours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdfCours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdf
 
Au cœur du Framework .NET 4.5.1
Au cœur du Framework .NET 4.5.1Au cœur du Framework .NET 4.5.1
Au cœur du Framework .NET 4.5.1
 
Elasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésElasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautés
 
Comment sauvegarder correctement vos données
Comment sauvegarder correctement vos donnéesComment sauvegarder correctement vos données
Comment sauvegarder correctement vos données
 
Propostion un Iaas
Propostion un IaasPropostion un Iaas
Propostion un Iaas
 
Réplication de base de données oracle avec Golden Gate
Réplication de base de données oracle avec Golden GateRéplication de base de données oracle avec Golden Gate
Réplication de base de données oracle avec Golden Gate
 
De la DB à la DB-as-a-Service : avantages, limites et étapes pour franchir l...
De la DB à la DB-as-a-Service : avantages, limites et étapes pour franchir l...De la DB à la DB-as-a-Service : avantages, limites et étapes pour franchir l...
De la DB à la DB-as-a-Service : avantages, limites et étapes pour franchir l...
 
Au coeur du framework .net 4.5.1
Au coeur du framework .net 4.5.1Au coeur du framework .net 4.5.1
Au coeur du framework .net 4.5.1
 
Track 2 - Atelier 3 - Comment Ysance met le cloud au service du digital avec ...
Track 2 - Atelier 3 - Comment Ysance met le cloud au service du digital avec ...Track 2 - Atelier 3 - Comment Ysance met le cloud au service du digital avec ...
Track 2 - Atelier 3 - Comment Ysance met le cloud au service du digital avec ...
 
Infrastructure as code drupal
Infrastructure as code drupalInfrastructure as code drupal
Infrastructure as code drupal
 
Développer et déployer une application php maintenable
Développer et déployer une application php maintenableDévelopper et déployer une application php maintenable
Développer et déployer une application php maintenable
 
l'Industrialisation (avec PHP) @MMIConnect
l'Industrialisation (avec PHP) @MMIConnectl'Industrialisation (avec PHP) @MMIConnect
l'Industrialisation (avec PHP) @MMIConnect
 
Perfug BOF devoxx2017.pptx
Perfug BOF devoxx2017.pptxPerfug BOF devoxx2017.pptx
Perfug BOF devoxx2017.pptx
 
resume-theorique-m202-v1-0-6308e0082c37c (3).pdf
resume-theorique-m202-v1-0-6308e0082c37c (3).pdfresume-theorique-m202-v1-0-6308e0082c37c (3).pdf
resume-theorique-m202-v1-0-6308e0082c37c (3).pdf
 
Conference drupal 8 au Forum PHP 2013 à Paris
Conference drupal 8 au Forum PHP 2013 à ParisConference drupal 8 au Forum PHP 2013 à Paris
Conference drupal 8 au Forum PHP 2013 à Paris
 
Industrialiser la gestion des fichiers multimedia #dcparis13
Industrialiser la gestion des fichiers multimedia #dcparis13Industrialiser la gestion des fichiers multimedia #dcparis13
Industrialiser la gestion des fichiers multimedia #dcparis13
 
Importer 500 millions de données de MySQL vers Neo4j
Importer 500 millions de données de MySQL vers Neo4jImporter 500 millions de données de MySQL vers Neo4j
Importer 500 millions de données de MySQL vers Neo4j
 
Hug france - Administration Hadoop et retour d’expérience BI avec Impala, lim...
Hug france - Administration Hadoop et retour d’expérience BI avec Impala, lim...Hug france - Administration Hadoop et retour d’expérience BI avec Impala, lim...
Hug france - Administration Hadoop et retour d’expérience BI avec Impala, lim...
 
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !
 

Game of upgrades to liferay dxp - ep1: Migration de données

  • 2. Episode 1: Migration des données Les montagnes de Go et les étangs d’erreurs
  • 3. Sommaire • Qui nous sommes? • On va migrer vers DXP ou pas? • Quelle est notre stratégie de migration? • Migration des données – Volumétrie – Difficultés – Optimisations – Astuces
  • 4. Quang Tu LE Consultant Technique indépendant • Technologies Java/Web depuis 2000 • 11 ans d’expériences sur la technologie Liferay – Depuis la version 4.2.2 (2006) @qtle linkedin.com/in/quangtule
  • 5. Nicolas GRUE Consultant Technique • Technologies du Web depuis 1999 • 11 ans d’expériences sur la technologie Liferay – Depuis la version 4.2.1 (2006) • GFI Informatique, partenaire Gold depuis 2009
  • 6. On va migrer vers DXP ou pas? OUI • Vouloir utiliser fonctionnalités de Liferay DXP • Prêt pour intégrer des nouvelles fonctionnalité de DXP dans le futur • Approche microservices • Support éditeur étendu (vs support limité) NON • Le projet est stable, pas ou peu d ’évolution • Peu d’utilisateurs, peu de valeur ajoutée • Le projet va disparaître dans les 2 ans (ROI hasardeux)
  • 7. Upgrade Liferay DXP Upgrade Infrastructure Upgrade data Upgrade code Upgrade team Gap Analysis Stratégie
  • 9. DXP compatibility matrix • Explication de texte : – Certifié = Le support Liferay dispose d’un environnement de référence et a validé la plateforme logicielle – Supporté = éligible au support Liferay • Serveur d’application – Java 8 obligatoire. • Tomcat 8 est la solution la plus testée, la mieux maintenue, etc. – Mais dans tous les cas, il faut en priorité cibler un serveur d’application certifié (sinon, c’est le risque d’essuyer les plâtres d’un déploiement peu courant). • OS – RHEL/CentOS 6 est supporté, certifié en v7. Le couplage étant faible, on peut rester en 6 (et laisser la porte ouverte à une mise à jour OS dans le futur) • Navigateurs – Attention, le support d’IE 10 et 9 est « limité » (et concernant IE9, c’est un euphémisme !).
  • 10.  Sauvegarder!  Exécuter l’upgrade tool.  Noter des erreurs.  Restaurer!  Corriger des erreurs.  Exécuter encore et encore!  Livrer un PTI final Un script sql de correction. Une procédure de lancement. Upgrade database
  • 11. Notre base de donnés  Oracle 11g  ~100Go de donnés  ~256Go de fichiers dans data
  • 12. Notre base de donnés  IMPORT DUMP PP BEFORE UPGRADE:  . . imported "INZ6"."JOURNALARTICLE" 24.59 GB 987908 rows  . . imported "INZ6"."KALEOLOG" 705.1 MB 234071 rows  . . imported "INZ6"."BUREAU_NOTIFICATION" 746.5 MB 2502617 rows  . . imported "INZ6"."WIKIPAGE" 701.3 MB 79357 rows  . . imported "INZ6"."EXPANDOVALUE" 619.0 MB 11767600 rows  . . imported "INZ6"."STATISTIQUES_INDICATEUR" 598.0 MB 14287066 rows  . . imported "INZ6"."PORTLETPREFERENCES" 369.8 MB 293297 rows  . . imported "INZ6"."ASSETENTRY" 420.9 MB 1980575 rows  . . imported "INZ6"."DDMCONTENT" 306.1 MB 146237 rows  . . imported "INZ6"."RESOURCEPERMISSION" 384.4 MB 4404278 rows  . . imported "INZ6"."KALEOTASKINSTANCETOKEN" 209.9 MB 27427 rows  . . imported "INZ6"."SOCIALACTIVITY" 126.1 MB 1894990 rows
  • 13. Pre-upgrade • Nettoyage – Données qui ne sont plus utilisées – Version intermédiaire – Données orphelines • NormalizeDuplicateFields – https://dev.liferay.com/fr/discover/deployment/- /knowledge_base/6-2/upgrading-liferay#find-and- remove-duplicate-field-names – Optimisation
  • 14. Préparation • Config pour Document and Media – portal-ext.properties • dl.store.impl=com.liferay.portal.store.file.s ystem.AdvancedFileSystemStore – $liferay.home/osgi/config/com.liferay.portal.store.file.system.co nfiguration.AdvancedFileSystemStoreConfiguration.cfg • rootDir=chemin_vers_data • Désactivation index – $liferay.home/osgi/configcom.liferay.portal.search.configuration .IndexStatusManagerConfiguration.cfg • indexReadOnly=true
  • 15. Exécution • java -jar com.liferay.portal.tools.db.upgrade.client.jar Params par défaut: -Dfile.encoding=UTF8 -Duser.country=US -Duser.language=en -Duser.timezone=GMT -Xmx2048m • java -jar com.liferay.portal.tools.db.upgrade.client.jar -j "Vos paramètres" • Nos paramètres actuels: "-Dfile.encoding=UTF8 -Duser.country=FR -Duser.language=fr -Xmx8192m -Djava.io.tmpdir=../../tomcat-8.0.32/temp/"
  • 16. Difficultés • Temps d’exécution (~10h et terminé par 1 erreur) • Temps de restauration (~ 2h ) • Erreurs spécifique Oracle
  • 17. Erreur de validation de champ Caused by: com.liferay.dynamic.data.mapping.exception.TemplateNameException: Name is null at com.liferay.dynamic.data.mapping.service.impl.DDMTemplateLocalServiceImpl.validateName(DDMTemplateLocalServiceImpl.java:16 81) at com.liferay.dynamic.data.mapping.service.impl.DDMTemplateLocalServiceImpl.validate(DDMTemplateLocalServiceImpl.java:1668) at com.liferay.dynamic.data.mapping.service.impl.DDMTemplateLocalServiceImpl.validate(DDMTemplateLocalServiceImpl.java:1619) at com.liferay.dynamic.data.mapping.service.impl.DDMTemplateLocalServiceImpl.validate(DDMTemplateLocalServiceImpl.java:1608) at com.liferay.dynamic.data.mapping.service.impl.DDMTemplateLocalServiceImpl.addTemplate(DDMTemplateLocalServiceImpl.java:206) at com.liferay.dynamic.data.mapping.service.impl.DDMTemplateLocalServiceImpl.addTemplate(DDMTemplateLocalServiceImpl.java:130) ... at com.sun.proxy.$Proxy392.addTemplate(Unknown Source) at com.liferay.portal.workflow.kaleo.forms.internal.upgrade.v1_1_0.UpgradeKaleoProcess.getNewDDMTemplateId(UpgradeKaleoProcess.java:1 72) at com.liferay.portal.workflow.kaleo.forms.internal.upgrade.v1_1_0.UpgradeKaleoProcess.updateKaleoProcess(UpgradeKaleoProcess.java:272) at com.liferay.portal.workflow.kaleo.forms.internal.upgrade.v1_1_0.UpgradeKaleoProcess.doUpgrade(UpgradeKaleoProcess.java:81) at com.liferay.portal.kernel.upgrade.UpgradeProcess.upgrade(UpgradeProcess.java:90) ... 84 more
  • 18. Explication • Champs non traduits => localisés en DXP. • Locale par défaut – system-ext.properties • user.country=FR • user.language=fr – Params de upgrade tool java -jar com.liferay.portal.tools.db.upgrade.client.jar -j "-Dfile.encoding=UTF8 -Duser.country=FR -Duser.language=fr "
  • 19. Erreurs non blocantes, temps perdu 2018-01-26 13:55:38.575 WARN [main][UpgradeProcess:437] Fallback to recreating the table java.sql.SQLException: ORA-22858: invalid alteration of datatype_ [Sanitized] at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:440) ... at com.liferay.portal.dao.db.BaseDB.runSQL(BaseDB.java:264) at com.liferay.portal.kernel.dao.db.BaseDBProcess.runSQL(BaseDBProcess.java:66) at com.liferay.portal.kernel.upgrade.UpgradeProcess.alter(UpgradeProcess.java:409) at com.liferay.portal.upgrade.v7_0_0.UpgradeExpando.doUpgrade(UpgradeExpando.java:32) at com.liferay.portal.kernel.upgrade.UpgradeProcess.upgrade(UpgradeProcess.java:90) at com.liferay.portal.kernel.upgrade.UpgradeProcess.upgrade(UpgradeProcess.java:119) at com.liferay.portal.upgrade.UpgradeProcess_7_0_0.doUpgrade(UpgradeProcess_7_0_0.java:82) at com.liferay.portal.kernel.upgrade.UpgradeProcess.upgrade(UpgradeProcess.java:90) ... at com.liferay.portal.tools.db.upgrade.client.DBUpgraderLauncher.main(DBUpgraderLauncher.java:55) 2018-01-26 13:55:38.577 INFO [main][LoggingTimer:72] Starting com.liferay.portal.kernel.upgrade.UpgradeProcess#upgradeTable#ExpandoValue 2018-01-26 13:55:38.578 INFO [main][Table:168] Starting backup of ExpandoValue to /tmp/temp-db-ExpandoValue- 1573805557879341259.tmp 2018-01-26 14:09:52.921 INFO [main][Table:204] Finished backup of ExpandoValue to /tmp/temp-db-ExpandoValue- 1573805557879341259.tmp in 854343 ms 2018-01-26 18:39:26.811 INFO [main][LoggingTimer:38] Completed com.liferay.portal.kernel.upgrade.UpgradeProcess#upgradeTable#ExpandoValue in 17028234 ms (4h43m)
  • 20. Optimisation • Il est possible de surcharger les UpgradeProccess – Core Liferay: Portal-ext.properties – Modules: Override lpkg de Liferay • https://dev.liferay.com/fr/develop/tutorials/- /knowledge_base/7-0/overriding-lpkg-files • Ne sert qu’à l’upgrade des données – Ne pas oublier de désintaller les surcharges ensuite…
  • 21. Optimisation / Core de Liferay • Portal-ext.properties ou portal-upgrade- ext.properties upgrade.processes.master= com.liferay.portal.upgrade.UpgradeProcess_6_0_1 2_to_6_1_0, com.liferay.portal.upgrade.UpgradeProcess_6_1_1 , com.company.liferay.portal.upgrade.CustomUpgrad eProcess_6_2_0, com.company.liferay.portal.upgrade.CustomUpgrad eProcess_7_0_0, com.liferay.portal.upgrade.UpgradeProcess_7_0_1
  • 22. Optimisation / Modules • Il est prévu de pouvoir faire un override partiel des lpkg de Liferay • https://dev.liferay.com/fr/develop/tutorials/-/knowledge_base/7- 0/overriding-lpkg-files • Concrètement, il suffit de reconstruire un .jar présent dans le lpkg, • Le déposer dans /override • et Liferay va le substituer • Attention à bien retirer l’override après migration: ça ne doit servir que pour du « one-shot », • pour résoudre un problème ponctuel, ajouter des logs, etc.
  • 23. Optimisations: principe • Une fois que l’on sait quel problème on va rencontrer, on peut l’anticiper dans le code que l’on surcharge. Exemple dans notre cas: • Catch SQLException contenant le message « ORA- 22858 » => bascule sur une autre implémentation adaptée à Oracle • équivalent alter column type CLOB: ajout d’une colonne en copie puis drop de l’originale • Plus rapide que le backup de toute la table; • permet aussi d’implémenter les préconisations des DBA (storage spécifique des CLOB…)
  • 24. Resultat 2018-02-05 19:40:21.997 INFO [main][CustomUpgradeProcessUtil:56] exec SQL: ALTER TABLE ExpandoColumn ADD (defaultData_clob CLOB null) LOB (defaultData_clob) STORE AS SECUREFILE (TABLESPACE INTRANET_RECETTE ENABLE STORAGE IN ROW CHUNK 8192 NOCACHE LOGGING STORAGE (INITIAL 104 K NEXT 1 M MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)) 2018-02-05 19:40:22.011 INFO [main][CustomUpgradeProcessUtil:58] exec SQL: success 2018-02-05 19:40:22.012 INFO [main][CustomUpgradeProcessUtil:56] exec SQL: UPDATE ExpandoColumn SET defaultData_clob = defaultData 2018-02-05 19:40:22.023 INFO [main][CustomUpgradeProcessUtil:58] exec SQL: success 2018-02-05 19:40:22.024 INFO [main][CustomUpgradeProcessUtil:56] exec SQL: ALTER TABLE ExpandoColumn DROP COLUMN defaultData 2018-02-05 19:40:22.053 INFO [main][CustomUpgradeProcessUtil:58] exec SQL: success 2018-02-05 19:40:22.054 INFO [main][CustomUpgradeProcessUtil:56] exec SQL: ALTER TABLE ExpandoColumn RENAME COLUMN defaultData_clob TO defaultData 2018-02-05 19:40:22.064 INFO [main][CustomUpgradeProcessUtil:58] exec SQL: success 2018-02-05 19:40:22.065 INFO [main][CustomUpgradeProcessUtil:56] exec SQL: ALTER TABLE ExpandoValue ADD (data__clob CLOB null) LOB (data__clob) STORE AS SECUREFILE (TABLESPACE INTRANET_RECETTE ENABLE STORAGE IN ROW CHUNK 8192 NOCACHE LOGGING STORAGE (INITIAL 104 K NEXT 1 M MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)) 2018-02-05 19:40:22.078 INFO [main][CustomUpgradeProcessUtil:58] exec SQL: success 2018-02-05 19:40:22.078 INFO [main][CustomUpgradeProcessUtil:56] exec SQL: UPDATE ExpandoValue SET data__clob = data_ 2018-02-05 19:45:00.264 INFO [main][CustomUpgradeProcessUtil:58] exec SQL: success 2018-02-05 19:45:00.266 INFO [main][CustomUpgradeProcessUtil:56] exec SQL: ALTER TABLE ExpandoValue DROP COLUMN data_ 2018-02-05 19:46:49.341 INFO [main][CustomUpgradeProcessUtil:58] exec SQL: success 2018-02-05 19:46:49.342 INFO [main][CustomUpgradeProcessUtil:56] exec SQL: ALTER TABLE ExpandoValue RENAME COLUMN data__clob TO data_ 2018-02-05 19:46:49.355 INFO [main][CustomUpgradeProcessUtil:58] exec SQL: success 2018-02-05 19:46:49.356 INFO [main][UpgradeProcess:99] Completed upgrade process com.company.liferay.portal.upgrade.v7_0_0.CustomUpgradeExpando in 387361ms (6m27s)
  • 25. Erreurs OutOfMemory • com.liferay.journal.verify.JournalServiceVerifyPro cess#verifyTree • java.lang.OutOfMemoryError: GC overhead limit exceeded – avec –Xmx=4g – 15h45mins au total – 20mins sur verifyTree • java.lang.OutOfMemoryError: Java heap space – Avec –Xmx=6g – 20h au total – 4h sur verifyTree
  • 26. Optimisation • Augmenter la valeur -Xmx – Test en cours avec 8G • Diminuer le property model.tree.rebuild.query.results.batch.size – 10000 par défaut – Test en cours avec 5000
  • 27. Notre avis • Outil séparé – Plus pratique – Config séparée • Dommage que UpgradeProcess (Core) n’a pas été conçu pour être repris après incident • Pour l’upgrade des modules, en revanche, c’est possible avec Gogo Shell – Sauf pour les modules « à moitié upgradés » 
  • 28. Comment réussir • Code source de Liferay • Logs – META-INF/portal-log4j-ext.xml • Gogo Command – https://dev.liferay.com/fr/develop/reference/- /knowledge_base/7-0/gogo-shell-command • Avoir un bon serveur avec les volumétries suffisants • Support de DBA