On a eu récemment une anomalie détectée sur le flux de téléchargement des diffs sur les serveurs tiers à cause de pannes sur le serveur principal qui ont fait que certains fichiers diffs ont été régénérés en écrasant un certain nombre d'anciens fichiers (pourtant valides) par une nouvelle version contenant une vue plus récente des objets voire plus d'objets ou moins.
Les dates indiquées dans les différentes instance d'Overpass indiquaient pourtant toutes que ces données étaient "à jour" mais il y avait des "oublis". Cela a causé des désynchronisations sur les serveurs tiers. Cela peut exister depuis en fait longtemps et à chaque arrêt redémarrage du serveur principal générant les fichiers diffs, il ya a pu y avoir des fichiers diffs écrasés. On ne s'en aperçoit plus tard que sur les serveurs tiers qui ont téléchargé les anciennes versions de ces fichiers diffs mais qui ne s'aperçoivent pas que sur le serveur principal leur contenu a changé: les autres fichiers diffs qui suivent peuvent contenir alors à des objets qui ne sont QUE dans les nouvelles versions mais pas dans les anciennes versions écrasées. ---- Il manque un système pour sécuriser cela et notamment il faudrait que le serveur où sont récupérés les diffs maintienne un fichier index avec les empreintes numériques (SHA1 ou MD5) des fichiers diffs afin que les serveurs tiers puissent savoir lesquels ont été écrasés et régénérés avec un contenu différent. Les robots qui consultent les fichiers diffs pour charger une autre base sauraient alors précisément quels fichiers sont à charger et au moins remonter à la source de la désynchronisation quand des diffs suivants ne sont pas chargeables car ils mentionnent des objets avec des ID inexistants qui n'existent que dans les nouvelles versions de fichiers diffs précédents). Sinon l'autre solution c'est pour ces robots de faire des requêtes HTTP "STAT" sur un grand nombre de fichiers diffs précédent pour voir ceux qui ont pu changer (en comparant les dates ou tailles). Mais il serait plus simple de limiter ces requêtes en ne faisant un HTTP "STAT" que sur un seul fichier index principal (qui peut lister des sous-fichiers index secondaires, par exemple un fichier index secondaire par heure, le fichier index principal par jour ne contient alors que 24 empreintes numériques pour chacun des 24 fichiers index par heure dont chacun liste les empreinte des diffs générés pendant cette heure). Le but au final c'est d'avoir une identification précise de tous les fichiers diffs qui ne sont pas encore chargés ou pas chargés dans leur dernière version connue par le serveur principal. ==> Ce qui reste ensuite à faire c'est savoir comment un serveur tiers va agir s'il y a des nouvelles versions de fichiers diff précédents, alors qu'il les a déjà traités et a pu en traiter un certain nombre d'autres (qui eux sont bien synchronisés et souvent ne dépendent pas non plus du contenu des diffs précédents). ==> Aucun protocole n'est défini pour automatiser ces resynchronisations, ces corrections se font pour l'instant manuellement dans chaque base tierce. Ou bien l'administrateur de la base tierce décide de ne rien faire manuellement et prévoit de recharger plus tard la totalité de la base depuis un dump global (ce qui nécessite tout de même plusieurs jours de traitement, puis de rejouer un certain nombre de diffs à partir de ce dump, et nécessite donc de pouvoir disposer d'une seconde base pour ensuite faire facilement la bascule de la base utilisée en ligne une fois ces rechargements terminés). ==> C'est pourtant un problème classique de réplication de bases de données entre un serveur maître et des serveurs esclaves (cela existe pourtant dans certains moteurs de bases de données, et tous les serveurs SQL commerciaux qui savent répliquer en utilisant les "commit logs", ce système de réplication devrait exister nativement aussi en PostgreSQL; certains moteurs savent aussi synchroniser deux bases dans les deux directions, pour les bases compatibles avec le "two-phase commit" et synchronisées par un moniteur transactionnel chargé de coordonner et arbitrer les priorités, selon les types d'objets et les types de transaction ou les utilisateurs: certains clients recevront des notifications de "rollback" d'autres verront leurs commits acceptés; mais cela nécessite que les applications clientes des serveurs esclaves soient préparées à traiter les rollbacks possibles et gérer des files d'attente de transactions non finalisées). Le 21 mai 2015 18:27, Éric Gillet <gill3t.3ric+...@gmail.com> a écrit : > Ne serait-ce pas juste un retard sur l'age des données ? > > Dans la réponse du serveur normalement il y a la dernière mise-à-jour des > données Overpass : > > <meta osm_base="2015-05-21T16:25:02Z"/> > ou > "timestamp_osm_base": "2015-05-21T16:26:02Z", > > Le 21 mai 2015 16:59, mga_geo <mga_...@yahoo.fr> a écrit : > >> Bonjour, >> >> J'utilise souvent le serveur http://overpass.osm.rambler.ru. Hors sur une >> requête de comparaison des arrêts de bus sur Rennes, je trouvais toujours >> des différences même après modification dans OSM (par exemple >> https://www.openstreetmap.org/node/3266582540/history ). >> Le serveur http://overpass-api.de donne par contre la bonne version. >> >> Comment est-il possible de savoir qu'un serveur a des différences par >> rapport à OSM ? >> >> A+ >> Marc >> >> >> >> >> -- >> View this message in context: >> http://gis.19327.n5.nabble.com/Overpass-difference-de-reponses-en-fonction-du-serveur-tp5845428.html >> Sent from the France mailing list archive at Nabble.com. >> >> _______________________________________________ >> Talk-fr mailing list >> Talk-fr@openstreetmap.org >> https://lists.openstreetmap.org/listinfo/talk-fr >> > > > _______________________________________________ > Talk-fr mailing list > Talk-fr@openstreetmap.org > https://lists.openstreetmap.org/listinfo/talk-fr > >
_______________________________________________ Talk-fr mailing list Talk-fr@openstreetmap.org https://lists.openstreetmap.org/listinfo/talk-fr