<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ydb/library/cpp/monlib, 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-07-07T13:37:15Z</updated>
<entry>
<title>label size extension</title>
<updated>2026-07-07T13:37:15Z</updated>
<author>
<name>ivantsvetkov</name>
<email>ivantsvetkov@yandex-team.com</email>
</author>
<published>2026-07-07T12:53:29Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=17735a730250296d50b59dec1519c693c685a541'/>
<id>urn:sha1:17735a730250296d50b59dec1519c693c685a541</id>
<content type='text'>
**Было:** Prometheus decoder ограничивает длину значений меток метрик максимум 256 символами. Попытка передать метрику с более длинным значением метки приводит к исключению `TPrometheusDecodeException`.

**Стало:** Максимальная длина значения метки расширена до 1024 символов. Системы, которые генерируют метрики с более длинными значениями (например, с ID источников данных, URL, или сложных идентификаторов), теперь могут успешно передавать такие метрики в Unified Agent без ошибок.

**Практический эффект:** Улучшение совместимости с внешними системами мониторинга и приложениями, которые требуют передачи длинных меток. Существующие системы с метками &lt; 256 символов продолжают работать без изменений.

---

## С точки зрения разработчика

### Структурные изменения

Расширение требовало изменения способа хранения длины строки в пуле коротких строк:

1. **Prometheus decoder** (library/cpp/monlib):
   - `MAX_LABEL_VALUE_LEN`: 256 → 1024

2. **Short string pool** (logbroker/unified_agent/common):
   - `MaxLabelSize`: 255 → 1024
   - **Ключевое изменение:** Размер строки теперь хранится как `ui16` (2 байта) вместо `unsigned char` (1 байт)
     - Было: `*slot-&gt;Payload() = static_cast&lt;unsigned char&gt;(s.size())`
     - Стало: `memcpy(slot-&gt;Payload(), &amp;size, sizeof(ui16))`
   - Это позволяет хранить строки до 65535 символов (но логически ограничено на уровне валидации)

### Изменённые файлы

| Файл | Основные изменения |
|------|------------------|
| `prometheus_decoder.cpp` | `MAX_LABEL_VALUE_LEN: 256 → 1024` |
| `prometheus_decoder_ut.cpp` | +2 юнит-теста для новых граничных значений |
| `short_string_pool.h` | `MaxLabelSize: 255 → 1024`, operator[] использует ui16 для чтения размера |
| `short_string_pool.cpp` | Allocation и copy логика адаптирована для ui16 |

### Тестирование

Добавлены два новых юнит-теста:

- **LabelValueAtNewLimitIsAccepted:** Метрика с меткой ровно 1023 символа успешно парсится
  ```
  "m{l=\"" + string(1023, 'a') + "\"} 1\n"
  ```

- **LabelValueOverNewLimitStillThrows:** Метрика с меткой ≥1024 символов выбрасывает исключение
  ```
  "m{l=\"" + string(1024, 'a') + "\"} 1\n"
  // → TPrometheusDecodeException: "trying to parse too long label value, size &gt;= 1024"
  ```

### Безопасность и совместимость

- ✅ Обратно совместимо: строки &lt; 256 символов работают так же
- ✅ Валидация: лимит 1024 проверяется на уровне Ref() в пуле
- ✅ Граничные случаи: добавлены тесты для 1023 и 1024 символов
- ✅ Выделение памяти: правильно рассчитано с учётом новых 2 байт для размера
- ✅ Я не нашел ситуации когда закодированная строка (длина + строка) улетала куда-то из пула и потом пыталась раскодироваться. Так что считаю, что миграции никакой не надо и все обратно совместимо. НАДЕЮСЬ Я НЕ ОШИБАЮСЬ
commit_hash:b30852954951bd8e65d69777a59ffeb58da76b47
</content>
</entry>
<entry>
<title>[monlib] Fix use-after-free in TMonService2 destructor</title>
<updated>2026-06-19T14:30:21Z</updated>
<author>
<name>kgershov</name>
<email>kgershov@yandex-team.com</email>
</author>
<published>2026-06-19T13:53:22Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=be3766e32550798ea5fe60cb2a13d703ff818636'/>
<id>urn:sha1:be3766e32550798ea5fe60cb2a13d703ff818636</id>
<content type='text'>
TMonService2 binds `this` into the HTTP handler stored in TMtHttpServer.
Stop() was only called from TImpl::~TImpl() — after TMonService2 members
(IndexMonPage, AuthProvider_) had already been destroyed. A concurrent
request could call ServeRequest() and crash on IndexMonPage-&gt;Output().

