1Задача
В проекте, где по ночам печатаются картинки для страниц, смена в половине второго ночи не сделала ничего: один набор завис, программа получила ошибку ожидания — и на этом остановилась вся работа.
Хуже другое. Перед печатью смена спрашивала у генератора, жив ли он, и получала «ок». Генератор действительно отвечал на служебный запрос — но картинок при этом не отдавал.
Полчаса ушло впустую, и никто об этом не узнал бы до утра.
2Действия
Разобрали три отдельные ошибки.
Первая: зависание одного набора считалось концом смены. Сделали так, чтобы это был пропуск одного набора, а не остановка всего.
Вторая: если зависли два набора подряд — смена останавливается сама и освобождает видеокарту, а не занимает её до утра.
Третья, главная: проверка «жив ли генератор» смотрела на служебный ответ, который приходит «ок» даже у неработающего генератора. Заменили её на честную: перед печатью генератор должен нарисовать крошечный пробный кадр. Не нарисовал — значит не жив, и смена это знает сразу.
3Решение
Следующей ночью смена отработала полностью: за неё вышло двадцать четыре новых страницы, генератор ни разу не подвесил работу.
Правило, которое стоит переносить на любые проверки: спрашивайте не «ты жив?», а «сделай маленькую настоящую работу». Первое отвечают все, второе — только работающие.