Ré-initialisation des données OSM (reboot)
Le "reboot" consiste à ré-initialiser les données de référence à partir d'une nouvelle extraction OpenStreetMap et à redémarrer la validation et l'intégration à partir de cette date.
C'est utile après une mise à jour de l'application, en particulier si la mise à jour corrige des bugs dans les scripts Python de chargement et d'intégration en base des différences OSM, pour ne pas conserver d'erreurs.
Arrêt des services
sudo systemctl list-units --type=timer --state=active --plain --no-legend 'lbt-*.timer' | awk '{print $1}' | sudo tee "/tmp/active-timers.txt" >/dev/null
while IFS= read -r lbt_timer; do
sudo systemctl stop "$lbt_timer"
done < <(sudo cat "/tmp/active-timers.txt")
while true; do
lbt_running_jobs=$(sudo systemctl list-units --type=service --state=active,activating,deactivating,reloading --plain --no-legend lbt-pipeline.service lbt-integration.service lbt-segmentation.service lbt-cleaning.service lbt-email-digests.service)
if [ -z "$lbt_running_jobs" ]; then
break
fi
printf '%s\n' "$lbt_running_jobs"
sleep 5
done
sudo systemctl stop lbt-web.service
Nettoyage des données et ré-initialisation des paramètres de chargement
Nous vidons les tables osm2pgrouting et osm2pgsql qui seront rechargées à partir du nouveau fichier PBF, puis nous déplaçons dans l'historique les objets encore à valider et vidons les tables de validation. Enfin certains paramètres de l'application sont ré-initialisés.
Se connecter à la base de données de l'application (par exemple "lebontag_production") puis :
BEGIN;
SET LOCAL lock_timeout='5s';
DO $$ BEGIN
IF to_regclass('lebontag.lbt_integration_batch') IS NOT NULL THEN
IF EXISTS(SELECT 1 FROM lebontag.lbt_integration_batch WHERE state IN ('prepared','running','needs_review')) THEN
RAISE EXCEPTION 'Lot actif : terminer sa résolution ou annulation avant tout rechargement de référence.';
END IF;
END IF;
IF to_regclass('lebontag.lbt_email_digest') IS NOT NULL THEN
IF EXISTS(SELECT 1 FROM lebontag.lbt_email_digest WHERE state IN ('preparing','sending','uncertain')) THEN
RAISE EXCEPTION 'Email en cours/incertain : résoudre avant réinitialisation.';
END IF;
END IF;
END $$;
DO $$ BEGIN
IF to_regclass('lebontag.lbt_relation_context') IS NOT NULL THEN TRUNCATE lebontag.lbt_relation_context; END IF;
IF to_regclass('lebontag.lbt_repl_queue') IS NOT NULL THEN TRUNCATE lebontag.lbt_repl_queue; END IF;
IF to_regclass('lebontag.lbt_repl_state') IS NOT NULL THEN
UPDATE lebontag.lbt_repl_state SET last_done_seq=0,updated_at=now() WHERE id=1;
END IF;
IF to_regclass('lebontag.lbt_notification_state') IS NOT NULL THEN DELETE FROM lebontag.lbt_notification_state; END IF;
IF to_regclass('lebontag.lbt_email_digest') IS NOT NULL THEN UPDATE lebontag.lbt_email_digest SET baseline=NULL,prepared_baseline=NULL; END IF;
END $$;
TRUNCATE TABLE osm2pgsql.osm2pgsql_properties;
TRUNCATE TABLE osm2pgsql.osm_users;
TRUNCATE TABLE osm2pgsql.osm_line CASCADE;
TRUNCATE TABLE osm2pgsql.osm_nodes CASCADE;
TRUNCATE TABLE osm2pgsql.osm_point CASCADE;
TRUNCATE TABLE osm2pgsql.osm_polygon CASCADE;
TRUNCATE TABLE osm2pgsql.osm_rels CASCADE;
TRUNCATE TABLE osm2pgsql.osm_roads CASCADE;
TRUNCATE TABLE osm2pgsql.osm_ways CASCADE;
TRUNCATE TABLE osm2pgrouting.pgr_ways_vertices CASCADE;
TRUNCATE TABLE osm2pgrouting.pgr_ways CASCADE;
INSERT INTO lebontag.lbt_osmdiff_history (SELECT * FROM lebontag.lbt_osmdiff) ON CONFLICT (od_id,od_element,od_new_version) DO NOTHING;
TRUNCATE lebontag.lbt_validation,lebontag.lbt_osmdiff_footprint, lebontag.lbt_osmdiff,lebontag.lbt_quality_processed_items;
UPDATE lebontag.lbt_setting SET s_value = '' WHERE s_name = 'osm_diff_nodes_date';
UPDATE lebontag.lbt_setting SET s_value = '' WHERE s_name = 'osm_diff_ways_date';
UPDATE lebontag.lbt_setting SET s_value = '' WHERE s_name = 'osm_diff_relations_date';
UPDATE lebontag.lbt_setting SET s_value = '0' WHERE s_name = 'osm_diff_nodes_attempts';
UPDATE lebontag.lbt_setting SET s_value = '0' WHERE s_name = 'osm_diff_ways_attempts';
UPDATE lebontag.lbt_setting SET s_value = '0' WHERE s_name = 'osm_diff_relations_attempts';
COMMIT;
Nettoyage des fichiers
sudo rm -R /opt/le-bon-tag/log/* && \
sudo rm -R /opt/le-bon-tag/osm/changeset/* && \
sudo rm -R /opt/le-bon-tag/osm/integration/* && \
sudo rm -R /opt/le-bon-tag/osm/osc_update/* && \
sudo rm -R /opt/le-bon-tag/osm/prepare/* && \
sudo rm /opt/le-bon-tag/osm/replication/* && \
sudo rm -R /opt/le-bon-tag/osm/source/*
Chargement du nouveau fichier d'export PBF
Il faut reprendre les procédures "Données OSM de référence" du document d'installation.
Redémarrage de l'application
sudo systemctl daemon-reload
sudo systemctl start lbt-web.service
while IFS= read -r lbt_timer; do
sudo systemctl start "$lbt_timer"
done < <(sudo cat "/tmp/active-timers.txt")
sudo rm /tmp/active-timers.txt