---
# System prepended metadata

title: Миграция в новую схему с 1 доменов для каждого юзера

---

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