-
Notifications
You must be signed in to change notification settings - Fork 0
1.3b Step | SetupCacheDir
Possiede
<odoo_home>/.cache, così il rollback può rimuoverla. Vive insrc/steps/setup_cache_dir.rs. Nato in R6-hotfix-3 per chiudere la seconda metà di A-R5-3, e con esso un cambio di domanda che vale oltre questo step.
/opt/odoo è l'$HOME dell'utente odoo. Se esiste già, l'installer la marca Preexisting e non la
svuota mai — giustamente: può contenere roba del cliente. Ma dentro quella home girano parecchi
programmi per conto nostro (pip, odoo-bin, il servizio Odoo), e tutti scrivono in $HOME/.cache,
che su Linux è dove le cache vanno a finire.
R6 aveva chiuso il caso più grosso spostando la cache di pip dentro il venv (--cache-dir). Non
bastava. La prima installazione arrivata in fondo in CI — 23 step, Odoo che risponde, rollback
completo — ha trovato di nuovo:
✖ /opt/odoo contiene residui: .cache
Con l'installazione intera girano anche odoo-bin -i base e il servizio: lo scan dei font di
fontconfig, il selfcheck delle versioni di pip (che fino alla 23 ignora --cache-dir e scrive
comunque nella cache utente), e chiunque altro domani.
Il rollback diceva "nessun residuo", e diceva il vero. Nessun
undoera fallito:.cachesemplicemente non apparteneva a nessuno step, quindi non era nel manifesto. Il report è onesto; il buco era a monte.
Inseguire i produttori uno per uno è una battaglia che si perde — sono programmi di terzi e cambiano
comportamento fra versioni. Questo step non chiede chi ha scritto in .cache, ma di chi è:
| Fase | Comportamento |
|---|---|
| snapshot |
<odoo_home>/.cache esiste già? → Preexisting. Altrimenti registra che la creeremo noi |
| run |
Preexisting → no-op. Altrimenti mkdir -p come utente odoo → CreatedByUs
|
| undo |
CreatedByUs → rm -rf. Altro → NO-OP |
Se la creiamo noi è nostra e il rollback la rimuove; se c'era già è del cliente e non si tocca. Il numero di produttori diventa irrilevante — ed è la proprietà che rende il fix definitivo invece di un altro giro di rincorsa.
La creazione avviene come utente odoo e non come root: chi ci scriverà è lui, e una directory di root
lo costringerebbe ad aprirne un'altra da qualche altra parte.
Stessa meccanica di 1.12b SetupDataDir — possedere un ramo dentro la home altrui — ma gate diverso: il filestore contiene dati applicativi, e la sua rimozione è subordinata anche alla proprietà del database. Una cache no: è rigenerabile per definizione, non appartiene a nessun dato, e l'unica domanda che conta è chi ha creato la directory.
I due step condividono i due pezzi delicati, in steps:::
-
highest_missing_level— il primo livello inesistente scendendo dalla home verso il target: la radice di ciò che ilmkdir -pcreerà, e l'unica cosa che l'undo può rimuovere senza toccare roba di altri; -
remove_created_root— ilrm -rfcon la rete sul perimetro: il target arriva dallo snapshot persistito, cioè dal disco, e uno stato corrotto non deve poter diventare una cancellazione altrove. Dev'essere un discendente stretto della home, altrimenti si logga e non si tocca nulla.
Lo step sta presto nella sequenza, subito dopo
1.3 SetupLogDir e prima che qualunque cosa giri come utente odoo. Deve:
altrimenti lo snapshot troverebbe una .cache "preesistente" che preesistente non è.
E poiché gli undo girano al contrario, presto qui significa tardi là: la cache viene rimossa dopo
che il servizio è stato fermato, il venv cancellato e i sorgenti rimossi — cioè dopo che ogni possibile
scrittore ha smesso di scrivere. È l'opposto del compromesso che SetupDataDir deve accettare (il suo
undo gira prima del dropdb, e lì non è evitabile), ed è verificato da un test sulla sequenza
canonica: se qualcuno spostasse questo step più in basso, cade.
-
dry_run: némkdirnérm -rf, solo log. - Test (
tests/setup_cache_dir.rs): proprietà nostra vs del cliente, verdetto che attraversa il disco (senzarehydratela cache resterebbe), perimetro con path ostili, dry-run inerte, e l'ordine nella sequenza. Piùsetup-cache-dirnellaCHAINditests/rehydrate.rs, che verifica l'equivalenza fra undo live e undo reidratato.
Start here
Key concepts
References
For developers
Technical detail — how it works inside
Steps:
- 1.1 PrepareOptRoot
- 1.2 CreateOdooUser
- 1.3 SetupLogDir
- 1.3b SetupCacheDir
- 1.4 AptPackages (delta)
- 1.5 InstallWkhtmltopdf
- 1.6 SetupPostgres
- 1.7 CreateDbRole
- 1.8 CreateDatabase
- 1.9 CloneOdooRepo
- 1.10 CreateVirtualenv
- 1.11 InstallPythonRequirements
- 1.12 GenerateConfig
- 1.12b SetupDataDir
- 1.13 InitializeOdooDatabase
- 1.14 SetupSystemd
- 1.15 Nginx (6 sub-steps)
- 1.16 WriteControlScript + PatchBashrc
Cross-cutting: