7. Sergio Corato – odoo-italia.org - Firenze 14 e 15 novembre 2019 7
1. Migrazione dati Odoo con OpenUpgrade Autore: Sergio Corato Quando: giovedì 14 novembre 2019 15.00 – 15.30 Cosa: Migrare il database di Odoo Rif.: info@efatto.it
16. Sergio Corato – odoo-italia.org - Firenze 14 e 15 novembre 2019 16 Riferimenti Autore: Sergio Corato Rif.: info@efatto.it Git: https://github.com/sergiocorato Web: https://efatto.it
2. Sergio Corato – odoo-italia.org - Firenze 14 e 15 novembre 2019 2 Perché? Perché fare lo sforzo di usare una versione diversa quando quella attuale ha già tutto? Perché il nostro settore è fortemente dinamico, il ‘tutto’ di oggi non lo è più domani. La migrazione dei moduli comporta uno sforzo notevole, che viene però distribuito in tutta l’OCA. Lavorando in maniera condivisa, si massimizza la distribuzione dello sforzo.
5. Sergio Corato – odoo-italia.org - Firenze 14 e 15 novembre 2019 5 Help Le istruzioni per l’utilizzo sono tutte qui: ● https://doc.therp.nl/openupgrade/ Sono utilissime e precise, chiaramente molto tecniche. Altre informazioni utili per l’utilizzo si trovano nel git (issue, PR) in cui è possibile verificare quali problemi hanno riscontrato altri, o quali miglioramenti hanno proposto.
15. Sergio Corato – odoo-italia.org - Firenze 14 e 15 novembre 2019 15 Openupgrader (proposal) ● Prevede la migrazione da una versione alla successiva con 1 singola chiamata. ● In seguito si potrà chiamare la funzione per migrare diverse versioni di seguito. ● Verrà resa disponibile su github a seguito di una ‘pulizia’ da funzioni personalizzate.
14. Sergio Corato – odoo-italia.org - Firenze 14 e 15 novembre 2019 14 Openupgrader (proposal) ● Dà la possibilità di inserire una serie di fix in base agli errori rilevati nella migrazione (che non dovrebbero esserci se usiamo solo i moduli ufficiali... ;) ● È utile soprattutto per gestire migrazioni di installazioni complesse o pesantemente personalizzate
13. Sergio Corato – odoo-italia.org - Firenze 14 e 15 novembre 2019 13 Openupgrader (proposal) ● Funzione di migrazione ‘Automatizzata’ ● È fondamentalmente ‘stupida’: crea dei virtualenv al volo per ogni versione necessaria con i repo indicati in un file .yml e fa la procedura richiesta per la migrazione ● Non aggiunge nulla di nuovo, si può fare tutto banalmente lo stesso come dice Pedro (con doodba) ● Ripristina il database e il filestore da due file di backup: database.gz e filestore.tar , creati come dalle istruzioni che saranno indicate
9. Sergio Corato – odoo-italia.org - Firenze 14 e 15 novembre 2019 9 Debugging ● Mancano moduli migrati ? ● Non c’è una indicazione sulle modifiche fatte ai moduli o ai modelli nel file ‘apriori.py’ ? ● Ci sono customizzazioni alla struttura dati che necessitano di migrazione? ● Ci sono automazioni nella migrazione dati che vorremmo avere e che non sono previste?
4. Sergio Corato – odoo-italia.org - Firenze 14 e 15 novembre 2019 4 Fondamentali L’ upgrade del database di Odoo consiste in breve nel: ● Partire dall’installazione alla versione successiva, sostituendo nel parametro di avvio il repo Odoo in uso con quello di OpenUpgrade ● Modificare il parametro di avvio indicando il database da migrare (se in altro cluster indicare la porta corretta del database) ● Avviare Odoo con l’opzione `update all` ● Debuggare per capire cosa è andato storto :)
8. Sergio Corato – odoo-italia.org - Firenze 14 e 15 novembre 2019 8 Consigli Forkare OpenUpgrade: ● Per aggiungere moduli custom sul file ‘apriori.py’ ● Per aggiungere eventuali logiche di migrazione custom ● n.b.: fare comunque PR delle possibili modifiche condivisibili I moduli NON migrati vanno disinstallati prima della migrazione (preferibilmente, dei moduli semplici potrebbero non influire)
3. Sergio Corato – odoo-italia.org - Firenze 14 e 15 novembre 2019 3 Cos’è? https://github.com/OCA/OpenUpgrade.git è una versione di Odoo con: ● La funzione per la migrazione all’interno di ogni modulo in cui si rende necessaria ● Un file ‘apriori.py’ in cui vengono definiti ● i moduli ch e sono stati rinominati, splittati, unificati ● I modelli c he sono stati rinominati ● Una serie di funzioni ‘helper’ (es. per verificare la necessità di una funzione di migrazione nei moduli)
6. Sergio Corato – odoo-italia.org - Firenze 14 e 15 novembre 2019 6 Prerequisiti ● I moduli in uso devono essere migrati alla versione obiettivo, altrimenti si perderanno le relative funzionalità (moduli che fanno solo modifiche di viste non contano) ● Alcuni moduli potrebbero essere stati integrati e non più necessari, altri splittati in diversi moduli ● I moduli che hanno subito variazioni di campi devono avere la funzione di migrazione, in ogni caso verificare con la procedura descritta qui https://doc.therp.nl/openupgrade/analyse.html che riporto:
12. Sergio Corato – odoo-italia.org - Firenze 14 e 15 novembre 2019 12 Esempio di errore bloccante 2019 - 11 - 12 10 : 46 : 16 , 126 14805 ERROR database openerp.sql_db: bad query: ALTER TABLE "hr_evaluation_interview" ADD FOREIGN KEY ( "request_id" ) REFERENCES "survey_user_input" ON DELETE cascade Traceback (most recent call last): File "/home/sergio/tmp_venv/openupgrade8.0/odoo/openerp/sql_d b.py" , line 247 , in execute res = self._obj.execute(query, params) IntegrityError: insert or update on table "hr_evaluation_interview" violates foreign key constraint "hr_evaluation_interview_request_id_fkey" DETAIL: Key (request_id)=( 1 ) is not present in table "survey_user_input" .
11. Sergio Corato – odoo-italia.org - Firenze 14 e 15 novembre 2019 11 Altro esempio di errore non bloccante 2019 - 11 - 12 15 : 08 : 37 , 381 21993 WARNING database openerp.models: WARNING: unable to set column view_location_id of table stock_warehouse not null ! Try to re-run: openerp-server --update=module If it doesn 't work, update records and execute manually: ALTER TABLE stock_warehouse ALTER COLUMN view_location_id SET NOT NULL Traceback (most recent call last): File "/home/sergio/tmp_venv/openupgrade8.0/odoo/openerp/models.py" , line 2708 , in _auto_init cr.execute( 'ALTER TABLE "%s" ALTER COLUMN "%s" SET NOT NULL' % (self._table, k)) File "/home/sergio/tmp_venv/openupgrade8.0/odoo/openerp/sql_db.py" , line 171 , in wrapper return f(self, *args, **kwargs) File "/home/sergio/tmp_venv/openupgrade8.0/odoo/openerp/sql_db.py" , line 247 , in execute res = self._obj.execute(query, params) IntegrityError: column "view_location_id" contains null values
10. Sergio Corato – odoo-italia.org - Firenze 14 e 15 novembre 2019 10 Esempio errore non bloccante 2019 - 11 - 12 15 : 00 : 59 , 938 21993 ERROR database openerp.sql_db: bad query: ALTER TABLE "hr_job" ADD CONSTRAINT "hr_job_hired_employee_check" CHECK ( no_of_hired_employee <= no_of_recruitment ) Traceback (most recent call last): File "/home/sergio/tmp_venv/openupgrade8.0/odoo/openerp/sql_db.py" , line 247 , in execute res = self._obj.execute(query, params) IntegrityError: check constraint "hr_job_hired_employee_check" is violated by some row 2019 - 11 - 12 15 : 00 : 59 , 939 21993 WARNING database openerp.models.schema: Table 'hr_job' : unable to add 'CHECK ( no_of_hired_employee <= no_of_recruitment )' constraint ! If you want to have it, you should update the records and execute manually: ALTER TABLE "hr_job" ADD CONSTRAINT "hr_job_hired_employee_check" CHECK ( no_of_hired_employee <= no_of_recruitment )