Удаление "зависших" (долго исполняющихся) задач

1. Проблема

Запущенная задача выполняется слишком долго (происходит процесс "зависания" / бесконечного выполнения задачи).

2. Решение

2.1. Вариант 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"
        }
    }
  2. После получения идентификатора задачи необходимо узнать её статус с помощь команды 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"
    }
  3. Для остановки задачи и очистки задачи используются следующие команды:

    vdsm-client Task stop taskID=<TaskID>
    vdsm-client Task clear taskID=<TaskID>
  4. После остановки (очистки) необходимо проверить, список всех задач, например:

    vdsm-client Host getAllTasksInfo
  5. Если задача не была остановлена, то необходимо обратиться к альтернативному решению проблемы.

2.2. Вариант 2. Альтернативный метод

Если при попытке получить список задач на хосте в выводе пустое значение или задача не останавливается по методу, описанному в Варианте 1, то необходимо выполнить следующие действия:

  1. Перевести кластер в режим обслуживания (на хосте).

    hosted-engine --set-maintenance --mode=global
  2. Подключиться к менеджеру управления по SSH / через консоль и перейти в каталог /usr/share/ovirt-engine/setup/dbutils

  3. Выполнить команды для получения пароля от БД.

    source /etc/ovirt-engine/engine.conf.d/10-setup-database.conf
    export PGPASSWORD=$ENGINE_DB_PASSWORD

    Пример успешного выполнения:

    echo $ENGINE_DB_PASSWORD
    baaaAAAAAbbbbbbbbbbbbB
  4. Остановить службу ovirt-engine.

    systemctl stop ovirt-engine
  5. Выполнить команду для удаления задач, которые выполняются слишком долго ("зависли" / бесконечно выполняются).

    cd /usr/share/ovirt-engine/setup/dbutils
    ./taskcleaner.sh -RAz
  6. В случае необходимости можно удалить все задачи:

    cd /usr/share/ovirt-engine/setup/dbutils
    ./taskcleaner.sh -RA
  7. Вывести кластер из режима обслуживания (на хосте).

    # hosted-engine --set-maintenance --mode=none
  8. Запустить службу ovirt-engine (на менеджере управления).

    systemctl start ovirt-engine