# Миграция в новую схему с 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
```