Сравнить коммиты
4
Коммитов
| Автор | SHA1 | Дата | |
|---|---|---|---|
|
|
83511d6b09 | ||
|
|
83300b6c5a | ||
|
|
657d54fc75 | ||
|
|
5f2bdd921d |
@@ -643,3 +643,20 @@ def test_late_restart_watch_is_cancelled_by_user_action(fast_worker, monkeypatch
|
|||||||
watchers[0].join(timeout=5)
|
watchers[0].join(timeout=5)
|
||||||
assert not watchers[0].is_alive() and ["virsh", "start", "web01"] not in virsh.calls
|
assert not watchers[0].is_alive() and ["virsh", "start", "web01"] not in virsh.calls
|
||||||
assert "Наблюдение снято" in core.read_operation(operation["id"])["log_tail"]
|
assert "Наблюдение снято" in core.read_operation(operation["id"])["log_tail"]
|
||||||
|
|
||||||
|
|
||||||
|
def test_late_restart_rechecks_cancel_after_shutdown(fast_worker, monkeypatch):
|
||||||
|
virsh = FakeVirsh(running=True, shuts_down=False)
|
||||||
|
monkeypatch.setattr(core, "run_cmd", virsh)
|
||||||
|
monkeypatch.setattr(backups, "LATE_SHUTDOWN_WATCH", 5.0)
|
||||||
|
operation = core.new_operation("backup", "Резервная копия web01", vm_name="web01")
|
||||||
|
|
||||||
|
def shut_down_by_user(vm):
|
||||||
|
backups.cancel_late_restart(vm) # «Выключить» нажали, пока наблюдатель спрашивал состояние машины
|
||||||
|
return False
|
||||||
|
|
||||||
|
monkeypatch.setattr(core, "vm_is_running", shut_down_by_user)
|
||||||
|
backups.restart_after_late_shutdown(operation, "web01")
|
||||||
|
assert ["virsh", "start", "web01"] not in virsh.calls
|
||||||
|
assert "Наблюдение снято" in core.read_operation(operation["id"])["log_tail"]
|
||||||
|
assert "web01" not in backups.LATE_WATCHES
|
||||||
|
|||||||
@@ -35,13 +35,17 @@ class Recorder:
|
|||||||
|
|
||||||
@pytest.fixture()
|
@pytest.fixture()
|
||||||
def record(data_dirs, monkeypatch):
|
def record(data_dirs, monkeypatch):
|
||||||
"""Подменяет run_cmd и в core (vmops), и в app (обзор, страница машины)."""
|
"""Подменяет run_cmd и в core (vmops), и в app (обзор, страница машины).
|
||||||
|
|
||||||
|
Свободное место тоже подменено: временная папка тестов бывает маленькой (tmpfs),
|
||||||
|
а тесты про нехватку места задают его сами."""
|
||||||
import app
|
import app
|
||||||
|
|
||||||
recorder = Recorder()
|
recorder = Recorder()
|
||||||
for module in (core, app):
|
for module in (core, app):
|
||||||
monkeypatch.setattr(module, "run_cmd", recorder)
|
monkeypatch.setattr(module, "run_cmd", recorder)
|
||||||
monkeypatch.setattr(vmops, "_samples", {})
|
monkeypatch.setattr(vmops, "_samples", {})
|
||||||
|
monkeypatch.setattr(vmops, "free_space", lambda path: 500 * GIB)
|
||||||
return recorder
|
return recorder
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -473,6 +473,9 @@ def restart_after_late_shutdown(operation: dict[str, Any], vm: str) -> None:
|
|||||||
core.append_operation_log(operation["id"], "Наблюдение снято: машиной занялись вручную или новой задачей.")
|
core.append_operation_log(operation["id"], "Наблюдение снято: машиной занялись вручную или новой задачей.")
|
||||||
return
|
return
|
||||||
if not core.vm_is_running(vm):
|
if not core.vm_is_running(vm):
|
||||||
|
if cancelled.is_set(): # «Выключить» нажали, пока virsh отвечал на вопрос о состоянии
|
||||||
|
core.append_operation_log(operation["id"], "Наблюдение снято: машиной занялись вручную или новой задачей.")
|
||||||
|
return
|
||||||
if any(other["id"] != operation["id"] for other in core.active_operations_for(vm, OPERATION_TYPES)):
|
if any(other["id"] != operation["id"] for other in core.active_operations_for(vm, OPERATION_TYPES)):
|
||||||
core.append_operation_log(operation["id"], "Машина выключилась, но с ней уже работает другая задача — не запускаем.")
|
core.append_operation_log(operation["id"], "Машина выключилась, но с ней уже работает другая задача — не запускаем.")
|
||||||
return
|
return
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user