<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ydb/library/cpp/monlib/encode, 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>[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>[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>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>
<entry>
<title>[fetcher] use lz4 encoding</title>
<updated>2025-09-01T10:37:50Z</updated>
<author>
<name>vvminashkin</name>
<email>vvminashkin@yandex-team.com</email>
</author>
<published>2025-09-01T10:19:45Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=d5c732f136c153c49ae5c22be4d767a05a2ace6e'/>
<id>urn:sha1:d5c732f136c153c49ae5c22be4d767a05a2ace6e</id>
<content type='text'>
[fetcher] use lz4 encoding
commit_hash:e29504c1f68be2a5d138dbba0ed461b2f2568b97
</content>
</entry>
<entry>
<title>monlib : memOnly support for JSON encoding/decoding (cpp)</title>
<updated>2025-03-06T11:53:44Z</updated>
<author>
<name>miktorius</name>
<email>miktorius@yandex-team.com</email>
</author>
<published>2025-03-06T09:11:55Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=618663dff0c22bb5fc2a8b1d946d6b91ac572fb4'/>
<id>urn:sha1:618663dff0c22bb5fc2a8b1d946d6b91ac572fb4</id>
<content type='text'>
json encoder memonly

attempt
commit_hash:0cef79f66356a94c398c76dc9baf2fe3ea9a6948
</content>
</entry>
<entry>
<title>monlib : adding memOnly flag support for cpp lib</title>
<updated>2025-03-03T09:35:24Z</updated>
<author>
<name>miktorius</name>
<email>miktorius@yandex-team.com</email>
</author>
<published>2025-03-03T09:16:59Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=e5e00e2a402f3028369f177f5919182949a71ba6'/>
<id>urn:sha1:e5e00e2a402f3028369f177f5919182949a71ba6</id>
<content type='text'>
commit_hash:cffc55ecd6d0ea22c3c2ce52f21e6aba6da16a15
</content>
</entry>
<entry>
<title>Intermediate changes</title>
<updated>2025-01-29T21:24:09Z</updated>
<author>
<name>robot-piglet</name>
<email>robot-piglet@yandex-team.com</email>
</author>
<published>2025-01-29T21:11:41Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=e3a485514230672eb07f60514d2bb2094af6dabd'/>
<id>urn:sha1:e3a485514230672eb07f60514d2bb2094af6dabd</id>
<content type='text'>
commit_hash:c284e5d683d750f2d89e1bcccb3f4d334b47d60c
</content>
</entry>
<entry>
<title>Intermediate changes</title>
<updated>2025-01-28T08:56:03Z</updated>
<author>
<name>robot-piglet</name>
<email>robot-piglet@yandex-team.com</email>
</author>
<published>2025-01-28T08:43:22Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=a46cdb4e0519df2ffae8712bc7dc228c7e375389'/>
<id>urn:sha1:a46cdb4e0519df2ffae8712bc7dc228c7e375389</id>
<content type='text'>
commit_hash:93f812fd528231c67adb63e20e083855d68bfe8d
</content>
</entry>
</feed>
