summaryrefslogtreecommitdiffstats
path: root/library/cpp
Commit message (Collapse)AuthorAgeFilesLines
* delete nullptr is a no-opakhropov2026-04-061-2/+1
| | | | commit_hash:7bea862660ba289cd58b74fac07d57aa126aa1c1
* IBinSaver::HasNonTrivialSerializer should be constexpr.akhropov2026-04-052-8/+8
| | | | commit_hash:515a085472bab89404ad6e51f91be61ac01d9094
* New version of the tld SKIP_CHECK SKIP_REVIEWrobot-ratatosk2026-04-041-1/+1
| | | | commit_hash:02ffad2516143e0c872a0d52eda33561e23e3ec2
* Intermediate changesrobot-piglet2026-04-031-0/+6
| | | | commit_hash:fec2286eb1fd675e7d50f7da7695f393a5b0a5aa
* YT-27872: Refactor BIND to fix ODR violationsdann2392026-04-036-22/+52
| | | | commit_hash:25c6545fed2bffe20f7a008a218b9245896926ec
* YT-27872: Fix ConvertToYsonString ODR violationdann2392026-04-031-0/+2
| | | | commit_hash:70f4e2c519e189107c5e9dec6ba45eeb58973f46
* Add TErrorOr::ValueOrCrashdann2392026-04-033-0/+67
| | | | commit_hash:7a04b71703a53450dbaa8ec880141545e019a71e
* New version of the tld SKIP_CHECK SKIP_REVIEWrobot-ratatosk2026-04-011-1/+1
| | | | commit_hash:3ffe8eb8d830a76efbd1fad2e6ebda2b140215c7
* Use a forward declaration instead on an includeakhropov2026-03-312-2/+5
| | | | commit_hash:6f0226afc878b77a48efdd142971b568aa0bf405
* fix library/cpp/regex/pcreuzhas2026-03-312-9/+200
| | | | commit_hash:6b6fb1b60f32209f80d85e4e33889e192a35ac07
* Intermediate changesrobot-piglet2026-03-291-3/+3
| | | | commit_hash:986e0f49b3f095829d1a8af7f2f88521055e63a1
* Fix styleakhropov2026-03-291-9/+12
| | | | commit_hash:2ba91e501cb0d1d5f727d7018af5bdc34ebd51f2
* New version of the tld SKIP_CHECK SKIP_REVIEWrobot-ratatosk2026-03-281-1/+1
| | | | commit_hash:ab715a19c7c9819d6130970851b148010f9189bd
* Intermediate changesrobot-piglet2026-03-273-1/+9
| | | | commit_hash:6f47ff10b7e4503466c226a6d3df0637a5c14715
* ClearCache() method in NMallocalxmopo3ov2026-03-265-1/+24
| | | | commit_hash:2a9ac53b44252aeea5188e821743fc79b064947b
* Add suggestions on enum parse errorpechatnov2026-03-264-8/+63
| | | | commit_hash:3b7f35f613737aa92f473877e8b24782f7dfcd2a
* fix cpp --list-tests logicn-khamraev2026-03-251-17/+13
| | | | commit_hash:520dd74e9a7cc021d91d1f5a2b6db883b21188c5
* Allow to change (reduce) max queue size for common elastic queuekulikov2026-03-233-1/+28
| | | | | Add same method as in TFastElasticQueue, and test. commit_hash:0a2b618325e57c32fd269254a7dbe912849c3f10
* YT-18571: Drop YT_ATTRIBUTE_NO_UNIQUE_ADDRESS in favor of Y_NO_UNIQUE_ADDRESSbabenko2026-03-231-6/+0
| | | | commit_hash:c574736c9cbb7c6da6502dc751214d8d7f343568
* YT-18571: Drop YT_ATTRIBUTE_NO_SANITIZE_ADDRESS in favor of ↵babenko2026-03-231-2/+0
| | | | | | Y_NO_SANITIZE("address") commit_hash:30841b1871a64fd6b3cc1eebcc9e4d5f1281c4fa
* New version of the tld SKIP_CHECK SKIP_REVIEWrobot-ratatosk2026-03-221-1/+1
| | | | commit_hash:45c2f193373485b196c00cf6cec6faf32822bb4a
* Support loopback-only binds in messagebusaneporada2026-03-213-25/+72
| | | | commit_hash:1acc39366e0b54658fb2847e848a9bc3b7a8b8a6
* Switch to std atomicskulikov2026-03-204-29/+26
| | | | commit_hash:5d980b19ed177f3a4ce03ba7c7d89ab9d711b8e8
* Drop backward compat with grpc-prevthegeorg2026-03-201-1/+1
| | | | commit_hash:e5545cade7cc946c943e85c680db7c276edc48b5
* add removing metrics from default setderuzh2026-03-191-1/+1
| | | | | | | | | | | | | | | | | ### Описание В данном 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
* [json] Add non-const version of `GetStringSafe` method (relates)mvel2026-03-193-0/+16
| | | | | Странно, что такого метода не было. А он полезен, если хочешь хачить уже имеющуюся структуру. commit_hash:09763c7c08d149a27867a4cf5908b694b3024e99
* New version of the tld SKIP_CHECK SKIP_REVIEWrobot-ratatosk2026-03-191-1/+1
| | | | commit_hash:f7e9a90ba49fd848eaff6b094704bd3b2946c40f
* revert piglet config changepefavel2026-03-1714-537/+0
| | | | commit_hash:d068d68a89226c414a3d5a1f8ad102579bdd233b
* add fastapi to piglet configpefavel2026-03-1614-0/+537
| | | | commit_hash:6962a6b28ec3ee5fdc2392a2415810aaa54943c4
* New version of the tld SKIP_CHECK SKIP_REVIEWrobot-ratatosk2026-03-161-1/+1
| | | | commit_hash:6e15bd10891b4a28d44b0bf6ef5e72c33b047eb1
* YT-18571: Extract and refactor execution stacksbabenko2026-03-144-0/+232
| | | | commit_hash:856b6638d9642f4711f5058d77bd58dd78accb8a
* YT-18571: Turn TPackedPtr into a strong typedefbabenko2026-03-144-12/+17
| | | | commit_hash:1deb4fa77014b102af1c79903f60641f23a50813
* Fix TAsyncJoiner "already joined" crashandybg2026-03-143-0/+32
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ## 1. Где и когда это может происходить Гонка проявляется при **одновременном** завершении задачи (Unregister/Join) и выполнении finish-действия `CommitTimer()` в воркере. Типичные сценарии: - **Остановка агента** — при shutdown закрываются сессии, по задачам вызывается Unregister(); в это же время воркер может доходить до finish-действий уже «уходящей» задачи. - **Закрытие сессии/канала** — например, отключение клиента, ошибка — владелец вызывает Unregister() по задаче, в которой использовался таймер. - **Плагины и задачи, подверженные багу:** любые, что используют `TLocalTimersQueue` (отложенные таймеры через `DelayedExecutor`). В коде UA это, в частности: - **http_output** (`plugins/lib/http/http_sender.cpp`) — таймеры для отложенных повторов запросов и flush; - **file_input** (`plugins/file_input/file_input.cpp`) — таймеры при работе с файлами; - **logbroker_output_new** (`plugins/logbroker_output_new/logbroker_output_impl.h`) — таймер обновления метрик. Во всех этих случаях задача владеет `TLocalTimersQueue`, при установке таймера в finish-действие попадает `CommitTimer()`, и при быстром Unregister() возможна гонка с Join(). --- {% cut "Зачем потоку воркера вызывать Ref()" %} Таймер планируется **асинхронно**: `DelayedExecutor.SetTimer(Timer, triggerTime)` регистрирует callback в отдельном потоке (sleeper). Когда время наступит, callback вызовется **уже после** того, как `Run()` задачи завершился. Задача и её контекст (сессия, `TLocalTimersQueue`, `ExecutionJoiner`) должны оставаться валидными до срабатывания или отмены таймера — иначе callback приведёт к use-after-free. **Ref()** — это «удержание» задачи: пока есть лишний Ref, `Join()` не завершится (Refs не станет 0). То есть: «задача не считается полностью завершённой, пока таймер не сработал или не был сброшен». Когда таймер сбрасывают или очередь финализируют, вызывается **UnRef()** — тогда задача может перейти в joined. **Где именно вызывается Ref/UnRef:** Файл `logbroker/unified_agent/common/delayed_executor.cpp`: ```cpp void TLocalTimersQueue::CommitTimer() { if (Queue.GetCount() > 0) { const auto triggerTime = Top().Value(); if (!TimerTriggerTime.Defined() || ...) { if (!TimerTriggerTime.Defined()) { // ← ЗДЕСЬ: перед первой установкой таймера в DelayedExecutor // держим задачу «живой» до срабатывания/сброса таймера if (!TTaskExecutor::CurrentTaskOrDie().ExecutionJoiner().TryRef()) { CommitTimerScheduled = false; return; } } DelayedExecutor.SetTimer(Timer, triggerTime); // асинхронный таймер TimerTriggerTime = triggerTime; } } else if (TimerTriggerTime.Defined()) { DelayedExecutor.ResetTimer(Timer); TTaskExecutor::CurrentTaskOrDie().ExecutionJoiner().UnRef(); // таймер снят — отдаём Ref TimerTriggerTime.Clear(); } ... } ``` `CommitTimer()` вызывается из **finish-действия** задачи (добавляется в `EnsureCommitTimerScheduled()` → `AddFinishAction([this]() { CommitTimer(); })`), т.е. выполняется в потоке воркера после выхода из `Run()`. Пример использования таймера из кода плагина — `plugins/lib/http/http_sender.cpp`: там `LocalTimerQueue.SetTimer(request->Timer, triggerTime)` планирует отложенный повтор запроса; callback при срабатывании постит событие в сессию. {% endcut %} --- {% cut "Контекст: участники и суть гонки" %} **Участники:** - **ExecutionJoiner** (`TAsyncJoiner`) — объект с атомарным счётчиком `Refs` (начальное значение 1). Пока `Refs >= 1`, задачу считают «активной». `Join()` вызывает `UnRef()`; когда `Refs` становится 0, вызывается `Promise.SetValue()` («joined»). - **Поток задачи (Task/Unregister)** — владелец задачи; вызывает `Unregister()` → `ExecutionJoiner_.Join()` → внутри один раз `UnRef()`. - **Поток таймера (Worker/Timer)** — воркер пула задач; выполняет finish-действия задачи. Одно из них — `CommitTimer()`, которое при первой установке таймера вызывало `ExecutionJoiner().Ref()`. **Гонка:** между моментом, когда поток задачи делает `Join()` (и доводит `Refs` до 0), и моментом, когда поток воркера выполняет `CommitTimer()` и вызывает `Ref()`. Если `Ref()` вызывается уже после перехода в «joined», `fetch_add(1)` возвращает 0 и срабатывает `Y_ABORT_UNLESS(result >= 1, "already joined")`. {% endcut %} --- {% cut "До фикса: креш при гонке" %} Поток задачи вызывает `Unregister()` и ждёт `Join()`. Поток воркера после завершения `Run()` выполняет finish-действие `CommitTimer()`. Если к этому моменту `Join()` уже выполнил `UnRef()` и `Refs == 0`, вызов `Ref()` в `CommitTimer()` приводит к падению. ```mermaid sequenceDiagram participant TaskThread as Поток задачи participant Joiner as ExecutionJoiner participant WorkerThread as Поток воркера Note over TaskThread,WorkerThread: Задача с таймером: Run() вызвал SetTimer(), в finish-действия добавлен CommitTimer() TaskThread->>TaskThread: Unregister() TaskThread->>Joiner: Join() Joiner->>Joiner: UnRef() → Refs = 0 Joiner->>Joiner: Promise.SetValue() — joined WorkerThread->>WorkerThread: Выполняет finish-действия WorkerThread->>WorkerThread: CommitTimer() WorkerThread->>Joiner: Ref() Joiner->>Joiner: fetch_add(1) → result = 0 Joiner->>WorkerThread: Y_ABORT_UNLESS(result >= 1) — CRASH ``` **Итог:** в момент вызова `Ref()` в `CommitTimer()` объект уже в состоянии «joined» (`Refs == 0`), проверка в `Ref()` не выполняется → **SIGABRT**. {% endcut %} --- {% cut "После фикса: корректный выход без креша" %} В `CommitTimer()` вместо `Ref()` вызывается `TryRef()`: атомарно проверяется `Refs >= 1` (через CAS); если уже 0, `TryRef()` возвращает `false` и `CommitTimer()` сразу выходит, не вызывая `Ref()` и не трогая таймер. ```mermaid sequenceDiagram participant TaskThread as Поток задачи participant Joiner as ExecutionJoiner participant WorkerThread as Поток воркера Note over TaskThread,WorkerThread: Та же гонка: Join() и CommitTimer() выполняются почти одновременно TaskThread->>TaskThread: Unregister() TaskThread->>Joiner: Join() Joiner->>Joiner: UnRef() → Refs = 0 Joiner->>Joiner: Promise.SetValue() — joined WorkerThread->>WorkerThread: Выполняет finish-действия WorkerThread->>WorkerThread: CommitTimer() WorkerThread->>Joiner: TryRef() Joiner->>Joiner: load(Refs) = 0 → current < 1 Joiner->>WorkerThread: return false WorkerThread->>WorkerThread: CommitTimerScheduled = false return Note over WorkerThread: Таймер не ставится, креша нет ``` **Итог:** при уже «joined» состоянии `TryRef()` возвращает `false`, `CommitTimer()` завершается без вызова `Ref()` и без падения. {% endcut %} --- {% cut "Сводка изменений" %} | Место | До фикса | После фикса | |-------|----------|-------------| | `CommitTimer()` при первой установке таймера | `Ref()` → при Refs=0 креш | `TryRef()` → при `false` ранний выход | | `TAsyncJoiner` | Только `Ref()` / `UnRef()` | Добавлен `TryRef()` (CAS, при refs<1 возврат false) | | `Finalize()` | Не сбрасывал активный таймер | При `TimerTriggerTime.Defined()` — `ResetTimer`, `UnRef()`, `Clear()` до `Finalized = true` | Тест `TestTimerQueueUnregisterNoCrash` (500 итераций: задача с таймером → Pulse → Unregister) без фикса периодически воспроизводит креш; с фиксом — стабильно зелёный. {% endcut %} commit_hash:5f57d88fc53f44db31e87deaeca57a7e9ef262ca
* Implement some bulk methods (Retain and ApproximateSize) for TConcurrentHashmarakasov2026-03-142-0/+62
| | | | commit_hash:d1b4740ab0854d5cd2baaff61c17709d97f398f0
* YT-27634: Annotate DCAS with TSAN intrinsicssabdenovch2026-03-132-3/+97
| | | | commit_hash:7b0bb805a82d9829ea93f5b867962e77a2c56244
* Fix TFreeList and its unittests for 32 bit platformbabenko2026-03-133-35/+85
| | | | commit_hash:6d5cf8bea86a35efd558df2aaec98702dc514f1c
* Intermediate changesrobot-piglet2026-03-131-4/+4
| | | | commit_hash:0f03724e68eb4d3d411946e1c7b201d1b79f951a
* 32-bit compatible library/cpp/yt/memorybabenko2026-03-133-3/+17
| | | | commit_hash:f68a98021cf1e69e6ac402deb24dc2eef75162f5
* New version of the tld SKIP_CHECK SKIP_REVIEWrobot-ratatosk2026-03-131-1/+1
| | | | commit_hash:7d0102e6cd782673cf13aa1236a16c60bd9dfc3a
* YT-18571: Don't use tagged/packed ptrs in Hazard Pointersbabenko2026-03-121-7/+9
| | | | commit_hash:4744aaa8f540cfc9351f1aacb9e1431d115aed85
* YDB Import 879robot-ydb-importer2026-03-117-533/+0
| | | | commit_hash:425df4b2e29754d12668340c6c3301e7c1e9a63e
* [yt/misc] remove 64-bit requirement error directivevasko2026-03-111-5/+0
| | | | commit_hash:5bb34cf1e8e039b59fff79917c694509fff4666c
* Intermediate changesrobot-piglet2026-03-111-0/+5
| | | | commit_hash:6b6f1dd36f3baf421a79d6fd4ff8bfb04f4f8af2
* Prefer CA bundle set by SSL_CERT_FILE and SSL_CERT_DIR (common part)Konstantin Khlebnikov2026-03-113-11/+63
| | | | | | | | | | | | | | | | - **library/cpp/openssl: prefer CA set by SSL_CERT_FILE and SSL_CERT_DIR** - **contrib/tools/python3: prefer CA set by SSL_CERT_FILE and SSL_CERT_DIR** - **library/python/certifi: prefer CA set by SSL_CERT_FILE and SSL_CERT_DIR** First three commits from PR #1607 to change common part separately. --- Pull Request resolved: https://github.com/ytsaurus/ytsaurus/pull/1635 Co-authored-by: shadchin <[email protected]> Co-authored-by: shadchin <[email protected]> commit_hash:21db0cd5fe3b4af267dcf5ec4d2753fbdd49ba1e
* avoid clashing of counters paramsxenoxeno2026-03-102-7/+58
| | | | commit_hash:1d15aa793cf4d50dfdab33d413cdb8480b35080a
* New version of the tld SKIP_CHECK SKIP_REVIEWrobot-ratatosk2026-03-101-1/+1
| | | | commit_hash:05f48a8ca986fe6128d7937d84d03ff7bd44b1ea
* YT-27605: YT_LOG_FATAL_AND_THROW captures log message in error attributebabenko2026-03-093-9/+61
| | | | | | | I'm quite unhappy with the amount of copy-pasted and slightly altered code but the differences between `YT_LOG_ALERT_AND_THROW` and `YT_LOG_EVENT` are too subtle for a reasonable generalization. This commit also fixes some misplaced `[[(un)likely]]` annotations. commit_hash:3eda6b52e0e0cea0daf4d996602d446de2d7d732
* New version of the tld SKIP_CHECK SKIP_REVIEWrobot-ratatosk2026-03-071-1/+1
| | | | commit_hash:20a583287838cf09f34109fb4ec0ed8825b2210f
* YT-27421, YT-27419, YT-27420: Fix data race in GetDataStatisticsbabenko2026-03-064-0/+228
| | | | commit_hash:2d7af3653dc3c1036b3b52409faba2fae321046a
* [yt/string] bit-independent version of FormatPointerValuevasko2026-03-061-3/+4
| | | | commit_hash:77b05e63c7d030fccb8d13d83f5e9dc4f660e19d