summaryrefslogtreecommitdiffstats
path: root/yql/essentials/udfs/common/python/python_udf
diff options
context:
space:
mode:
authoriofik <[email protected]>2026-02-15 19:35:37 +0300
committeriofik <[email protected]>2026-02-15 20:01:58 +0300
commite77160b4c3e62da8be22fa56345b1f80283a422f (patch)
tree3e6cd088b5a5df12c2c5aeae3523d1c62c891400 /yql/essentials/udfs/common/python/python_udf
parentd753bb4e20250dc96d4f597f2d23d368a3d04823 (diff)
/0: Implement logging with throttling, replace YLOG macro with a new one
### Добавлен троттлинг логов для предотвращения флуда **Основная цель:** Защита от переполнения логов повторяющимися сообщениями. #### Что добавлено: 1. **Механизм троттлинга логов** ([`common/util/logger.h`](common/util/logger.h), [`common/util/logger.cpp`](common/util/logger.cpp)) - Ограничение: по умолчанию максимум 20 сообщений за 10 секунд для каждой точки логирования - Независимый троттлинг для каждого места вызова `YLOG` (через `static` переменную состояния) - Подсчёт пропущенных сообщений с выводом в формате `[+N suppressed]` - Минимальные накладные расходы: использует `GetCycleCount()` вместо системных вызовов времени - Атомарные операции для потокобезопасности 2. **Настраиваемый троттлинг** - Макрос `YLOG_THROTTLED(logger, priority, maxLogs, intervalSec, ...)` для кастомных лимитов - Макросы `YLOG_THROTTLE_MAX_LOGS` и `YLOG_THROTTLE_INTERVAL_SECS` для глобальной настройки (например, в тестах) 3. **Поддержка C++20 `std::format`** - Макросы `YLOG_*` теперь поддерживают форматирование в стиле C++20: `YLOG_ERR("value: {}", x)` - Обратная совместимость с `YLOG_*_F` макросами сохранена - Специальная обработка `TStringBuilder` для избежания проблем с временными объектами 4. **Тесты** ([`tests/gtests/logger_tests/`](tests/gtests/logger_tests/)) - Проверка базового троттлинга - Проверка счётчика пропущенных сообщений - Проверка независимости троттлинга для разных точек логирования - Проверка форматирования сообщений #### Технические изменения: **Изменён порядок аргументов в макросе `YLOG`:** - Было: `YLOG(priority, message, logger)` - Стало: `YLOG(logger, priority, message, ...)` Это изменение потребовало обновления всех вызовов `YLOG` в кодовой базе (~30 файлов), но обеспечивает: - Единообразие с другими логирующими библиотеками - Возможность использования variadic arguments для форматирования - Правильную работу с `const auto&` для продления времени жизни временных объектов #### Примеры использования: ```cpp // Базовое использование (троттлинг 20 логов/10 сек) YLOG_ERR("Error occurred"); YLOG_INFO("Processing item: {}", itemId); ``` #### Влияние на производительность: - Минимальные накладные расходы: ~10-20 наносекунд на вызов (использование CPU cycles вместо системного времени) - Атомарные операции только при необходимости логирования - Отсутствие дополнительных (по сравнению с текущим кодом) аллокаций памяти в hot path #### Обратная совместимость: - Все существующие `YLOG_*` и `YLOG_*_F` макросы работают как раньше - Добавлен троттлинг по умолчанию для всех логов (может потребовать внимания при отладке) commit_hash:d6e98b82486b99b945a1ba264fb2da969db4fcfc
Diffstat (limited to 'yql/essentials/udfs/common/python/python_udf')
0 files changed, 0 insertions, 0 deletions