Fix: call Stop() in ~TMonService2() before member destruction.
commit_hash:f5b6aff5d9f85ae76d121a036bfd30094377c5ca
</content>
</entry>
<entry>
<title>[monlib] ewma: use monitonic clock to prevent inf cycle</title>
<updated>2026-05-18T13:02:57Z</updated>
<author>
<name>kgershov</name>
<email>kgershov@yandex-team.com</email>
</author>
<published>2026-05-18T12:12:29Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=ec76d7a2570ced405b0c4817a748b42a2de06041'/>
<id>urn:sha1:ec76d7a2570ced405b0c4817a748b42a2de06041</id>
<content type='text'>
commit_hash:76b3f7346347ae83a1170d7b629fcf3da217d877
</content>
</entry>
<entry>
<title>[library/cpp/monlib] add v3 spack encode/decode</title>
<updated>2026-04-06T14:08:32Z</updated>
<author>
<name>kgershov</name>
<email>kgershov@yandex-team.com</email>
</author>
<published>2026-04-06T13:46:20Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=ee9a12d94efbb3b7bb3e5395fa0b01f724c4d215'/>
<id>urn:sha1:ee9a12d94efbb3b7bb3e5395fa0b01f724c4d215</id>
<content type='text'>
commit_hash:91ce0e2023d29ef78fadeaded314ea236f316b8e
</content>
</entry>
<entry>
<title>add removing metrics from default set</title>
<updated>2026-03-19T11:58:08Z</updated>
<author>
<name>deruzh</name>
<email>deruzh@yandex-team.com</email>
</author>
<published>2026-03-19T10:51:58Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=b329824e21fbce7109b988fa00781ece307d8983'/>
<id>urn:sha1:b329824e21fbce7109b988fa00781ece307d8983</id>
<content type='text'>
### Описание
В данном PR реализован механизм базовой фильтрации метрик в Unified Agent. Цель — по умолчанию исключать некоторые "тяжелые" или избыточные метрики для снижения нагрузки, оставляя при этом возможность запросить полный набор.

**Основные изменения:**
* **Новый пресет фильтрации:** В `ESetParameter` добавлен режим `basic`. В отличие от `minimal` и `advanced`, работающих по принципу "белого списка" (allowlist), режим `basic` работает как "черный список" (blocklist) и исключает только заданные метрики.
* **Черный список по умолчанию:** Реализована функция `GetDefaultBlockedMetricNames()`. На данный момент в этот список добавлена метрика `UnacknowledgedBytes`.
* **Логика фильтрации:** Обновлен класс `TCountersFilter`. Теперь методы `GetAllowedNames` и `GetBlockedNames` используют единый `switch-case` по значениям `ESetParameter`. Если параметр `@set` пуст или не распознан, по умолчанию применяется поведение пресета `basic`. Пресет `all` корректно отключает любую фильтрацию.
* **Изменение дефолтного поведения:** Для плагина `agent_metrics_input` значение по умолчанию в поле `Preset` изменено на `basic`. Теперь `TCountersFilter` инстанцируется и применяется всегда, гарантируя консистентную фильтрацию.

