# Миграция в новую схему с 1 доменов для каждого юзера ## Текущие оставшиеся проблемы: ### 1. по коду - [x] в функции создания домена для всех инфровых проектов, нужно убрать создание линки к юзеру и создавать сервисный домен-проект https://gitlab.corp.mail.ru/infra/back/breeze/-/blob/federation_domains/app/breeze/migration_domains.lua#L51 - [x] ! при открате миграции еще нет удаления глобальных доменов - [x] ! при откате миграции остаются лишние линки на инфровом проекте (нужно оставить только _member_ и тд (сервисные)), и остаются лишние на доменном проекте - нужно оставить только все mcs_* (для этого следующий пункт) - [x] ! проверить, что все доменные проекты связаны только линками mcs_*, а все инфровые проекты только сервисными линками, проверить и удалить иные - [x] сделать более простой логику swap (с новой миграцией так и так переделается эта часть) - как в миграции, так и в обратной миграции https://gitlab.corp.mail.ru/infra/back/breeze/-/blob/federation_domains/app/breeze/migration_domains.lua#L153 - [x] box.atomic передвинуть выше (в миграции и в обратной) - для всех проектов юзера, а не только для одного https://gitlab.corp.mail.ru/infra/back/breeze/-/blob/federation_domains/app/breeze/migration_domains.lua#L153 https://gitlab.corp.mail.ru/infra/back/breeze/-/blob/federation_domains/app/breeze/migration_domains.lua#L231 - [x] bag c ctx, здесь пид приклеиваем, а не uid еще раз https://gitlab.corp.mail.ru/infra/back/breeze/-/blob/federation_domains/app/breeze/migration_domains.lua#L231 - [x] миграция не для всех зеров, а только для корпов (как migrate_projects + добавить examine на user.email) ### 2. остальное - [x] обсудить изменение отображения в хорайзен, в плашке перечисления проектов, owner.email -> pid (поскольку берется project.name, у инфровых проектов project.name был = owner.email, у остальных проектов name = pid) --- ## Тестирование на снапшотах: снапшоты с омеги и прода лежат на тачке mcs.devmail.ru ОМЕГА: /tmp/00000000000102400178.snap ПРОД: /tmp/00000000000319880059.snap ### запуск из моего хомяка: 1) в /home/a.sukhova/etcd/etcd.yaml для омеги в instance_uuid поставить 0002, вот так: ```lua instances: breeze_01: box: instance_uuid: 1457A4CE-0001-0002-0000-000000000000 ``` для прода в instance_uuid поставить 0005, вот так: ```lua instances: breeze_01: box: instance_uuid: 1457A4CE-0001-0005-0000-000000000000 ``` после этого сделать: ```perl perl upload.pl ``` в etcd уже задизейблено все, что нужно (то есть все) 2. чистим старые снапы и кладем нужный снап (в /home/a.sukhova/breeze) ```bash rm data/breeze_01/* rm data/breeze_02/* cp /tmp/00000000000102400178.snap data/breeze_01/00000000000102400178.snap ``` 3. из /home/a.sukhova/breeze запускаем breeze ```bash tarantoolctl enter breeze_01 ``` ### запуск из своего хомяка: 1. клонируете себе в хомяк breeze и etcd 2. копирете etcd.yaml из моего хомяка /home/a.sukhova/etcd/etcd.yaml запускаете etcd ```bash perl upload.pl ``` 3. а дальше 1-2-3 как для моего хомяка --- ## План выкатки до миграции ACCESS_RULES ---> BREEZE & APEX ---> OCEAN & HAAR ---> MIGRATION 1. выкатываются access_rules на демона (изменения только у Frost, Zephyr, Ocean) - новые правила убирают проверку на is_domain = true (после выкатки breeze сразу начинают создавать не доменные проекты) 2. выкатки breeze, apex_breeze. После этого пункта ново пришедшие юзеры создаются в новой схеме 3. выкатка демонов (Haar, Ocean (не забыть mcs_daemons_common)) в обоих демонах изменения только в Lab->Infra и функциях вызова квот код работает как на новых юзерах, которые создаются, так и на всех остальных ## План миграции все функции из **breeze.migration_domains** **1.** проверки различными функциями (в комментарии указано требуемое значение) ```lua local md = require 'breeze.migration_domains' return md.check_owned_projects() -- = 0 ``` ```lua local md = require 'breeze.migration_domains' return md.check_projects_flags() -- = 0 ``` ```lua local md = require 'breeze.migration_domains' return md.check_projects_in_domain() -- strange = 0 ``` ```lua local md = require 'breeze.migration_domains' return md.check_projects_in_domain() -- strange = 0 ``` **2.** создание домена для хранения всех инфровых проектов (если сохранится такая схема) ctx.prefix = CREATE_INFRA_DOMAIN ```lua local md = require 'breeze.migration_domains' return md.create_domain_for_all_infra() ``` **3.** миграция 1 юзера ctx.prefix = MIGRATE_USER ```lua local md = require 'breeze.migration_domains' local ctx = require 'ctx'('MIGRATE_USER') local email = "email@email.ru" local res = {} res.was = md.get_info_user({email = email}) md.migrate_user(ctx, {email = email}) res.now = md.get_info_user({email = email}) return res ``` **4.** миграция корпов сделать мунволкер по корпам **5.** миграция всех ctx.prefix = MIGRATE_PROJECTS ```lua local md = require 'breeze.migration_domains' return md.migrate_projects() -- should be: dont migrate 0 users ``` --- ## Откат: общий план MIGRATION_BACK --> OCEAN & HAAR --> BREEZE & APEX --> MIGRATION_BACK -> AR 1. откат миграции для всех (comeback_projects_migrate()) 2. откат демонов : Haar, Ocean 3. откат пакетов breeze, apex_breeze 4. еще раз откат миграции для всех (для тех, кто успел создаться, пока откатывали пакеты) 5. откат access rules (но и с новыми тоже живем, в новой версии ослабление) ## Откат миграции (п. 1 и 4)** не забыть в comeback_projects_migrate поправить: - добавить удаление глобального домена, во время отката каждого юзера - правильно выбрать роли на перенос на проект и удаление с инфрового проекта (mcs_ vs сервисные) 1. откатываем всех ```lua local md = require 'breeze.migration_domains' return md.comeback_projects_migrate() -- should be: dont migrate back 0 users ```