Commit 68dc536
Reduzir consultas e conexões ao banco de dados (#1410)
* config: ajusta limites de tempo e concorrência do Celery via variáveis de ambiente
- CELERY_TASK_TIME_LIMIT: hard limit configurável via env (default 36000s)
- CELERY_TASK_SOFT_TIME_LIMIT: soft limit configurável via env (default 3600s)
- Adiciona CELERY_WORKER_MAX_TASKS_PER_CHILD para reciclagem de workers (default 100)
- Adiciona CELERY_WORKER_CONCURRENCY configurável via env (default 4)
- Comenta CELERY_RESULT_BACKEND='django-db'; resultado já persiste via Redis
* config: otimiza configurações de banco de dados e sessão para produção
- Simplifica CONN_MAX_AGE para 60s fixo via env (remove variável duplicada)
- Remove POOL_OPTIONS (incompatível com django-prometheus backend)
- Migra SESSION_ENGINE para cache Redis (SESSION_ENGINE + SESSION_CACHE_ALIAS)
- Reduz escritas no PostgreSQL a cada request com SESSION_SAVE_EVERY_REQUEST=True
* core: corrige _get_user para usar request.user autenticado quando disponível
- Prioriza request.user.is_authenticated antes de consultar o banco
- Fallback para user_id e username quando request não tem usuário autenticado
- Remove acesso incorreto a request.user_id (AttributeError silencioso anterior)
* core: evita dupla avaliação de queryset em UserCollectionMiddleware
- Atribui request.user.collection.all() a variável local antes de reutilizar
- Elimina segunda query duplicada para set_current_collections e request.user_collection
* core: adiciona select_related('creator') no queryset de LicenseViewSet
- Evita N+1 queries ao listar licenças no admin Wagtail
* location: evita saves desnecessários em create_or_update comparando valores antes de persistir
- State.create_or_update: salva apenas se name ou acronym mudaram
- CountryName.create_or_update: salva apenas se country, language ou text mudaram
- Country.create_or_update: salva apenas se name, acronym ou acron3 mudaram
- CountryName.get_country: substitui loop por .filter(country__isnull=False).select_related().first()
* location: move busca de User e user_id para fora do loop em bulk_cities
- User.objects.get(id=user_id) executado uma única vez antes de iterar o CSV
- Elimina N queries redundantes ao banco durante importação em massa
* location: adiciona select_related no queryset de LocationAdmin
- Inclui country, state, city e creator para evitar N+1 no admin Wagtail
* institution: evita saves desnecessários em create_or_update comparando valores antes de persistir
- Institution.create_or_update: salva apenas se institution_type ou url mudaram
- InstitutionIdentification.create_or_update: salva apenas se is_official ou official mudaram
- Garante que updated_by só é gravado quando há mudança efetiva
* organization: refatora update_logo/update_url para retornar bool e consolidar saves
- update_logo e update_url retornam True/False sem chamar save() internamente
- create_or_update chama save() uma única vez se logo ou url mudaram
- update_institutions retorna bool; create_or_update chama save() apenas se houve mudança
- Organization.update_institutions remove save() interno; responsabilidade delegada ao chamador
* organization: adiciona select_related para institution_identification__official em task de migração
- Evita query extra ao acessar official durante migração de Institution para Organization
* journal: otimiza queries e substitui get/except por update_or_create em JournalHistory
- OfficialJournal.add_old_title/add_new_title: substitui loop por .filter().first()
- add_old_title: remove self.save() após M2M .add() (desnecessário)
- add_new_title: remove self.save(); responsabilidade delegada ao chamador
- Journal.collection_acrons: substitui loop por values_list com select_related
- Journal.get_ids / get_legacy_keys: adiciona select_related('collection') nos filtros
- JournalHistory.load: substitui get/except+save duplo por update_or_create para ADMITTED e INTERRUPTED
* issue: adiciona select_related para creator e updated_by no queryset de IssueAdminSnippetViewSet
- Evita N+1 queries ao listar issues no admin Wagtail
* researcher: substitui loops por values_list().first() nas properties orcid e lattes
- Elimina iteração desnecessária; retorna diretamente o primeiro identifier encontrado
- Remove acesso ao atributo do objeto relacionado; usa projeção via values_list
* researcher: adiciona select_related e prefetch_related na query de migração
- Adiciona select_related('affiliation__institution__location')
- Adiciona prefetch_related('researcheraka_set__researcher_identifier')
- Reduz queries N+1 ao acessar location e identifiers durante migração
* pid_provider: consolida saves e adiciona select_related para evitar queries extras
- XMLVersion.get_or_create: documenta fluxo de 3 saves (pk → arquivo → consolidação)
- PidProviderXML.public_items: adiciona select_related('current_version')
- PidProviderXML._add_current_version: remove save() interno; delegado ao chamador
- PidProviderXML._add_other_pid: remove save() interno; delegado ao chamador
- PidProviderXML._save: adiciona save() consolidado após _add_current_version/_add_other_pid
- best_matches: adiciona select_related('current_version') no iterator
* pid_provider: remove _get_user local e importa de core.utils.utils
- Elimina duplicação de _get_user em pid_provider/tasks.py
- Importa _get_user centralizado de core.utils.utils
* tracker: remove _get_user local duplicado
- Elimina definição local de _get_user em tracker/tasks.py
- Função centralizada já disponível em core.utils.utils
* bigbang: remove _get_user local e importa de core.utils.utils
- Elimina definição local de _get_user
- Atualiza chamadas para assinatura _get_user(request=None, user_id=..., username=...)
- Importa _get_user centralizado de core.utils.utils
* collection: corrige lógica if/elif e adiciona ValueError em task_load_collections
- Substitui if/if por if/elif para evitar reatribuição silenciosa de user
- Levanta ValueError explícito quando nem user_id nem username são fornecidos
* editorialboard: extrai request.user para variável local em import_file_ebm
- Atribui request.user a user antes do loop para evitar acesso repetido ao objeto request
- Padroniza uso de user nas chamadas a create_or_update dentro do loop
* thematic_areas: adiciona select_related('creator') nos querysets dos SnippetViewSets
- GenericThematicAreaAdmin, GenericThematicAreaFileAdmin
- ThematicAreaAdmin, ThematicAreaFileAdmin
- Evita N+1 queries ao listar registros no admin Wagtail
* article: adiciona select_related no iterator de bulk_export_articles_to_articlemeta
- Inclui journal, journal__official e pp_xml para evitar N+1 durante exportação em massa
* Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* Apply suggestions from code review
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>1 parent e46b362 commit 68dc536
File tree
23 files changed
+220
-175
lines changed- article
- bigbang
- collection
- config/settings
- core
- utils
- editorialboard
- institution
- issue
- journal
- location
- scripts
- organization
- pid_provider
- researcher
- thematic_areas
- tracker
23 files changed
+220
-175
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
345 | 345 | | |
346 | 346 | | |
347 | 347 | | |
348 | | - | |
| 348 | + | |
349 | 349 | | |
350 | 350 | | |
351 | 351 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
| 11 | + | |
11 | 12 | | |
12 | 13 | | |
13 | 14 | | |
| |||
26 | 27 | | |
27 | 28 | | |
28 | 29 | | |
29 | | - | |
30 | | - | |
31 | | - | |
32 | | - | |
33 | | - | |
34 | | - | |
35 | | - | |
36 | 30 | | |
37 | 31 | | |
38 | 32 | | |
39 | 33 | | |
40 | 34 | | |
41 | 35 | | |
42 | 36 | | |
43 | | - | |
| 37 | + | |
44 | 38 | | |
45 | 39 | | |
46 | 40 | | |
| |||
73 | 67 | | |
74 | 68 | | |
75 | 69 | | |
76 | | - | |
| 70 | + | |
77 | 71 | | |
78 | 72 | | |
79 | 73 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
14 | | - | |
| 14 | + | |
15 | 15 | | |
| 16 | + | |
| 17 | + | |
16 | 18 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
374 | 374 | | |
375 | 375 | | |
376 | 376 | | |
377 | | - | |
378 | | - | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
379 | 380 | | |
380 | | - | |
381 | | - | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
382 | 392 | | |
383 | 393 | | |
384 | 394 | | |
| |||
404 | 414 | | |
405 | 415 | | |
406 | 416 | | |
407 | | - | |
408 | | - | |
| 417 | + | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
409 | 422 | | |
410 | 423 | | |
411 | 424 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
17 | | - | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
18 | 20 | | |
19 | 21 | | |
20 | | - | |
21 | 22 | | |
22 | 23 | | |
23 | | - | |
24 | | - | |
25 | | - | |
26 | | - | |
27 | | - | |
28 | | - | |
29 | | - | |
30 | 24 | | |
31 | 25 | | |
32 | 26 | | |
| |||
82 | 76 | | |
83 | 77 | | |
84 | 78 | | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
85 | 84 | | |
86 | 85 | | |
87 | 86 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
18 | | - | |
| 18 | + | |
| 19 | + | |
19 | 20 | | |
20 | | - | |
| 21 | + | |
21 | 22 | | |
22 | 23 | | |
23 | 24 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
91 | 91 | | |
92 | 92 | | |
93 | 93 | | |
94 | | - | |
| 94 | + | |
| 95 | + | |
95 | 96 | | |
96 | | - | |
97 | | - | |
98 | | - | |
99 | | - | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
100 | 102 | | |
101 | 103 | | |
102 | 104 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
175 | 175 | | |
176 | 176 | | |
177 | 177 | | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
71 | 71 | | |
72 | 72 | | |
73 | 73 | | |
| 74 | + | |
74 | 75 | | |
75 | 76 | | |
76 | 77 | | |
77 | 78 | | |
78 | 79 | | |
79 | 80 | | |
80 | | - | |
| 81 | + | |
81 | 82 | | |
82 | | - | |
| 83 | + | |
83 | 84 | | |
84 | 85 | | |
85 | 86 | | |
| |||
89 | 90 | | |
90 | 91 | | |
91 | 92 | | |
92 | | - | |
| 93 | + | |
93 | 94 | | |
94 | 95 | | |
95 | 96 | | |
| |||
104 | 105 | | |
105 | 106 | | |
106 | 107 | | |
107 | | - | |
| 108 | + | |
108 | 109 | | |
109 | 110 | | |
110 | 111 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
201 | 201 | | |
202 | 202 | | |
203 | 203 | | |
204 | | - | |
205 | | - | |
206 | | - | |
207 | | - | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
208 | 214 | | |
209 | 215 | | |
210 | 216 | | |
| |||
968 | 974 | | |
969 | 975 | | |
970 | 976 | | |
971 | | - | |
972 | | - | |
973 | | - | |
974 | | - | |
| 977 | + | |
| 978 | + | |
| 979 | + | |
| 980 | + | |
| 981 | + | |
| 982 | + | |
| 983 | + | |
| 984 | + | |
| 985 | + | |
| 986 | + | |
975 | 987 | | |
976 | 988 | | |
977 | 989 | | |
| |||
0 commit comments