Closed DonovanMaillard closed 3 years ago
Attention l'application Occtax-mobile nécessite à minima TaxHub 1.7.0 ainsi que GeoNature 2.4.0.
Mais là ton soucis semble bien du côté de TaxHub. La route récupère les taxons par lot, en utilisant les paramètres page_size
et page_max_retry
(https://github.com/PnX-SI/gn_mobile_core/tree/master/sync#parameters-description) pour savoir combien d'objets remonter à chaque fois et combien de fois boucler. Mais avec les paramètres par défaut, elle peut remonter jusqu'à 20000 objets (20*1000). Donc cela ne semble pas un soucis au niveau de ces paramètres.
Quand tu es passé à TaxHub 1.7.0, as-tu bien appliqué les mises à jour de la BDD et notamment le rafraîchissement de la vue matérialisée taxonomie.vm_taxref_list_forautocomplete
qui reprend le contenu de tout Taxref ?
Tu peux tester ta route en web aussi pour voir ce qu'elle remonte. Voir https://github.com/PnX-SI/gn_mobile_core/issues/13
Ok merci pour ta réponse,
En effet j'ai bien lancé le script de mise à jour 1.6.5to1.7.0, et je n'ai pas eu d'erreurs particulières. J'ai quand même vérifié pour être sur et ma vue est bien conforme à ce que crée le script d'update vers 1.7.0.
La route testée coté web remonte bien mes 6105 noms https://taxons.flavia-ape.fr/#!/listes/100
En revanche sur ces paramètres par défaut, j'ai
"page_size": 100,
"page_max_retry": 5
dans le code partagé ici. Je vais peut être déjà commencé par remonter ces variables pour nous donner du mou.
(ha, et j'ai vérifié aussi, je n'ai pas de filtre activé)
Ton URL là est la page web de l'application, pas la route. La route est : https://taxons.flavia-ape.fr/api/taxref/allnamebylist/100?limit=10000
Oups mauvais lien, ok merci. La route renvoie donc 5009 lignes, pour 6105 noms dans ma liste.
Ca laisse quand même penser à un soucis coté mobile à priori, qui ne remonte que 27 noms, ou à un soucis lors de la synchronisation ?
J'ai coupé et relancé l'appli de synchronisation (qui avait bien sa pastille verte tout à l'heure) et elle est en train de récupérer. A priori c'est donc simplement un soucis de synchronisation, connexion perdue, transaction stopée ou autre qui serait à l'origine du soucis... je vous dirai si j'arrive à avoir mes 6105 noms à l'issue de cette synchro, qui effectivement dure plus longtemps
Complément : après cette nouvelle synchronisation j'ai 1364 taxons. De nouveau pastille verte, pas possible de relancer une synchro manuellement. Des transactions qui ne se terminent pas quelque part à priori?
La synchronisation des taxons paginée a été réglée au niveau de TaxHub 1.7.2 ainsi que Sync-mobile 0.3.
Bonjour à tous,
Nous rencontrons un souci lors de la synchronisation. Nous utilisons la version 1.1.4 de Occtax mobile et la version 1.1.2 pour la synchro. GeoNature est en version 2.5.5 et Taxhub 1.7.3
Des taxons qui étaient auparavant disponible à la saisie mobile (ex : Bouquetin des Alpes, Chamois, Roitelet à triple bandeau, etc) ne sont plus disponible dans Occtax mobile. Or la data synchronisation aboutit (pastille verte).
Dans taxhub, la liste (id=500) contient 11974 noms : https://geonature.mercantour-parcnational.fr/taxhub/#!/listes/500.
En BDD, dans la vue v_taxef_all_listes, nous avons également 11974 noms pour la liste 500. Or après avoir lancé une synchronisation, Occtax mobile annonce seulement 8890 taxons trouvés.
La route : https://geonature.mercantour-parcnational.fr/taxhub/api/taxref/allnamebylist/500?limit=20000 remonte 17180 taxons dont les taxons Bouquetin des Alpes, Chamois, Roitelet à triple bandeau qui sont présent.
Que conviendrait il de faire pour que nous récupérions l'intégralité des taxons dans Occtax mobile ?
PS : j'ai déjà lancé un refresh materialized view sur vm_taxref_list_forautocomplete
Merci pour votre aide.
Bonjour, désolé Samuel, je ne réponds pas directement à ta question, mais j'en pose une autre. Au vu des nombreux retours de problème de synchronisation (perfs et incohérence des données), je me pose la question de la pertinence d'utiliser les API existantes pour récupérer les référentiels. Ces routes n'ont pas vraiment été taillés pour ça et on voit que l'ancienne solution, c'est à dire ajouter un endpoint qui se charge de construire une base Sqlite, marchait mieux. Est-ce qu'on ne pourrait pas avoir un fonctionnement hybride:
Oui c'est surtout la synchronisation des unités géographiques qui est lourde et parfois n'aboutit pas. Des solutions d'amélioration de la synchronisation sont en cours par ailleurs. Revoir la logique de synchronisation en générant le SQLite côté serveur sont une piste mais nécessiterait une importante refonte en effet.
Pour le problème de Samuel, il y a eu plusieurs échanges sur le sujet. C'est normal que le nombre de taxons soient différents car l'application mobile de charge de regrouper les lignes correspondant aux noms latins et aux noms français. Il y a peut-être un soucis à ce niveau pour les taxons que tu ne retrouves pas dans l'application mobile. Tu peux analyser ça en analysant les différents logs, mais aussi en ouvrant la BDD SQLite présente sur l'appareil mobile.
Bonjour, désolé Samuel, je ne réponds pas directement à ta question, mais j'en pose une autre. Au vu des nombreux retours de problème de synchronisation (perfs et incohérence des données), je me pose la question de la pertinence d'utiliser les API existantes pour récupérer les référentiels. Ces routes n'ont pas vraiment été taillés pour ça et on voit que l'ancienne solution, c'est à dire ajouter un endpoint qui se charge de construire une base Sqlite, marchait mieux. Est-ce qu'on ne pourrait pas avoir un fonctionnement hybride:
* utiliser les API existantes pour les POST * construire une API séparée pour les besoins de synchronisation J'ai conscience que ça necessite une refonte assez importante de l'existant.. (surement à discuter dans un ticket séparé)
Les retours que nous avons des agents sur le processus de synchronisation sont de manière générale négatifs à cause des performances très limitées (durée de la synchro, échec de la synchro et parfois incohérence des données). A titre de comparaison nous avions moins d'échecs de synchronisation avec la version V1 de Geonature mobile.
Il y a 3 pre-release en cours de l'outil Sync-mobile, notamment en lien avec le sujet https://github.com/PnX-SI/gn_mobile_core/issues/34
Un élément identifié est qu'il y a beaucoup d'appels des routes de GeoNature qui sont longs et parfois trop lourds.
Un moyen d'améliorer le temps et la réussite des synchronisations est d'augmenter le paramètre page_size
.
En le passant de 1000 à 10000, c'est plus rapide et ça aboutit plus facilement.
Je suis allé regarder de plus près le fichier de log généré sur le smartphone. La synchro aboutit
_04-07 14:56:03.692 10209 10291 I fr.geonature.sync.sync.worker.DataSyncWorker: l ocal data synchronization successfully finished in 227783ms 04-07 14:56:03.699 10209 10255 I WM-WorkerWrapper: Worker result SUCCESS for Wor k [ id=7c7d5e9e-91b8-4a7f-bcda-8a211de24fb6, tags={ fr.geonature.sync.sync.worke r.DataSyncWorker, data_sync_workertag } ]
Cependant la table data de la BDD SQLite indique l'absence des taxons chamois, bouquetins etc.
En passant le paramètre page_size de 1000 à 10000, j'ai pu récupérer tous les taxons manquants. Occtax mobile annonce 11974 taxons trouvés, identiques à ceux de la liste (id=500) qui contient elle aussi 11974 taxons.
C'est bizarre que la synchro passait encore il y a peu avec le paramètre page_size à 1000.
Merci !
Ah OK donc la synchro semblait passer, mais en fait elle ne devait pas aboutir et cela expliquait ton soucis de noms manquants dans la liste ! OK à noter pour alimenter les discussions actuelles avec @sgrimault sur la synchronisation.
Bonjour,
Je reviens sur ce ticket car nous rencontrons à nouveau un souci pour des taxons manquants dans Occtax mobile. Nous utilisons toujours la version 1.1.4 de Occtax mobile et la version 1.1.2 pour la synchro. GeoNature est en version 2.5.5 et Taxhub 1.7.3
La synchro passe sans problème semble t'il :
_05-25 11:57:03.084 26717 26749 I fr.geonature.sync.sync.worker.DataSyncWorker: l ocal data synchronization successfully finished in 102989ms 05-25 11:57:03.088 26717 26739 I WM-WorkerWrapper: Worker result SUCCESS for Wor k [ id=11450b90-042f-40a5-8f3a-704179ed6ca8, tags={ fr.geonature.sync.sync.worke r.DataSyncWorker, data_sync_workertag } ].
Dans taxhub, la liste (id=500) contient 11974 noms : https://geonature.mercantour-parcnational.fr/taxhub/#!/listes/500.
En BDD, dans la vue v_taxef_all_listes, nous avons également 11974 noms pour la liste 500. Or après avoir lancé une synchronisation, Occtax mobile annonce seulement 6688 taxons trouvés et cela se confirme lorsque j'ouvre le fichier data.db stocké sur le téléphone.
Est-ce que ce n'est pas lié à la différence entre taxon et nom ? Ici seul les taxons sont considérés.
A priori non car habituellement j'ai approximativement 11974 taxons annoncés pour Occtax mobile. Et là après la synchro il manque bien de nombreux taxons. Il manque notamment des papillons (Colias alfacariensis - le fluoré). Lui est notamment présent à la saisie dans Occtax.
Je n'avais pas fait attention à la version d'occtax mobile que tu utilises.
Je pense que c'est en partie lié à l'issue https://github.com/PnX-SI/gn_mobile_core/issues/34 de l'application sync. C'est normalement corrigé. Essaye avec les nouvelles version de l'application de synchronisation
@amandine-sahl tu me conseilles d'installer uniquement la dernière version de sync 1.1.7 ? Faudrait il que j'installe également la dernière version de Occtax_mobile ou est ce que cette version 1.1.7 est compatible avec un occtax-mobile 1.1.4 ? Merci
Bonjour, J'ai installé la dernière version de sync sur mon téléphone. J'ai lancé la synchro qui passe sans problème mais je me retrouve toujours avec des taxons manquants. Occtax mobile propose seulement 6688 taxons alors que nous devrions en avoir 11974.
Je crois qu'on en a discuté ailleurs, mais Occtax-mobile regroupe les noms scientifiques et les noms français en une seule ligne, donc il y a toujours une différence entre le nombre de lignes dans la table et dans la route et dans ce qu'affiche Occtax-mobile. Cela explique peut-être la différence ?
Non mon problème ne vient pas de là. Il manque des taxons dans la bdd sqlite qui est déposée sur Phone\Android\data\fr.geonature.sync\databases. Pourtant la synchro aboutit.
Les taxons manquants sont présent à la saisie dans Occtax-web
Sans doute à discuter plutôt sur le dépôt de sync ;)
Tu es su quelle version de sync?
@DonovanMaillard. Nous sommes sur une version 1.1.2 de sync. J'ai également testé la dernière version 1.1.9 mais j'obtiens le même comportement. Seulement 6688 taxons sur Occtax mobile quand j'ai ai 11975 sur https://geonature.mercantour-parcnational.fr/taxhub/#!/listes/500
Et tu as quoi comme paramètres pour :
?
Pas très recommandé à priori, mais j'ai "réglé" ou en tous cas contourné, le soucis chez Flavia en mettant un page_size très élevé. Un seul appel suffit par conséquent, et ça fonctionne comme ça.
Ce n'est pas exactement le même soucis mais dans notre cas :
Liste avec :
et la table data_taxon contient 8583 données dans la table taxons
Exemple avec Rhagadiolus edulis Requete tous les taxons ayant la description Rhagadiolus edulis dans data_taxon :
Requête de taxref:
Bref je ne comprend pas tout à l'algorithme de récupération des taxons
Pour quelle raison le choix a été fait à l'origine d'un tel traitement des noms ?
Le soucis se pose pour beaucoup, le traitement est assez opaque. En théorie, on devrait avoir autant de ligne que de cd_nom saisissables, avec leurs noms latin + nom francais concaténés? Le traitement est plus compliqué que ça aujoud'hui?
Et tu as quoi comme paramètres pour :
* page_size * page_max_retry
?
Voici nos paramètres dans le fichier settings_sync.json { "geonature_url": "https://geonature.mercantour-parcnational.fr", "taxhub_url": "https://geonature.mercantour-parcnational.fr/taxhub/", "uh_application_id": 14.0, "observers_list_id": 1.0, "taxa_list_id": 500.0, "code_area_type": "UG", "page_size": 10000.0, "page_max_retry": 5000.0 }
quand j'ai ai 11975
avant d'avoir une solution plus "propre", tu peux essayer page_size: 20000 et page_max_retry: 10 ou 20 peu importe. Ca a marché pour nous.
quand j'ai ai 11975
avant d'avoir une solution plus "propre", tu peux essayer page_size: 20000 et page_max_retry: 10 ou 20 peu importe. Ca a marché pour nous.
@DonovanMaillard. Ok je teste
La synchro passe mais j'ai toujours que 6688 taxons 😭
Bonjour @samuelpriou
Pourriez vous me communiquer les traces logcat
de l'application de synchronisation ?
Pour information et suite à différents échanges précédents sur la partie synchronisation des données, il n'y a plus de conditions lors de l'insertion des taxons, mais uniquement sur la partie des données relatives aux zones géographiques pour les taxons (le taxon doit au préalable exister).
Comme la base des taxons peut être assez volumineuse, le traitement se fait de manière séquentiel par "page" (via les paramètres page_size
et page_max_retry
) pour enchaîner les appels à la route paginée /api/taxref/allnamebylist
. Si un des appels échoue, le traitement continue jusqu'à ce que le route /api/taxref/allnamebylist
réponde par un 404 (non trouvé) ou que le paramètre page_max_retry
est atteint.
Il est possible que sur l'ensemble du traitement certains appels tombent en échec (d'où le delta constaté). Pour réduire le nombre d'appels à faire (et donc le risque d'erreurs), on peut aussi augmenter la valeur du paramètre page_size
(par défaut il est fixé à 1000 taxons).
Voici un rappel des règles pour faciliter ce paramétrage :
page_size
: nombre de taxons à remonter lors de l'appel à la route paginée /api/taxref/allnamebylist
(par défaut : 1000 taxons)page_max_retry
: nombre d'appels maximal à faire sur la route paginée /api/taxref/allnamebylist
page_size
* page_max_retry
page_size
est petite, plus le nombre d'appels à faire coté GeoNature augmente pour le peu qu'il y ait beaucoup de taxons à remonter.page_size
peut être intéressante en cas d'accès réseau difficile ou peu performant (et donc de pouvoir récupérer plus facilement tous les taxons)page_size
assez conséquente (10k ou 20k selon la configuration de GeoNature et de son frontal Web ainsi que de posséder des terminaux assez récent car la consommation mémoire sera plus soutenue) avec un page_max_retry
petit. Si par exemple on a 100000 taxons à synchroniser coté GeoNature, 10 requêtes de 10000 taxons sera toujours plus efficace et performant que 100 requêtes de 1000 taxons.@sgrimault. Voici les logs de l'application sync. A priori la synchro passe correctement mais il manque des taxons à la saisie mobile alors que les taxons sont bien ouverts à la saisie et présents en saisie web. Merci
@sgrimault En passant les paramètres suivant : "page_size": 20000.0, "page_max_retry": 70.0
Cela résout mon problème. J'ai bien 11975 taxons ouvert à la saisie. La liste est complète.
@samuelpriou, je te laisse clore le ticket :)
@sgrimault il n'y a rien à faire du fait que cela ne fonctionnait pas en aillant des paramètres plus bas qui faisaient alors 2 appels à la route des taxons et ont entraîné une récupération partielle de la liste ?
Oui, le fonctionnement reste très capricieux sur ce point et le nombre d'appels défini ne semble pas avoir le comportement espéré. Il faut y aller à tâton pour trouver les variables qui fonctionnent pour l'instant
Vu avec @samuelpriou, les taxons étaient incomplets car le paramètre page_max_retry
était trop petit. Pour être sur de pouvoir récupérer tous les taxons (et leurs données relatives), il faut s'assurer que page_size
* page_max_retry
couvre bien la base des taxons à synchroniser.
Pour le cas de Samuel, il y a environ près de 12k taxons à synchroniser mais aussi près de 1.3M d'entrées liées aux données relatives des taxons. Donc avec un page_size
fixé à 20k et page_max_retry
à 70 on arrive donc 1.4M d'entrées.
d'une manière générale, est-il pertinent de laisser à l'utilisateur la définition d'un max_retry? Dans la mesure où l'appli gère déjà les choses assez intelligemment en testant les pages completes/incomplètes, les echecs d'appels etc ? Est-ce qu'on pourrait pas avoir simplement le page_size à définir, et que l'appli aille elle-même fixer son max_retry en fonction du nombre de taxons retourné par la route pour éviter ce type de soucis?
Pour ma part, la notion d'entrées relatives aux taxons, en dehors des noms eux-mêmes m'échappait totalement. J'arrêtais mon calcul au nombre de taxons renvoyés par l'api.
C'est plus un garde fou pour garantir que la synchronisation s'arrêtera bien. Actuellement le module de synchronisation "navigue" dans la route paginée /api/taxref/allnamebylist
tant que cette dernière répond toujours 200. Le cas d'arrêt est d'avoir en retour une erreur 404 (ressource non trouvée) ou que la valeur du paramètre page_max_retry
a été atteinte.
D'accord merci. Peux-tu me préciser quelles sont les ressources relatives dont il faut tenir compte dans le calcul en plus du nombre de taxons et où elles se trouvent, pour qu'on puisse le préciser dans la doc?
Les données relatives aux taxons sont les couleurs des taxons pour toutes les unités géographiques.
Ok merci, donc impossible de prévoir facilement le volume que ça représente sur une instance moyenne pour proposer des paramètres par défaut. Dommage !
Pour simplifier, on pourrait rendre le paramètre page_max_retry
facultatif et la synchronisation ne s’appuiera alors que sur la valeur de retour de l'API (404 on s'arrête là) ou sur le nombre d'entrées récupérées par rapport à la valeur fixée de page_size
(si le nombre d'entrées récupérées est inférieur à page_size
alors on s’arrête là).
Et on part du principe que le comportement coté API restera inchangé :
Disons qu'il faut à minima le décrire précisément dans la doc et préciser où trouver le nombre de lignes que l'appli mobile a besoin de récupérer pour calculer correctement ces variables, à moins de pouvoir le simplifier effectivement. Mais en effet, faire evoluer ses unités géographiques, ses taxons ou autre, peut engendrer ce type de soucis par conséquence. Ca oblige à surveiller ces paramètres là... c'est peut-être pas la principale priorité dans un premier temps mais ça mérite d'être réfléchi et simplifié je pense
OK, pour conclure ce sujet et bien comprendre.
Cela signifie que si le récupération des couleurs des taxons par unités géographiques se fait partiellement (car le page_max_retry
est atteint ou autre), alors la liste des taxons sera aussi récupérée partiellement, ou seulement affichée partiellement ?
Ça je ne comprends pas pourquoi.
Avant de conclure, j'aimerais ajouter mon grain de sel...
J'ai 137 549 lignes dans gn_synthese.v_color_taxon_area (contenant 13517 cd_ref différent) et une liste de 9715 taxons que je souhaite autoriser à la saisie mobile. J'ai paramétré de façon très large page_size=10000 et page_max_retry=20000 pour être sûr de tout couvrir.
Bilan :
edit : j'ai pas précisé, je suis en GN 2.6.2 et en sync 1.1.9 et occtax-mobile 1.2.4
@lepontois
J'aurais besoin des traces logcat de l'application de synchronisation voir si il n'y aurait pas des appels qui tombent en échec.
Comme expliqué ci-dessus, le paramètre page_max_retry
est en fait le nombre d'appels maximal que pourra faire l'application de synchronisation. Il n'est pas nécessaire de mettre une valeur si grande (20000, ça veut donc dire qu'on est prêt à lancer près de 20000 requêtes ! Ce qui est beaucoup trop).
Dans votre cas, je testerais avec les paramètres suivants :
page_size
: 10000, page_max_retry
: 20 (~environ 200k entrées)page_size
: 20000, page_max_retry
: 10
Bonjour,
Je viens de tenter une install de geonature mobile. TaxHub (1.7) et Usershub (2.1.2) sont à jour, GeoNature est dans sa version master actuelle 2.3.2.
Pour info et question : L'application mobile me remonte bien les JDD, les observateurs, en revanche elle ne récupère que 27 taxons sur 6105 présentes dans ma liste saisie occtax (dont l'identifiant est bien renseigné dans settings_occtax). Est-ce un bug à rechercher sur l'appli mobile, sur la synchronisation, ou simplement des routes mises à jour dans la prochaine version GeoNature puisque j'ai vu qu'un travail avait été fait là dessus?
Merci !