<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ydb/util/thread/pool.cpp, branch CLI_2.30.0</title>
<subtitle>Mirror of YDB github repos</subtitle>
<id>https://code.mastervirt.ru/ydb/atom?h=CLI_2.30.0</id>
<link rel='self' href='https://code.mastervirt.ru/ydb/atom?h=CLI_2.30.0'/>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/'/>
<updated>2025-05-22T12:40:47Z</updated>
<entry>
<title>better fork-aware pool</title>
<updated>2025-05-22T12:40:47Z</updated>
<author>
<name>a11ax</name>
<email>a11ax@yandex-team.com</email>
</author>
<published>2025-05-22T12:00:59Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=c28fa5a5d4eee687fa35713a3b8561b8f892992a'/>
<id>urn:sha1:c28fa5a5d4eee687fa35713a3b8561b8f892992a</id>
<content type='text'>
Было: при добавлении-удалении обьекта берем мьютекс, молимся чтобы тот не оказался залочен при форке, никак перед форком на лок не смотрим

Помимо того что это просто не очень надежно, оно не всегда работает. Может случиться так что с мьютексом все нормально, но IntrusiveList все равно [скорапчен](HIDDEN_URL и список закольцован не там где надо (по всей видимости cpu reorder на apple m1 ехидничает).

Стало: берем спинлок вместо мьютекса, в том числе берем его на время форка.
commit_hash:94145ab392390a2c0b9f885275302082524606b2
</content>
</entry>
<entry>
<title>Add an option to disable the fork aware mode for TThreadPool</title>
<updated>2025-03-28T08:26:21Z</updated>
<author>
<name>andybg</name>
<email>andybg@yandex-team.com</email>
</author>
<published>2025-03-28T08:11:49Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=93724f9cd4e5c28a1e154375e40cb9722bcdb698'/>
<id>urn:sha1:93724f9cd4e5c28a1e154375e40cb9722bcdb698</id>
<content type='text'>
Продолжение починки крэшей при форке

Ситуация такая же - используем subprocess для обработки данных ( subprocess не наши, написаны множеством команд на нескольких языках под конкретные ситуации), быстро избавиться от форка не получится. Есть шанс избавиться от этого пул треда, но тоже не быстро.

Предлагается простое решение - не вызывать `TAtforkQueueRestarter::Get()`совсем, тогда не будет создание singletonа и вызова `pthread_atfork`. Все это под опцией `SetForkAware` - кто хочет может ее включать, для всех остальных ничего не изменится.

Полная обратная совместимость, фикс ничего не мог зацепить. Проверил локально, вызова `pthread_atfork` нет в `unified agent` больше.

Тесты на это очень сложно написать, без больших изменений в тред пуле, пробовал с перехватом `pthread_atfork`, к сожалении, не только `TAtforkQueueRestarter` им пользуется и нормально перехватить тоже не получилось.
commit_hash:3711c6175ca64564f31f811ee1308d70ef6eb5e3
</content>
</entry>
<entry>
<title>FixNamespaceComments in /util</title>
<updated>2024-09-05T17:17:10Z</updated>
<author>
<name>dmasloff</name>
<email>dmasloff@yandex-team.com</email>
</author>
<published>2024-09-05T17:05:47Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=74184a40c15dc0649a769d9754d0ce7efb44db04'/>
<id>urn:sha1:74184a40c15dc0649a769d9754d0ce7efb44db04</id>
<content type='text'>
FixNamespaceComments in /util
bb9152570d7c258798644ead5a59f604de05ef3b
</content>
</entry>
<entry>
<title>Set SpacesInLineCommentPrefix to 1 in /util</title>
<updated>2024-08-17T20:43:45Z</updated>
<author>
<name>dmasloff</name>
<email>dmasloff@yandex-team.com</email>
</author>
<published>2024-08-17T20:33:42Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=69340f4614e853b9319df4b454ab7497711ee3cd'/>
<id>urn:sha1:69340f4614e853b9319df4b454ab7497711ee3cd</id>
<content type='text'>
Set SpacesInLineCommentPrefix to 1 in /util
3853f9ec5143722c1bebd8dc0ffc9b61a6c17657
</content>
</entry>
<entry>
<title>Library import 6 (#888)</title>
<updated>2024-01-09T17:56:40Z</updated>
<author>
<name>AlexSm</name>
<email>alex@ydb.tech</email>
</author>
<published>2024-01-09T17:56:40Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=e95f266d2a3e48e62015220588a4fd73d5d5a5cb'/>
<id>urn:sha1:e95f266d2a3e48e62015220588a4fd73d5d5a5cb</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Y_VERIFY-&gt;Y_ABORT_UNLESS at ^u</title>
<updated>2023-10-10T07:26:34Z</updated>
<author>
<name>ilnurkh</name>
<email>ilnurkh@yandex-team.com</email>
</author>
<published>2023-10-10T07:09:12Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=335c640261b6272bc052a251d9b8780150090b45'/>
<id>urn:sha1:335c640261b6272bc052a251d9b8780150090b45</id>
<content type='text'>
https://clubs.at.yandex-team.ru/arcadia/29404
</content>
</entry>
<entry>
<title>[util] Terminate instead of deadlock after fork with running thread pools</title>
<updated>2022-11-10T09:04:05Z</updated>
<author>
<name>sskvor</name>
<email>sskvor@yandex-team.com</email>
</author>
<published>2022-11-10T09:04:05Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=6d5ed9f0166178823f3a752bfe46dd7ef5042df8'/>
<id>urn:sha1:6d5ed9f0166178823f3a752bfe46dd7ef5042df8</id>
<content type='text'>
Контекст. В древнем странном коде обнаружили, что если создавать `TThreadPool` часто и конкуретно с запуском `TShellCommand`, то иногда последняя дедлочится: если начали выполнять конструктор `TThreadPool` и регистрацию в `TAtforkQueueRestarter`, захватив `TAtforkQueueRestarter::ActionMutex`, а в другом потоке параллельно сделали `fork`, то последний может форкнуться с залоченым мьютексом. Первым делом происходит вызов коллбеков из `pthread_atfork`, где мьютекс лочится заново.

Конечно, форкаться в сложных программах с тредпулами категорически запрещено, но, подозреваю, много кода в аркадии так написано. Давайте как-то защитимся от такого.</content>
</entry>
<entry>
<title>IGNIETFERRO-1105 Get rid of TAtomic in thread/pool.cpp</title>
<updated>2022-05-17T07:48:10Z</updated>
<author>
<name>eeight</name>
<email>eeight@yandex-team.ru</email>
</author>
<published>2022-05-17T07:48:10Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=1e1dfc1b3545147948cc2190bb15161f630507e9'/>
<id>urn:sha1:1e1dfc1b3545147948cc2190bb15161f630507e9</id>
<content type='text'>
ref:3fa56aa890b75b7301a3193c2ee40106281a71cb
</content>
</entry>
<entry>
<title>IGNIETFERRO-1105 TAtomic -&gt; std::atomic in util/generic/* and threadpool</title>
<updated>2022-05-11T07:40:18Z</updated>
<author>
<name>eeight</name>
<email>eeight@yandex-team.ru</email>
</author>
<published>2022-05-11T07:40:18Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=05a6fea78142058210511273b3ece21050ad137b'/>
<id>urn:sha1:05a6fea78142058210511273b3ece21050ad137b</id>
<content type='text'>
ref:39a714b781c60dca9e3b946d870971076e14ab7c
</content>
</entry>
<entry>
<title>Restoring authorship annotation for &lt;seege@yandex-team.ru&gt;. Commit 2 of 2.</title>
<updated>2022-02-10T13:52:02Z</updated>
<author>
<name>seege</name>
<email>seege@yandex-team.ru</email>
</author>
<published>2022-02-10T13:52:02Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=e7d460ea3389cb4f573ef5fb09f7072549a17765'/>
<id>urn:sha1:e7d460ea3389cb4f573ef5fb09f7072549a17765</id>
<content type='text'>
</content>
</entry>
</feed>
