Удаление "зависших" (долго исполняющихся) задач
1. Проблема
Запущенная задача выполняется слишком долго (происходит процесс "зависания" / бесконечного выполнения задачи).
2. Решение
2.1. Вариант 1. Рекомендуемый метод
-
Проверить на хосте, который в данный момент обладает ролью
Storage Pool Manager (SPM)
, список запущенных задач командойvdsm-client Host getAllTasksInfo
, например:vdsm-client Host getAllTasksInfo { "9022a6e0-06cf-4066-b9f7-cbe23ffe851e": { "verb": "copyImage", "id": "9022a6e0-06cf-4066-b9f7-cbe23ffe851e" }, "954d8ea4-6ab6-4ec5-9d1a-3374ec106a8c": { "verb": "prepareMerge", "id": "954d8ea4-6ab6-4ec5-9d1a-3374ec106a8c" }, "c3fb509c-0554-4f10-9f73-32d346ccf012": { "verb": "copyImage", "id": "c3fb509c-0554-4f10-9f73-32d346ccf012" } }
-
После получения идентификатора задачи необходимо узнать её статус с помощь команды
vdsm-client Task getStatus taskID=<TASKID>
, где<TASKID>
получен из предыдущей команды. Например:vdsm-client Task getStatus taskID=c3fb509c-0554-4f10-9f73-32d346ccf012 { "message": "running job 1 of 1", "code": 0, "taskID": "c3fb509c-0554-4f10-9f73-32d346ccf012", "taskResult": "", "taskState": "running" }
-
Для остановки задачи и очистки задачи используются следующие команды:
vdsm-client Task stop taskID=<TaskID> vdsm-client Task clear taskID=<TaskID>
-
После остановки (очистки) необходимо проверить, список всех задач, например:
vdsm-client Host getAllTasksInfo
-
Если задача не была остановлена, то необходимо обратиться к альтернативному решению проблемы.
2.2. Вариант 2. Альтернативный метод
Если при попытке получить список задач на хосте в выводе пустое значение или задача не останавливается по методу, описанному в Варианте 1, то необходимо выполнить следующие действия:
-
Перевести кластер в режим обслуживания (на хосте).
hosted-engine --set-maintenance --mode=global
-
Подключиться к менеджеру управления по SSH / через консоль и перейти в каталог
/usr/share/ovirt-engine/setup/dbutils
-
Выполнить команды для получения пароля от БД.
source /etc/ovirt-engine/engine.conf.d/10-setup-database.conf export PGPASSWORD=$ENGINE_DB_PASSWORD
Пример успешного выполнения:
echo $ENGINE_DB_PASSWORD baaaAAAAAbbbbbbbbbbbbB
-
Остановить службу ovirt-engine.
systemctl stop ovirt-engine
-
Выполнить команду для удаления задач, которые выполняются слишком долго ("зависли" / бесконечно выполняются).
cd /usr/share/ovirt-engine/setup/dbutils ./taskcleaner.sh -RAz
-
В случае необходимости можно удалить все задачи:
cd /usr/share/ovirt-engine/setup/dbutils ./taskcleaner.sh -RA
-
Вывести кластер из режима обслуживания (на хосте).
# hosted-engine --set-maintenance --mode=none
-
Запустить службу ovirt-engine (на менеджере управления).
systemctl start ovirt-engine