| Commit message (Collapse) | Author | Age | Files | Lines | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
быстрой отдачи метрик в Multishard Metrics Pull
## С точки зрения пользователя
### 1. Как включать изменения
- Изменения автоматически активируются при использовании `metrics_pull_output_par` параметра
- Количество тредов в тредпуле устанавливается параметром `metrics_pull_output_threads` (по-умолчанию 1)
- Совместимо с существующими конфигурациями метрик
#### Пример конфигурации:
```yaml
experimental:
  metrics_pull_output_par: true
  metrics_pull_output_threads: 16
```
### 2. На что влияют изменения
- **Производительность обработки метрик:** Группировка метрик по шардам теперь происходит один раз в момент записи сообщения в хранилище
- **Масштабируемость:** Параллельная обработка команд на запись и чтение сообщений
## С точки зрения программиста
### 1. Новая архитектура и взаимодействие
#### Архитектура шардирования
```
TMultishardMetricsStoreHandler
    ↓
TShardedMetricsQueue
    ↓
TUAShardedMetricsWriter → IMultiShardEncoder
```
#### Принцип работы
1. **Шардирование:** Метрики группируются по ключу `(project, service, cluster)` из лейблов `__ua_project`, `__ua_service`, `__ua_cluster`
2. **Сортировка:** Внутри каждого сообщения метрики сортируются по ключам шардов
3. **Слияние:** При чтении используется priority queue для объединения шардов из разных сообщений
4. **Вывод:** Данные выводятся последовательно по шардам а внутри шарда в порядке добавления сообщений
### 2. Новые классы
#### `TMultishardMetricsStoreHandler`
- **Назначение:** Основной обработчик команд для шардированных метрик
- **Ключевые методы:**
  - `Handle(TWriteCmd&)` - запись метрик в очередь
  - `Handle(TMultishardReadCmd&)` - чтение из множественных шардов
  - `Handle(TReadCmd&)` - чтение из одного шарда - не поддерживатся
  - Обработчики остальных сообщений адаптированы для работы с `TShardedMetricsQueue`
- **Особенности:** Управляет сессиями и делегирует работу с данными в `TShardedMetricsQueue`
#### `TShardedMetricsQueue`
- **Назначение:** Очередь метрик с поддержкой шардирования
- **Ключевые структуры:**
  ```cpp
  struct TShardedMessage {
      std::unique_ptr<TOutputMessage> Message;
      std::vector<TChunk> Chunks;  // Индексы шардов
  };
  ```
- **Алгоритм:** Сортировка метрик по шардам + priority queue для слияния при чтении
#### `IUAShardedMetricsWriter` + `TUAShardedMetricsWriter`
- **Назначение:** Интерфейс и реализация для записи шардированных метрик
- **Расширение:** Добавляет методы `OnShardBegin/End`, `OnStreamBegin/End` к базовому `IUAMetricsWriter`
- **Интеграция:** Работает с `NSolomon::NMultiShard::IMultiShardEncoder`
### 3. Рефакторинг
#### Изменения в базовых классах
- **`TMetricsStoreHandlerBase`:** Вынесен метод `GetMetricsWriterOptions()` для переиспользования
- **`TUAMetricsWriter`:** Добавлено `virtual` наследование для множественного наследования
!!! - **`TOutputItem`:** Изменена видимость конструктора (убран лишний `private`)
#### Структурные изменения
- **Новый модуль:** `metrics_multishard_pull_output` с собственными классами
- **Тесты:** Добавлены unit-тесты `sharded_metrics_queue_ut.cpp` для проверки логики шардирования, а интеграционные тесты продублированы для проверки работы в параллельном режиме
- **Сборка:** Обновлен `ya.make` для включения новых файлов
commit_hash:44618a480d29307e7131b82b19473d284ea68efa
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
Разломались на вызове YLOG\_DEBUG\_F с ошибкой:
```
/home/kirill-bel/arcadia/logbroker/unified_agent/common/zstd_file_stream.cpp:39:17: error: no member named 'format' in namespace 'std'
39 |                 YLOG_DEBUG_F("TZstdFileStream starting from frame pos = {} frame offset = {}",
   |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
40 |                     lastFramePos, lastFrameOffset);
   |                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
```
В YLOG\_DEBUG\_F используется `std::format`, но хедер не включен в `library/cpp/unified_agent_client/logger.h`:
```
#define YLOG_DEBUG_F(fmt, ...) YLOG_DEBUG(std::format(fmt, __VA_ARGS__))
```
commit_hash:0a82f439ec6b8d83e2f4ac1a7d8a8c8cf29b9cc2
 | 
