<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ydb/library/cpp/unified_agent_client/formatters.h, branch main</title>
<subtitle>Mirror of YDB github repos</subtitle>
<id>https://code.mastervirt.ru/ydb/atom?h=main</id>
<link rel='self' href='https://code.mastervirt.ru/ydb/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/'/>
<updated>2026-02-15T17:01:58Z</updated>
<entry>
<title>/0: Implement logging with throttling, replace YLOG macro with a new one</title>
<updated>2026-02-15T17:01:58Z</updated>
<author>
<name>iofik</name>
<email>iofik@yandex-team.com</email>
</author>
<published>2026-02-15T16:35:37Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=e77160b4c3e62da8be22fa56345b1f80283a422f'/>
<id>urn:sha1:e77160b4c3e62da8be22fa56345b1f80283a422f</id>
<content type='text'>
### Добавлен троттлинг логов для предотвращения флуда

**Основная цель:** Защита от переполнения логов повторяющимися сообщениями.

#### Что добавлено:

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&amp;` для продления времени жизни временных объектов

#### Примеры использования:

```cpp
// Базовое использование (троттлинг 20 логов/10 сек)
YLOG_ERR("Error occurred");
YLOG_INFO("Processing item: {}", itemId);
```

#### Влияние на производительность:

- Минимальные накладные расходы: ~10-20 наносекунд на вызов (использование CPU cycles вместо системного времени)
- Атомарные операции только при необходимости логирования
- Отсутствие дополнительных (по сравнению с текущим кодом) аллокаций памяти в hot path

#### Обратная совместимость:

- Все существующие `YLOG_*` и `YLOG_*_F` макросы работают как раньше
- Добавлен троттлинг по умолчанию для всех логов (может потребовать внимания при отладке)
commit_hash:d6e98b82486b99b945a1ba264fb2da969db4fcfc
</content>
</entry>
<entry>
<title>fix: Migrate to YLOG_*_F and eliminate dangerous c_str() patterns</title>
<updated>2025-11-29T08:46:09Z</updated>
<author>
<name>andybg</name>
<email>andybg@yandex-team.com</email>
</author>
<published>2025-11-29T08:28:29Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=1895c63513ed8b03774d8ae04c4092eccaf128e6'/>
<id>urn:sha1:1895c63513ed8b03774d8ae04c4092eccaf128e6</id>
<content type='text'>
## Summary
Eliminated all dangerous c_str() patterns from unified_agent by migrating to modern YLOG_*_F formatting.

## Changes
- Remove .c_str() on temporaries in YLOG_*_F macros (1 fix)
- Migrate YLOG_*(Sprintf(...)) to modern YLOG_*_F(...) (23 fixes)

## Benefits
- Modern C++20 type-safe formatting with std::format
- Cleaner, more maintainable code (40% less in some cases)
- Better performance (no Sprintf overhead)
commit_hash:ee3f665ccc823d9e2165a90c036e5bd887cd179e
</content>
</entry>
<entry>
<title>- Global Storage Limit Feature</title>
<updated>2025-11-28T01:24:15Z</updated>
<author>
<name>andybg</name>
<email>andybg@yandex-team.com</email>
</author>
<published>2025-11-28T01:11:38Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=f96cfce288c15ac58e3a7adf174f0000e7ca44ce'/>
<id>urn:sha1:f96cfce288c15ac58e3a7adf174f0000e7ca44ce</id>
<content type='text'>
See full description in separate comment.

The open source part is to add implementation for formatter specialization for TString.
commit_hash:9501df4a7287050b72162b80823d5cbbd1d7464f
</content>
</entry>
</feed>
