# Процедура переключения и возврата — шаблон для адаптации

Кейс Capordia — это команда, которая обрабатывает независимые пакеты. Цель —
возобновить идентифицированные работы, не потеряв их приёмку. Плановое
прерывание возможно. Допустимая длительность, критерии качества и
ответственность определяются до окна миграции.

## 1. Назначить ответственных

| Роль | Ответственность | Доказательство для сохранения |
|---|---|---|
| Ведущий переключения | Санкционирует остановку, смену полномочий и возобновление | Решение и время UTC |
| Ответственный за данные | Фиксирует входные данные, контролирует копию и инвентаризацию | Версионированный манифест и отпечатки |
| Ответственный за обработку | Останавливает производителя, классифицирует попытки | Реестр пакетов и журнал процесса |
| Ответственный за приёмку | Сравнивает выходные данные и согласованные критерии | Результаты, отказы и согласие на приёмку |

Небольшая команда может совмещать роли, но человек, который выносит
решение о приёмке, и тот, кто умеет останавливать старый орган управления,
должны быть идентифицируемы. Предоставленный шаблон CSV не задаёт никаких
имён.

## 2. Установить эталон перед копированием

Присвоить каждому пакету стабильный идентификатор и версию входных данных.
Записать его путь, отпечаток, точную обработку и критерий приёмки. Различать
запущенную попытку и принятый результат. Сохранять параметры и зависимости,
необходимые для возобновления, включая состояния вычислений, которых требует
ваше программное обеспечение. Имя файла `final` не доказывает приёмку.

В упражнении восемь пакетов представляют 48 фиктивных купонов. Приёмка
основана на детерминированном результате в целых числах; это не модель
чекпоинта GPU. Восемь эталонных выходных данных вычисляются до отключения.

## 3. Остановить поступление новых работ

Закрыть приём новых пакетов и зафиксировать последний принятый идентификатор.
Остановить worker или дождаться предусмотренной границы возобновления.
Подтвердить, что ни один процесс старой машины больше не может принимать
выходные данные. Классифицировать реестр: завершено, выполняется, подлежит
возобновлению. Сохранять следы неоднозначного пакета вместо того, чтобы
объявлять его завершённым по предположению.

В упражнении отключение на LOT-004 даёт 3 / 1 / 4. Перезапуск без
сверки отклоняется. Реестр и его результаты остаются вместе.

## 4. Копировать, контролировать, сменить полномочия

Цель должна располагать зафиксированным набором, необходимым состоянием и
совместимой программой. Проверить отпечатки и инвентаризацию со стороны цели.
Заблокировать возобновление, если отсутствует входные данные, если манифест
изменился или если результат больше не соответствует своему отпечатку и
правилу приёмки.

В этом упражнении `basculer` сначала закрывает источник, затем копирует
файлы после закрытия соединений. Программа открывает цель для
производства только после контроля. Не имитировать горячее копирование
активной базы вне этой процедуры. Сбой оставляет источник остановленным.

В реальной системе закрытие локального файла не запрещает изолированной старой
машине продолжать работу. Исключительное право публикации должно быть
обеспечено системой, которая принимает результаты, с отказом от старых прав
и доказательством этого отказа. Настоящая программа не обеспечивает такой
защиты.

## 5. Сверить и принять

Проверить, что все завершённые результаты присутствуют и приемлемы.
Попытки в процессе без приёмки возвращаются к возобновлению после
подтверждения остановки их прежнего производителя. Выполнить ограниченное
возобновление перед повторным открытием приёма. Учесть ожидаемые пакеты,
уникальные принятые идентификаторы, ошибки и возобновления. Записать приёмку,
отличную от простого завершения процесса.

В программе: `preparer-reprise` превращает единственный выполняющийся пакет в
пакет, подлежащий возобновлению. `executer` не пересчитывает три завершённых
пакета. Финальный контроль требует восемь принятых выходных данных, идентичных
эталону. У LOT-004 две попытки, но только один принятый результат.

## 6. Запускать возврат по наблюдаемому сигналу

| Сигнал | Предлагаемое решение для этого учения |
|---|---|
| Другой отпечаток входа | Заблокировать до обработки; восстановить зафиксированную версию |
| Результат отсутствует или изменён | Заблокировать приём; изучить пакет и состояние |
| Два возможных источника полномочий | Остановить возобновление; установить единственный источник полномочий |
| Программа не способна возобновить работу | Держать приём закрытым и перенести актуальное состояние в совместимую среду |
| Превышен срок окна | Применить решение и ограничение, установленные командой до переключения |

Если целевая сторона уже приняла новые результаты, возврат к старой копии
источника приведёт к потере этих принятий. Заморозить целевую сторону, экспортировать её
актуальное состояние, проверить его и перенести в новое место возврата.
Сверить результаты перед возобновлением. При наличии внешних эффектов
их инвентаризация входит в возврат; это учение не создаёт таких эффектов.

```text
python exercice.py basculer --source manuel/cible --destination manuel/retour --proprietaire atelier-retour
python exercice.py preparer-reprise --dossier manuel/retour
python exercice.py executer --dossier manuel/retour
python exercice.py comparer --reference manuel/reference --candidat manuel/retour
```

После этой операции `manuel/source` и `manuel/cible` закрыты. Работать может
только `manuel/retour`. Если копирование не удалось или если проверка отклонила
результат, сохранить доказательства и не разблокировать двух производителей.

## 7. Завершить миграцию

Сохранить манифест, реестр до/после, отпечатки, результаты проверки,
версию программы, решение о возобновлении и возможное решение о возврате.
Удалять старую копию только после периода хранения, выбранного
командой. Учение не удаляет ни одну папку; его ресурсы
фиктивны и могут быть заархивированы вместе с отчётом.
