Вопрос знатокам

Телепередача "Что? Где? Когда?"

Вопрос с черным ящиком — одна из самых старых традиций клуба «Что? Где? Когда?». На неделе приключилась рабочая история, которая напомнила мне эту самую традицию.

Очередной релиз — всё протестировано, QA и PO дали своё добро на внедрение — релиз покатился в заранее запланированное время, поды с новой версией сервиса прекрасно раскатываются на кластере, ошибок в логах не наблюдается. Все, казалось бы, рады…

Но фактически сервис не работает, как ожидается.

Вопрос знатокам — «Что же в чёрном ящике?»

Не буду углубляться в технические детали, скажу лишь, что найденная на следующий день проблема достойна размещения в музее пыток багов.

Проблема заключалась в том, что разработчики ошибочно поместили часть критически важной логики работы микросервиса внутри условия, которое выполнялось только при наличии уровня логгирования «DEBUG» (для примера накидал на Python):

logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO) # Сейчас стоит INFO, DEBUG-код не выполнится

def process_data(some_id):
    print(f"Обработка каких-то данных {some_id}")
    if logger.isEnabledFor(logging.DEBUG):
        // Здесь какая-то критически важная логика
    
    // Остальной код

Конечно же, на всех тестовых стендах логика приложения работала ровно так, как ожидается, поскольку на них выставлен был уровень логгирования «DEBUG», а на продакшне был «INFO».

Ба-дум-тсс!…

К слову, данную ошибку обнаружил Claude Opus буквально в первый проход по коду проекта. Если бы у коллеги было этой подписки, сидели бы как знатоки над чёрным ящиком.

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *