Skip to content

Evitar a sincronização de dados de journal com dados do core desnecessariamente #1027

Description

@robertatakenaka

Contexto

A decisão de resincronizar um periódico com o SciELO Core está atualmente
acoplada ao parâmetro genérico force_update. Além disso, periódicos ainda
não sincronizados com o Core (journal.core_synchronized=False) podem
ficar de fora do processamento se não corresponderem ao filtro de status
informado, ficando "presos" sem nunca sincronizar.

Motivação

Foi observado que, mesmo quando a migração já havia sido realizada com
sucesso (dados obtidos do site clássico via
journal_proc.create_or_update_item(..., controller.create_or_update_journal)),
a operação de obtenção de dados do Core (fetch_and_create_journal)
ocorria sempre em seguida, de forma talvez desnecessária.

Causa raiz identificada em proc/tasks.py: a condição que decide se
o Core deve ser consultado —
if force_update or not journal_proc.journal.core_synchronized: — quase
sempre era verdadeira, pois nada no fluxo de migração via site clássico
(create_or_update_migrated_journal / journal_proc.create_or_update_item)
definia journal.core_synchronized = True. Ou seja, o campo permanecia
False mesmo após uma migração bem-sucedida, fazendo fetch_and_create_journal
disparar em praticamente toda execução, independentemente da necessidade
real de resincronizar com o Core.

Proposta

  • Corrigir a causa raiz: migration/controller.py passa a marcar
    journal.core_synchronized = True após create_or_update_journal
    bem-sucedido, permitindo que o campo reflita o estado real.
  • Separar force_update em dois controles independentes:
    • force_import_acron_id_file: força reimportação do arquivo de acron id.
    • force_core_sync: força resincronização com o Core para todos os
      periódicos do filtro, independente do estado atual.
  • Incluir sempre, via OR na query, os periódicos com
    journal__core_synchronized=False, garantindo que eventualmente sincronizem.
  • Expor os novos parâmetros no agendador (bigbang/tasks_scheduler.py).
  • Adicionar rastreabilidade da origem dos dados do journal (Core vs.
    classic website) e do agendamento de publicação nos detalhes de evento.

Critérios de aceite

  • journal.core_synchronized é definido como True após create_or_update_journal bem-sucedido.
  • force_update continua acionando ambos os comportamentos (compatibilidade retroativa).
  • Periódicos com core_synchronized=False são processados mesmo fora do filtro de status.
  • Periódicos já sincronizados (core_synchronized=True) não disparam fetch_and_create_journal desnecessariamente, quando force_core_sync=False.
  • Rodar com force_core_sync=True resincroniza todos os periódicos do filtro, independente do estado atual.
  • O campo detail["journal_data_source"] reflete corretamente a origem dos dados (core ou classic website).

Metadata

Metadata

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions