Open ad-m opened 4 years ago
Z perspektywy danych pomiędzy wersją pierwsza, a drugą:
Należy wykonać:
Ważne jest zachowanie poprawnych dat, także pól daty utworzenia i daty modyfikacji.
@magul ma alternatywną koncepcje niż JSON tj. skasowanie migracji z obecnego projektu, rozpoczęcie ich z modelu v1, a następnie dopisanie migracji Django, co pozwala zamknąć to wszystko w frameworku. Jak dla mnie będzie to karkołomne, bo logicznie stworzyliśmy z jednej logicznej modułu Django wiele modułów Django, a migracje Django dobrze sobie w obliczu zmian w jednym module, a nie wielu, ale może czegoś implementacyjnie nie widzę. W praktyce każda skuteczna i wiarygodna metoda jest dopuszczalna. Proces może być powolny, ale musi być zautomatyzowany, bo mamy 8500 listów, 1320 spraw. Proces może być powolny, ale musi być zautomatyzowany. Możemy zamrozić aplikacje na czas procesu.
Chwilowo mam trochę bardziej klasyczną koncepcję, tzn. migrator działający na funkcjonalnej instancji v2 i ładujący dane z backupu v1. Takie podejście wydaje się bardziej elastyczne i przy odrobinie szczęscia nie będzie jakoś bardzo skomplikowane.
W zarysie:
Dla mnie to brzmi akceptowalnie. Co potrzebujesz?
Backupy będą punktem wyjściowym więc chwilowo nic poza:
Nie rozumiem o jakiej procedurze w obu kierunkach mówisz.
Polityka kopii bezpieczeństwa jest polityką dla całej organizacji trzymana w repozytorium watchdogpolska/infra. Tam jest całość Ansible dla produkcji. Ten wąski zakres działalności nie jest otwartym repozytorium. Dla bazy danych robimy mysqldumpa, a dla plików robimy kopie systemu plików całej wirtualnej maszyny z wykorzystaniem duply.
Obecnie nie mogę udostępnić pełnego backupu, bo system przechowuje dane Stowarzyszenia klientów (Stowarzyszenie czasem przyłącza się do sprawy i uczestniczy na prawach w cudzej sprawie), który oczekują ochrony swoich danych, więc konieczne jest upoważnienie itd. Proponuje jednak, że na początek przekażę dump bazy danych z wersji demo, która jest podzbiorem produkcji, która nie zawiera danych wrażliwych. To powinno pozwolić wykonać migrator dość bezpiecznie.
Zrzut produkcyjnej bazy danych zajmuje 27 MB, ale to też jest przesadzone:
[23:46:31] root@db:/mnt/mysql/mysql/small_eod
# du * -s | sort -n
4 account_emailaddress.frm
4 account_emailconfirmation.frm
4 auth_group.frm
4 auth_group_permissions.frm
4 auth_permission.frm
4 auth_user.frm
4 auth_user_groups.frm
4 auth_user_user_permissions.frm
4 cases_case.frm
4 cases_case_decision_scope.frm
4 cases_case_inaction_scope.frm
4 cases_case_proceddings_interrupted.frm
4 cases_case_responsible_people.frm
4 cases_case_status.frm
4 cases_case_tags.frm
4 cases_case_time_of_info_provide.frm
4 cases_case_what_scope.frm
4 cases_case_whose_case.frm
4 cases_channel.frm
4 cases_dictionary.frm
4 cases_institution.frm
4 cases_institution_tags.frm
4 cases_lettername.frm
4 cases_person.frm
4 cases_tag.frm
4 db.opt
4 django_admin_log.frm
4 django_content_type.frm
4 django_migrations.frm
4 django_session.frm
4 django_site.frm
4 extracts_mail.frm
4 socialaccount_socialaccount.frm
4 socialaccount_socialapp.frm
4 socialaccount_socialapp_sites.frm
4 socialaccount_socialtoken.frm
8 cases_letter.frm
96 cases_channel.ibd
96 cases_dictionary.ibd
96 django_migrations.ibd
96 socialaccount_socialapp.ibd
112 auth_group.ibd
112 auth_permission.ibd
112 auth_user.ibd
112 cases_person.ibd
112 cases_tag.ibd
112 django_content_type.ibd
112 django_site.ibd
128 account_emailaddress.ibd
128 account_emailconfirmation.ibd
128 auth_group_permissions.ibd
128 auth_user_groups.ibd
128 auth_user_user_permissions.ibd
128 cases_case_decision_scope.ibd
128 cases_case_inaction_scope.ibd
128 cases_case_proceddings_interrupted.ibd
128 cases_case_responsible_people.ibd
128 cases_case_time_of_info_provide.ibd
128 cases_case_what_scope.ibd
128 cases_institution_tags.ibd
128 cases_lettername.ibd
128 socialaccount_socialaccount.ibd
128 socialaccount_socialapp_sites.ibd
128 socialaccount_socialtoken.ibd
176 cases_institution.ibd
240 cases_case_whose_case.ibd
256 cases_case_status.ibd
352 cases_case_tags.ibd
656 django_session.ibd
9220 cases_case.ibd
11264 cases_letter.ibd
12288 django_admin_log.ibd
45056 extracts_mail.ibd
Tabela extracts_mail
to stare dane, które nie podlegają migracji.
Tabela django_admin_log
także nie musi być zmigrowana.
@AgnieszkaZdanowicz , korzystasz jeszcze z https://small-eod.siecobywatelska.pl/admin/extracts/mail/ ?
"procedura w obu kierunkach" -> miałem na myśli backup i restore instancji v1. Dobrze byłoby móc postawić lokalnie v1 na danych z backupu w razie potrzeby. Na bazie tego co napisałeś wnioskuję, że nie jest to bardziej skomplikowane niż wczytanie dumpa plus ew. upewnienie się że pliki są dostępne we właściwym miejscu.
Dump demo brzmi OK.
Proszę zrzut z demo https://files.jawne.info.pl/private_html/2020_09_oopiexea8IechahkeeCoosoogh5eshu6Aijoubah9iv3Yo3Yah Odrobinę go zredagowałem, aby bez oporów go opublikować tu.
Zerknij proszę na https://github.com/arkhebuz/small_eod/blob/migrator/backend-project/small_eod/migration_v1/README.md
W sekcji issues jest kilka kwestii ale najważniejsze jak zmigrować relacje do Person
(v1). Person
nie musi mieć fk usera, no i w przykładowym dumpie żaden wpis nie ma. Pytanko jak to poprawnie ugryźć, bądź nie. Jeśli chcemy zmigrować userów v1 ->v2 to pytanko kontrolne jak handlować tabele socialaccount_*
, auth_group
, auth_permission
.
Stworzyłem szkic PR na https://github.com/watchdogpolska/small_eod/pull/562 .
is_staff`` i
is_admin` na użytkowniku w zakresie ACL, a na pewno możemy bazować i możemy po migracji ręcznie odtworzyć uprawnienie, dokonując rewizji modeluBardzo dziękuje za pracę nad zagadnieniem. Widać szerokie przeanalizowanie tematu, a podejście mi się podoba. Przejrzyste, stosunkowo proste, nie tworzące bagażu w przyszłości.
@AgnieszkaZdanowicz , korzystasz jeszcze z https://small-eod.siecobywatelska.pl/admin/extracts/mail/ ?
@ad-m nie korzystam
A jak będziecie zamrażać aktualne EOD, to na jaki czas? Bo dla nas to podstawa działania i pilnowania terminów, więc musimy się przygotować
Nie dłużej niż 3 dni (RPO to 3 dni zdaniem Marcina konsultacji z Zarządem) i możemy zachować możliwość odczytu, a termin będzie uzgodniony.
Musimy:
Operacja incydentalna, może być wykonana częściowo ręcznie.