diff options
| author | andybg <[email protected]> | 2025-11-23 01:30:13 +0300 |
|---|---|---|
| committer | andybg <[email protected]> | 2025-11-23 01:48:12 +0300 |
| commit | 99383234453575439d497e697d4f6b6edbdc384a (patch) | |
| tree | 547c73cb61a2bff903f7b01813e7b434f8d71808 /library/cpp/threading/queue | |
| parent | 23256baf0e807c1ef0cec31efcce505684474f9d (diff) | |
Fix gRPC retry parser initialization race condition
Проблема:
Сегментация через ~42 секунды после запуска UA в ServiceConfigParser::GetParserIndex("retry").
Причина:
Static Initialization Order Fiasco + Lazy Initialization в gRPC CoreConfiguration.
RetryFilter пытается получить парсер до того, как CoreConfiguration зарегистрировала его.
Решение:
1. Устанавливаем лимиты потоков ДО grpc_init() (статические параметры)
2. Явно вызываем grpc_init() для гарантии выполнения всех статических инициализаторов
3. Принудительно инициализируем CoreConfiguration через CoreConfiguration::Get()
Это гарантирует порядок:
- Настройка лимитов потоков
- Инициализация библиотеки gRPC
- Построение CoreConfiguration с регистрацией всех парсеров
- Только после этого фильтры могут безопасно использовать retry парсер
Изменения:
- library/cpp/unified_agent_client/grpc_io.cpp: Исправлена EnsureGrpcConfigured()
- tests/ut/grpc_init_ut.cpp: Добавлены unit тесты
- tests/grpc_init_check/: Standalone тестовая программа
- tests/ut/ya.make: Интеграция тестов в систему сборки
Все тесты прошли: 640/640 OK
commit_hash:ed4601dfe21f6dfac653dec6e9c3e535e5a0a09c
Diffstat (limited to 'library/cpp/threading/queue')
0 files changed, 0 insertions, 0 deletions
