Development #43228
cache sur les appels à /api/cards/@list
0%
Description
Il y a :
@cached_property def available_engines(self): all_engines = engines.get_engines()
mais ça attache juste l'info à l'instance, du coup une autre cellule recherche, ou dans un autre processus, va refaire les appels; et sur un déploiement multi-collectivité ça va être un appel HTTP par collectivité, devenir lourd.
Du coup je verrais également un cache à ce niveau,
for key, service in wcs_services.items(): card_models = get_wcs_json(service, 'api/cards/@list')
Cache via django.core.cache, pour se retrouver dans memcached et partagé.
(peut-être à cette occasion ajouter à la gestion de cache dans requests_wrapper.py la possibilité de retourner une info du cache arrivant à expiration, tout en tapant dans un thread la mise à jour de l'info du cache) (comme on a pour RemoteTemplate dans Hobo).
Fichiers
Révisions associées
Historique
Mis à jour par Lauréline Guérin il y a presque 4 ans
Après analyse, il s'avère que lors de l'indexation des pages d'un site (toutes les heures donc, et tout au même moment), si une page contient une cellule de recherche alors elle loade search_services
.
=> il n'est pas nécessaire de taper sur w.c.s. pour l'indexation
Mis à jour par Lauréline Guérin il y a presque 4 ans
- Sujet changé de cache sur les appels à /api/cards/@list à Ne pas loader les search engines (et appeler w.c.s. pour récupérer formdata et cards) lors de l'indexation des pages d'un site
Mis à jour par Lauréline Guérin il y a presque 4 ans
- Fichier 0001-search-don-t-search-for-engines-on-site-indexation-4.patch 0001-search-don-t-search-for-engines-on-site-indexation-4.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Je n'ai pas trouvé comment éviter d'appeler is_visible
sur l'indexation d'une cellule (lorsqu'on recherche les placeholders de la page pour vérifier que la cellule est dans un placeholder actif).
Alors j'ai changé le comportement de SearchCell.is_visible
: au lieu de builder la liste des services on regarde juste le contenu de _search_services
- en espérant que ça soit juste.
J'en ai profité pour exclure quelques classes de cellules qui n'ont aucun contenu à indexer (méthodes render_for_search
+ get_external_links_data
qui ne renvoient rien), ça boostera un tout petit peu l'indexation d'un site.
(cette exclusion n'est pas suffisante, si sur une page on a plusieurs cellules dont une SearchCell, alors lors du rendering pour chercher les placeholders on va appeler is_visible
sur la cellule de recherche)
Mis à jour par Frédéric Péters il y a presque 4 ans
- Statut changé de Solution proposée à Solution validée
ok,
Mis à jour par Lauréline Guérin il y a presque 4 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 518825f9a4faf827b82add33680c16bd2ee5d0da Author: Lauréline Guérin <zebuline@entrouvert.com> Date: Fri May 22 16:09:31 2020 +0200 search: don't search for engines on site indexation (#43228)
Mis à jour par Frédéric Péters il y a presque 4 ans
- Statut changé de Résolu (à déployer) à Solution déployée
Mis à jour par Lauréline Guérin il y a presque 4 ans
A priori ça se produit encore: https://sentry.entrouvert.org/entrouvert/publik/issues/203/events/latest/
Mis à jour par Lauréline Guérin il y a presque 4 ans
- Sujet changé de Ne pas loader les search engines (et appeler w.c.s. pour récupérer formdata et cards) lors de l'indexation des pages d'un site à cache sur les appels à /api/cards/@list
search: don't search for engines on site indexation (#43228)