<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ydb/library/cpp/monlib/encode/prometheus, 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>[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>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>Intermediate changes</title>
<updated>2025-01-21T08:24:01Z</updated>
<author>
<name>robot-piglet</name>
<email>robot-piglet@yandex-team.com</email>
</author>
<published>2025-01-21T07:35:12Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=03ee2133f6d49649cc6b27fbbb23cf9c62128ea8'/>
<id>urn:sha1:03ee2133f6d49649cc6b27fbbb23cf9c62128ea8</id>
<content type='text'>
commit_hash:cdae472f061820ed9998426cf0624c300468cdc8
</content>
</entry>
<entry>
<title>Remove Size, Empty and Data usages from library</title>
<updated>2024-10-04T07:14:38Z</updated>
<author>
<name>mikhnenko</name>
<email>mikhnenko@yandex-team.com</email>
</author>
<published>2024-10-04T06:58:47Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=9ad2894d3a432775a19303a5e8b7a79092017963'/>
<id>urn:sha1:9ad2894d3a432775a19303a5e8b7a79092017963</id>
<content type='text'>
commit_hash:ef5ad4cfa9e68bbfc586492e8c376c732d0a48af
</content>
</entry>
<entry>
<title>manage  prometheus</title>
<updated>2024-03-19T09:19:04Z</updated>
<author>
<name>aleksei-le</name>
<email>aleksei-le@yandex-team.com</email>
</author>
<published>2024-03-19T08:58:30Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=d3a97480a3f641699d05912eff17b2c6d69bbd3f'/>
<id>urn:sha1:d3a97480a3f641699d05912eff17b2c6d69bbd3f</id>
<content type='text'>
a543f08a6f2957757c54b3f9e5a095389a51dbeb
</content>
</entry>
<entry>
<title>skip metrics without name label instead of crashing KIKIMR-21198</title>
<updated>2024-03-18T09:10:58Z</updated>
<author>
<name>monster</name>
<email>monster@ydb.tech</email>
</author>
<published>2024-03-18T08:23:24Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=d7c2d188d2464ce858465870a39220c4dfbb5509'/>
<id>urn:sha1:d7c2d188d2464ce858465870a39220c4dfbb5509</id>
<content type='text'>
c7b986ea7dbf4feee593ab829a2ad361d46c77b0
</content>
</entry>
<entry>
<title>fix prometheus_decoder ConsumeCounter</title>
<updated>2024-02-06T09:39:13Z</updated>
<author>
<name>aleksei-le</name>
<email>aleksei-le@yandex-team.com</email>
</author>
<published>2024-02-06T09:16:42Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=a54d30580d0abf80b086d856e9d473f20109665a'/>
<id>urn:sha1:a54d30580d0abf80b086d856e9d473f20109665a</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat contrib: aiogram 3</title>
<updated>2024-01-19T10:10:03Z</updated>
<author>
<name>armenqa</name>
<email>armenqa@yandex-team.com</email>
</author>
<published>2024-01-19T09:23:50Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=2de0149d0151c514b22bca0760b95b26c9b0b578'/>
<id>urn:sha1:2de0149d0151c514b22bca0760b95b26c9b0b578</id>
<content type='text'>
Relates: https://st.yandex-team.ru/, https://st.yandex-team.ru/
</content>
</entry>
<entry>
<title>External build system generator release 65</title>
<updated>2023-12-05T09:25:06Z</updated>
<author>
<name>robot-ya-builder</name>
<email>robot-ya-builder@yandex-team.com</email>
</author>
<published>2023-12-05T08:10:55Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=96458ea3c773a8a3edb707f73db0cdedbfcfad90'/>
<id>urn:sha1:96458ea3c773a8a3edb707f73db0cdedbfcfad90</id>
<content type='text'>
Update tools: yexport, os-yexport
</content>
</entry>
</feed>
