interlegis / sapl

Sistema de Apoio ao Processo Legislativo
GNU General Public License v3.0
86 stars 81 forks source link

Estudar como diminuir as migrations #1829

Open marciomazza opened 6 years ago

marciomazza commented 6 years ago

Pretendíamos resetar as migrations nas versões médias (3.2, por exemplo), mais ou menos como descrito em https://github.com/interlegis/sapl/issues/976#issuecomment-289572613, mas as migrations contém diversas funções que fazem algum tipo de setup de dados nas bases

Estudar o que fazer e considerar fazer squash e otimizar manualmente, como sugere http://www.rkblog.rk.edu.pl/w/p/squashing-and-optimizing-migrations-django/

(Vide #976.)

marciomazza commented 6 years ago

Também podemos simplesmente isolar o que está nos RunPython, filtrar o que deve permanecer e recolocar após um reset. De fato, vários ajustes feitos com RunPython deixam de ser necessários após um reset de migrations (ou de um squash).

Eis uma listagem dos 23 usos:

> ag -u --python --nobreak RunPython

sapl/compilacao/migrations/0006_auto_20180321_1054.py
34:        migrations.RunPython(adjust_contagem_continua),
sapl/compilacao/migrations/0005_auto_20180319_1041.py
43:        migrations.RunPython(adjust_dispositivo_raiz),
sapl/materia/migrations/0013_adiciona_status_tramitacao.py
43:        migrations.RunPython(gera_status_tramitacao),
sapl/norma/migrations/0001_squashed_0011_auto_20180220_1859.py
15:# RunPython operations to refer to the local versions:
261:        migrations.RunPython(code=gera_tipo_vinculo),
sapl/norma/migrations/0008_normajuridica_popula_tipo_vinculo_norma.py
38:        migrations.RunPython(gera_tipo_vinculo),
sapl/parlamentares/migrations/0007_adiciona_partidos.py
39:        migrations.RunPython(gera_partidos_tse),
sapl/parlamentares/migrations/0010_corrige_data_inicio_mandato.py
35:        migrations.RunPython(altera_data_inicio_mandato),
sapl/parlamentares/migrations/0020_fix_inicio_mandato.py
28:        migrations.RunPython(popula_campo_data_inicio),
sapl/parlamentares/migrations/0014_auto_20180131_1014.py
45:        migrations.RunPython(migrate_municipio_e_uf_como_charfields),
sapl/parlamentares/migrations/0008_adiciona_cargos_mesa.py
40:        migrations.RunPython(gera_cargos_mesa),
sapl/parlamentares/migrations/0021_clear_thumbnails_cache.py
22:        migrations.RunPython(clear_thumbnails_cache_migrate),

> ag -u --python --nobreak --nogroup RunPython | wc -l
23
marciomazza commented 6 years ago

Uma curiosidade importante... quando se usam squashes o django acompanha em que ponto cada base está: ele sabe se é uma base nova e está no squash ou se está no meio do caminho nas migrations anteriores.

Ele permite assim um período de "transição" em que as bases podem estar em pontos diferentes. Mas no final, depois que todas chegaram no ponto do squash, é preciso eliminar as migrações velhas e deixar só os squashes. Essa transição pro estado novo de squash é uma forma de reset, mais complexa, mas que controla quem virou a chave.

Fazendo o reset temos alguns passos manuais que acabam zerando a base de dados sobre migrations. Precisamos colocar isso em algum script... que seria rodado na implantação da versão com reset....

Os passos manuais a que me refiro estão em https://github.com/interlegis/sapl/issues/976#issuecomment-289572613

edwardoliveira commented 6 years ago

As migrations sapl/parlamentares/migrations/0008_adiciona_cargos_mesa.py, sapl/materia/migrations/0013_adiciona_status_tramitacao.py, sapl/parlamentares/migrations/0007_adiciona_partidos.py podem ser removidas e colocadas em um script python que rode após todas as migrações. Eu nem colocaria isso mais como migration, pois a intenção foi pré-popular dados no SAPL.

LeandroJatai commented 6 years ago

da app compilação tá liberada... é um ajuste na base dados naquele ponto, após ou numa base nova, o ajuste é irrelevante...