**Тестирование:**
* В конфигурацию `test_counters_set_parameter.yml` добавлен `fs` storage и пайплайн для отправки данных через него. Это было необходимо, чтобы агент начал генерировать метрику `UnacknowledgedBytes`, связанную с файловым хранилищем.
* В `generic_tests.cpp` значительно переработан `TestCountersSetParameter`. Чтобы избежать "мигания" (flakiness) тестов из-за меняющихся значений счетчиков или появления служебных логов (например, `RecordsReceived`), реализована кастомная функция `getSensorSchema`. Она извлекает и сравнивает только структуру метрик (`kind` и `labels`), игнорируя их числовые значения.
* Добавлены строгие ассерты: тест проверяет, что метрика `UnacknowledgedBytes` **отсутствует** при базовом запросе (или при `?@set=basic`), но **гарантированно присутствует** при явном запросе `?@set=all`.
commit_hash:78b757d4c55f496e0f041ddfba8f385784b46881
</content>
</entry>
<entry>
<title>avoid clashing of counters params</title>
<updated>2026-03-10T08:45:02Z</updated>
<author>
<name>xenoxeno</name>
<email>xenoxeno@yandex-team.com</email>
</author>
<published>2026-03-10T08:24:41Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=a52478e475ee43363a4610f2b15a98f4c7468872'/>
<id>urn:sha1:a52478e475ee43363a4610f2b15a98f4c7468872</id>
<content type='text'>
commit_hash:1d15aa793cf4d50dfdab33d413cdb8480b35080a
</content>
</entry>
<entry>
<title>[cpp/monlib] add ability to mangle name in prometheus decoder</title>
<updated>2026-03-02T10:04:29Z</updated>
<author>
<name>vvminashkin</name>
<email>vvminashkin@yandex-team.com</email>
</author>
<published>2026-03-02T09:13:39Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=b065a51848d90f8131a4861ebd6ec4f4e79f548f'/>
<id>urn:sha1:b065a51848d90f8131a4861ebd6ec4f4e79f548f</id>
<content type='text'>
commit_hash:ef6584bf0941f50d0833dacd3b5d14cfc1cd30a8
</content>
</entry>
<entry>
<title>Enhance library/cpp/monlib exception verbosity for debugging</title>
<updated>2026-02-27T08:46:39Z</updated>
<author>
<name>ydynnikov</name>
<email>ydynnikov@yandex-team.com</email>
</author>
<published>2026-02-27T08:19:31Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=dd6207e99ab45fa85073d60ca22fdd9c7527f8ff'/>
<id>urn:sha1:dd6207e99ab45fa85073d60ca22fdd9c7527f8ff</id>
<content type='text'>
Этот эксепшн ронял YDB RU PRESTABLE минимум дважды:
\- 2025-09-10 &lt;https://nda.ya.ru/t/VerKgHXk7VTLyV&gt;
\- 2026-02-19 &lt;https://nda.ya.ru/t/uhTY2yqK7UtBen&gt;

Патч призван упростить отладку падений и поиски руткоза
commit_hash:72d859bae3ab265a2807e566c763bfb70a92a61a
</content>
</entry>
<entry>
<title>[monlib] Copy metrics while Append and Took</title>
<updated>2026-01-15T11:22:36Z</updated>
<author>
<name>q0un</name>
<email>q0un@yandex-team.com</email>
</author>
<published>2026-01-15T10:55:28Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=9b5311968c63372731da9cb3b1cd7b426a6bed5b'/>
<id>urn:sha1:9b5311968c63372731da9cb3b1cd7b426a6bed5b</id>
<content type='text'>
По мотивам &lt;https://nda.ya.ru/t/bI-f6SKy7Hx8RU&gt;, делаю то же самое в остальных методах
commit_hash:1bc9d85ebea976f62689b2bf9f252cb7eb85077c
</content>
</entry>
<entry>
<title>Fix prometheus nan parsing</title>
<updated>2025-12-12T14:14:17Z</updated>
<author>
<name>alexnadtochiy</name>
<email>alexnadtochiy@yandex-team.com</email>
</author>
<published>2025-12-12T13:20:28Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=3d4e0b44c9bb86ca521b20e125f1625846670605'/>
<id>urn:sha1:3d4e0b44c9bb86ca521b20e125f1625846670605</id>
<content type='text'>
commit_hash:ea34eba995ae4c386785fe89df58c439a2e3ea63
</content>
</entry>
</feed>