| | 
| 
| 
| 
| 
| 
|  | 
YLOG_<Type>(std::format(...)) to them
Мы часто используем std::format, готовясь к переходу с TString на std::string, но из-за этого появляется много лишнего кода. Поэтому были добавлены макросы логгера для удобства и существующий код был переведен на них
commit_hash:e564c913e0dc82817152b7a15c543a77812a1dcc
 | 
| | 
| 
| 
| 
|  | 
Убираю лишнее копирование. Актуально для REVIEW:7901279
commit_hash:79f0f8873f80375269dd5384e189ac4f3b260017
 | 
| | 
| 
| 
|  | 
commit_hash:af6dedadd4d7fe292bcb7a8b6de366aff4e630b1
 | 
| | 
| 
| 
| 
| 
| 
|  | 
Add test to verify the threads limit
Try to fix; Limit number of gRPC threads.
commit_hash:d525e94e0ef397bf05d367ec9904d674c17d0d76
 | 
| | 
| 
| 
| 
| 
| 
|  | 
fintech, games, geobase, infra, ipreg, juggler, kernel, keyboard, laas, library, logbroker, logos, mail
If you think that this pr has broken something for you, roll it back
commit_hash:df8e48b2a4ecbbc74a504aa3ff62ebb8f464218d
 | 
| | 
| 
| 
| 
|  | 
Всегда ожидает Close event от СДК, но проверяет таймаут ожидания. Проверка активности соединения, по таймауту сделает реконект. Немного снижено потребление cpu.
4c41128e833c27cea3d1eb0a90c086d1a328f282
 | 
| | 
| 
| 
| 
| 
|  | 
`include/grpc++` was the original directory name for all C++ header files but it conflicted with the naming scheme required for some build systems.
It is superseded by `include/grpcpp`.
ede5ac168419131cfa95db8f7d3cb0bf11597992
 | 
| | 
| 
| 
|  | 
Relates: https://st.yandex-team.ru/, https://st.yandex-team.ru/
 | 
| | 
| 
| 
| 
|  | 
* Library import 8
* Add contrib/libs/cxxsupp/libcxx/include/__verbose_abort
 | 
| |  | 
 | 
| | 
| 
| 
|  | 
Update tools: yexport, os-yexport
 | 
| |  | 
 | 
| | 
| 
| 
|  | 
https://clubs.at.yandex-team.ru/arcadia/29404
 | 
| | 
| 
| 
|  | 
https://clubs.at.yandex-team.ru/arcadia/29404
 | 
| |  | 
 | 
| |  | 
 | 
| |  | 
 | 
| |  | 
 | 
| |  | 
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
update grpc to 1.53.1
update grpcio/py3 to 1.53.1
Added patches:
    22-grpc-code-output.patch - allow translation of grpc code to internal string type.
    23-max-thread-limitation.patch - to provide interface for settings of thread number limit, as
    grpc::DynamicThreadPool doesn't provide interface to limit thread number anymore.
    24-support_for-non-abort-grpc.patch - generate exception instead of application crash
    25-forkable-destruction-order.patch - correct forkable logic for TimerManager
    27-skip-child-post-fork-operations.patch - allow to skip child post fork operations to exclude UB (used for unified agent only)
    pr33495_fox_nested_fork.patch - fix issues with nested forks
    pr33582_fork_handler.patch - disable fork handler support  if it is not requested intentionally
 | 
| | 
| 
|  | 
unified-agent - fix static initialization order problem
 | 
| |  | 
 | 
| |  | 
 | 
| |  | 
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
update grpc to 1.50.2
update grpcio to 1.50.0
Удаленные патчи:
06-flow_control.patch - логика в upstream удалена
10-fix-crash-on-fork.patch - логика в upstream удалена
12-coverity-fix.patch - логика в upstream удалена
20-P2166-string-nullptr.patch - в upstream временный объект вместо nullptr
PR29209-fix-heap-use-after-free.patch - решение есть в upstream
Добавленные патчи:
pr33085_fix_epoll1_engine_reinit.patch
21-windows_build.patch
 | 
| | 
| 
|  | 
Correct order of the GRPC_ENABLE_FORK_SUPPORT set
 | 
| | 
| 
|  | 
Update tools: yexport
 | 
| |  | 
 | 
| | 
| 
|  | 
Update tools: yexport
 | 
| |  | 
 | 
| |  | 
 | 
| |  | 
 | 
| | 
| 
|  | 
Update tools: yexport
 | 
| |  | 
 | 
|    | 
 |