Skip to Content
Руководство для пользователейВосстановление Hosted Workspace оператором

Восстановление Hosted Workspace оператором

Используйте эту процедуру только для Linux durable local-process worker на исходном хосте, чей незавершенный захват Hosted Shell сохранил аренду Workspace. Перезагрузка между prepare и complete не снимает fence; оператор по-прежнему должен убедиться, что все потенциальные источники записи в Workspace остановлены и не могут быть перезапущены, а затем предоставить доказательства с помощью complete. Восстановление делает физический Workspace доступным для новых сессий. Оно не завершает, не повторяет и не сертифицирует исходный вызов Shell.

Команда обслуживания поставляется в виде qwen-managed-agent-server-*-operator-recovery.jar. Запустите её на исходном хосте worker под служебной учетной записью ОС, используя настройки базы данных сервиса, ключ учетных данных Runtime и QWEN_MANAGED_AGENT_RUNTIME_STATE_DIRECTORY. Установите QWEN_MANAGED_AGENT_RUNTIME_DURABLE_LOCAL_PROCESS=true, QWEN_MANAGED_AGENT_RUNTIME_PROVISIONER=local-process и QWEN_MANAGED_AGENT_RUNTIME_OPERATOR_RECOVERY_ENABLED=true для этого процесса обслуживания. Не делайте базу данных и окружение учетных данных общедоступными. Примените миграцию базы данных сервиса перед запуском команды. Команда не запускает HTTP-слушатель, планировщик или worker.

  1. Найдите runtime.runtimeBindingId и runtime.generation затронутого запуска. Если запись запуска недоступна, авторизованный DBA может использовать запрос только для чтения к qwen_runtime_binding для затронутого tenant_id и workspace_id, чтобы получить список binding_id, runtime_generation и binding_state; проверьте каждого кандидата и используйте только тот, у которого есть соответствующая удерживаемая аренда и захват Shell. Выполните java -jar qwen-managed-agent-server-*-operator-recovery.jar inspect <bindingId> <generation>. Запишите возвращенные holderKey, Runtime-сессию, вызов Shell, captureStatus и captureReason. Восстановление требует сохраненного результата Shell producer_lost и точной, всё ещё удерживаемой аренды Workspace. Устаревший неподдерживаемый worker, отсутствующая регистрационная идентичность или отсутствующий держатель не могут быть восстановлены путем создания записей-замен.

  2. Выполните java -jar qwen-managed-agent-server-*-operator-recovery.jar prepare <bindingId> <generation> <holderKey> '<incident reason>'. Сохраните возвращенный recoveryId. Активный или заблокированный восстановлением binding помечается fence как OPERATOR_RECOVERY; уже потерянный binding остается LOST и исключается из фонового сканирования восстановления. Аренда Workspace не освобождается. Повторение с той же служебной учетной записью ОС и причиной безопасно. Другая записанная учетная запись, причина, generation или держатель отклоняются. Запишите человеческого оператора отдельно в записи инцидента; operator_id идентифицирует учетную запись ОС, запускающую команду.

  3. Остановите исходный worker и проверьте все возможные источники записи в Workspace, включая отсоединенные дочерние процессы и внешних супервизоров. Предотвратите перезапуск исходного worker и источников записи. Подтвердите, что они остановлены. Завершение группы процессов, EOF канала, истекшее время и потеря родительского PID сами по себе недостаточны. Если это невозможно установить, остановитесь и оставьте Workspace в состоянии fence.

  4. Создайте обычный (не symlink) UTF-8 JSON-файл размером не более 8 КиБ непосредственно в приватном каталоге состояния Runtime, с режимом 0600, со следующими полями (замените примерные значения):

    { "version": 1, "recoveryId": "<recoveryId>", "verifiedAt": "2026-09-29T03:00:00Z", "method": "host inspection", "actions": "Stopped worker and detached writers; disabled their external restart source; verified no writer remains", "restartPrevention": true }

    verifiedAt должен быть фактическим временем проверки в UTC, не ранее prepare и не более чем на пять минут впереди часов хоста обслуживания. Запишите конкретные шаги и источник предотвращения перезапуска; никогда не записывайте утверждение до завершения этих проверок. Держите файл и запись инцидента приватными.

  5. Выполните java -jar qwen-managed-agent-server-*-operator-recovery.jar complete <recoveryId> <absoluteEvidenceFile>. Команда проверяет точную сохраненную идентичность worker и, в рамках той же загрузки, её отсутствие; после перезагрузки исходного хоста она проверяет измененную идентичность загрузки. Затем она помечает регистрацию как tombstone, сохраняет неизменяемое утверждение и возвращает только исходного держателя. Команду можно повторить с тем же файлом после сбоя или временной ошибки базы данных. Измененное утверждение отклоняется. Успешный вывод — completed.

После завершения запустите новую сессию и убедитесь, что она может использовать Workspace. Проверьте исходный ход отдельно: его частичный вывод и неопределенные эффекты остаются неопределенными, и ни один вызов Shell не воспроизводится. Не очищайте таблицы SQL или файлы регистрации вручную для обхода отказа. Если исходная регистрация отсутствует или повреждена, или worker из устаревшего эфемерного режима, эта процедура не поддерживается; эскалируйте с сохраненными доказательствами, а не фальсифицируйте их.

Программное обеспечение может проверить зарегистрированную идентичность worker и точный SQL-держатель, но не может доказать, что произвольные сбежавшие потомки остановлены. Утверждение оператора является границей доверия для этого факта.

Last updated on