Re: Генерация pool-based репозиториев
Victor Wagner -> debian-russian@lists.debian.org @ Tue, 5 Mar 2019 07:27:45 +0300:
>> > Прикрутить туда осмысленную систему exclusive и shared блокировок
>> > при условии того, что задания крутятся на куче разных машин и в
>> > репозиторий ходят apt-ом весьма нетривиально.
>>
>> Любая система с блокировками содержит race condition :) Один мутекс
>> еще нет, а любая система уже да.
> Ну, слава богу, в конторе, которая занимается разработкой СУБД, люди,
> способные грамотно спроектировать систему блокировок - найдутся.
>
> В принципе, одного мутекса НА КАЖДЫЙ РЕПОЗИТОРИЙ (например, все дебианы
> это один репозиторий, все убунты - другой, а каждая астра - отдельный)
> тут хватит.
> Основная проблема - гарантировать то, что при любых сбоях сборочного
> задания, в том числе и при ошибке установки пакетов-зависимостей,
> блокировка будет снята.
Собственно, не знаю, как нынче в конторах, которые занимаются
разработкой СУБД, а вообще в мире параллельных выполнений нынче модно,
если ресурсы позволяют (ага, это несколько дороже, чем блокировки, порой
заметно дороже, зато надежнее) оптимистическая конкуренция. Это вот то,
что в описанном случае выражается в виде "сделаем свою копию,
эксклюзивную по построению, и потом попытаемся заменить ею
оригинал". Если операция замены обломалась по причине неконсистентности,
откатываем все нафиг (ну, "все", вообще говоря, контекстно, не факт, что
всю сборку целиком) и повторяем заново.
Обычно при реализации какая-то блокировка для момента замены (она, как
водится, _почти_ атомарна) употребляется, но она уже простая, и ее можно
сделать надежной. Если говорить о вышеописанной реализации, то можно
сделать специально обученного демона, которому делегируется эта
операция. Она простая, а запросы можно выполнять строго по очереди.
Reply to: