Міграція збереженої історії попередніх версій
Використовуйте цю офлайн-процедуру, коли розгортання Durable Workflow
2.0 лише з Avro повідомляє unsupported_payload_codec для стану,
збереженого з ранішої публічної попередньої версії 2.0. Вона перетворює
відомі представлення з позначкою JSON, без позначки та застарілі Avro
Value, не відкриваючи старий кодек запущеному застосунку v2.
Експорт історії не замінює цю процедуру. Він є переносимою копією run й не змінює рядків бази даних, які перевіряє запуск розгортання. Ніколи не видаляйте історію для проходження попередньої перевірки.
Визначте, що потрібно перетворити
Активні run можуть завершитися на поточній розгорнутій попередній версії. Дочекайтеся їх завершення перед вікном обслуговування, якщо це операційно безпечно. Термінальні run, закриті виконання, збережені для replay, та стан, що не може завершитися, потрібно перетворити. Міграція перелічує обидві групи й не видаляє жодної.
Пробний запуск охоплює інтерфейси протоколу, які перевіряє запуск Server:
- входи й результати workflow, payload activity, команди, signal, update, виклики служб, завдання перевірки update та посилання стійких потоків;
- вбудовані кадри single-object та явні конверти payload у подіях історії;
- посилання зовнішнього сховища payload, включно з формою посилання, кодеком, доступністю об’єкта, кількістю байтів і цілісністю SHA-256.
Власні мапи memo, пошукових атрибутів, контексту й діагностики клієнта не є оголошеннями кодека та залишаються незмінними. Невідомі кодеки, невідомі fingerprint схем, пошкоджені посилання й значення, які не представляються фіксованою схемою Avro Value, позначаються unsafe. Небезпечна знахідка блокує застосування.
Межа відповідальності
Команда належить пакету Workflow PHP, але має виконуватися в процесі, що володіє підключенням до бази й налаштуваннями зовнішніх payload:
- Вбудований Laravel: встановіть цільовий пакет Workflow у checkout
застосунку, потім виконайте його
php artisanза зупинених процесів web, черг, scheduler та обслуговування. - Окремий Server: використовуйте одноразову оболонку або job із цільового образу Server з тією самою базою, конфігурацією просторів імен, обліковими даними та підключеними сховищами зовнішніх payload. Тримайте звичайний bootstrap hook і всі процеси Server зупиненими до успішного перетворення.
Не підключайте сторонній checkout застосунку до бази. Політика сховища простору імен є частиною перевірки цілісності. Процес, який не може прочитати зовнішній об’єкт, повідомляє unsafe без припущень.
Порядок розгортання
-
Залишайте стару попередню версію доступною до завершення активних run, які ви вирішили дочекатися. Потім зупиніть усіх авторів записів бази: вузли API, worker, scheduler, job bootstrap і job обслуговування.
-
Зробіть знімки бази та зовнішнього сховища об’єктів за звичайною політикою відновлення. Збережіть старий артефакт застосунку або Server.
-
Встановіть або завантажте цільовий артефакт із
workflow:v2:migrate-prerelease-history, але не запускайте його. Виконайте пробну інвентаризацію з цього артефакту:php artisan workflow:v2:migrate-prerelease-history --dry-run --jsonНульовий код завершення означає безпечну конвертованість кожного зачепленого значення. Перегляньте шляхи й ID зачеплених run. Ненульовий код із
unsafe_fieldsпонад нуль блокує оновлення. Виправте доступ до сховища або залишайтеся на старій попередній версії. -
Оберіть новий приватний шлях резервної копії та новий приватний каталог доказів у постійному сховищі. Жоден із них не має існувати. Застосуйте один раз:
php artisan workflow:v2:migrate-prerelease-history \--backup=/secure/dw-prerelease-history-backup.json \--evidence-dir=/secure/dw-prerelease-history-evidenceКоманда записує резервну копію до початку оновлень і відмовляється перезаписувати докази. Вона блокує та оновлює рядки бази в одній транзакції, зберігає ідентичності workflow та run, перевіряє хеші й розміри зовнішніх об’єктів і залишає кожен початковий зовнішній об’єкт. Заміни є копіями Avro з адресацією за вмістом. Історія не видаляється.
-
Дочекайтеся завершення команди. Вона експортує й виконує строгий replay кожного зачепленого збереженого run, перебудовує його проєкції огляду, очікувань, часової шкали, timer і лінії походження, перевіряє їхню відповідність та повторює інвентаризацію payload. Успіх потребує всіх трьох перевірок. Зберігайте звіти replay і проєкцій разом із резервною копією.
-
Виконайте звичайний цільовий bootstrap лише після успішної міграції:
php artisan server:bootstrap --forceДля вбудованого Laravel виконайте звичайну процедуру міграції/bootstrap застосунку. Попередня перевірка payload лише Avro має бути чистою перед запуском будь-якого нового worker, вузла API, scheduler або процесу обслуговування.
-
Запустіть цільове розгортання та перевірте готовність і replay чи query збереженого run через звичайний інтерфейс оператора. Зберігайте пакет міграції протягом вікна відкату.
Відкат
Якщо застосування, replay, перевірка проєкцій або фінальна інвентаризація завершуються помилкою, оновлення заблоковане. Залишайте всі процеси запису зупиненими й виконайте команду відкату, надруковану міграцією. Для наведених шляхів вона така:
php artisan workflow:v2:migrate-prerelease-history \
--rollback-from=/secure/dw-prerelease-history-backup.json \
--evidence-dir=/secure/dw-prerelease-history-evidence
Відкат перевіряє digest резервної копії та стан міграції, відмовляється перезаписувати докази відкату й відновлювати рядок, змінений після перетворення. Він атомарно відновлює початкові значення бази та зберігає замінні зовнішні об’єкти як докази. Потім відновіть попередній артефакт застосунку або Server. Якщо відкат відмовляє через зміни іншого процесу запису, залиште оновлення заблокованим і відновіть узгоджені знімки бази та сховища об’єктів із кроку 2.
Після відкату розгортання лише Avro очікувано знову не проходить попередню перевірку. Усуньте небезпечний стан, створіть нові шляхи резервної копії та доказів і повторіть повну процедуру перед новою спробою оновлення.