[devel] Метарепозиторий Сизифа

Dmitry V. Levin =?iso-8859-1?q?ldv_=CE=C1_altlinux=2Eorg?=
Чт Ноя 8 20:42:25 MSK 2007


Hi,

On Wed, Nov 07, 2007 at 12:35:30AM +0300, Alexey Tourbin wrote:
[...]
> Короче, идея в следущем.  Есть git-репозитарий сизифа.  В нём существуют
> подкаталоги по имени каждого src.rpm пакета.  Прохождение любого
> пакета автоматически "влияет" на всё остальные (зависимые) пакеты по
> крайней мере в смысле возможности пересборки.
[...]
> Я предлагаю сделать метарепозитарий сизифа, в котором содержится
> необходимя и достаточная информация для поддержки "новой системы сборки
> пакетов".  На каждый src.rpm пакет имеется соответствующий подкаталог
> метарепозитария.
> 
> Вопрос по части мозгового штурма у меня к вам простой -- ЧТО ДОЛЖНО
> ЛЕЖАТЬ В ПОДКАТАЛОГАХ ЭТОГО РЕПОЗИТАРИЯ?

Мы обдумали этот вопрос в узком кругу (avm и ldv).
Резюме для тех, кто не будет читать дальше:
- для сборки транзакции нужен снапшот всего Сизифа;
- сделать снапшот всего Сизифа стоит недорого;
- не стоит для реализации fast forward и rebase использовать git.

Теперь более подробно.

Публикуемый Сизиф развивается линейно и последовательно, т.е. множество
опубликованных Сизифов можно пронумеровать натуральными числами.
Определённые таким образом номера можно использовать в качестве
уникальных идентификаторов публикаций Сизифа.

Сборка транзакции (A) происходит следующим образом:
- создаётся репозиторий - снапшот текущего опубликованного Сизифа (Ra);
  использование ссылок делает эту операцию дешевой;
- на этом снапшоте выполняется сборка --with-stuff исходных пакетов
  транзакции; если хотя бы один не собрался, то транзакция отменяется
  (в первой реализации сборочной системы не вижу смысла оптимизировать
  эту часть);
- на основе Ra и свежесобранных пакетов формируется новый Сизиф (Ra');
- сравниваются анметы Ra и Ra';
  в случае появления новых анметов транзакция откладывается;
- вычисляется множество (Sa') исходных пакетов в Ra', для сборки которых
  требуются свежесобранные пакеты транзакции A (точнее говоря, в сборочной
  среде которых присутствует хотя бы один из свежесобранных пакетов);
- на Ra' выполняется тестовая сборка всех пакетов из Sa';
- если хотя бы один пакет перестал собираться (по сравнению со статистикой
  сборки на Ra), то транзакция откладывается;
- (*) предпринимается попытка применить успешно собранную транзакцию к Сизифу;
  если опубликованный на этот момент Сизиф совпадает с тем Сизифом, на
  основе которого был создан снапшот Ra, то происходит fast forward:
  Ra' становится Сизифом, которому присваивается очередной номер;
  в противном случае предпринимается попытка выполнить rebase:
- создаётся репозиторий - снапшот текущего опубликованного Сизифа (Rb);
- вычисляется множество (Nab) пакетов, которое появилось/обновилось в Rb по
  сравнению с Ra; здесь предполагается, что один и тот же исходный пакет
  не может попасть в более чем одну незавершённую транзакцию;
- если в транзакции есть пакеты более старой сборки, чем одноимённые пакеты
  в Nab, то транзакция отменяется (в первой реализации сборочной системы
  не вижу смысла оптимизировать эту часть);
- на Rb заново собираются --with-stuff те пакеты из A, в сборочной среде
  которых присутствуют пакеты из Nab;
- на основе Rb и собранных пакетов A формируется новый Сизиф (Rb');
- сравниваются анметы Rb и Rb';
  в случае появления новых анметов транзакция откладывается;
- вычисляется множество (Sb') исходных пакетов в Rb', для сборки
  которых требуется хотя бы один из свежесобранных пакетов;
- на Rb' выполняется тестовая сборка всех пакетов из Sb';
  если хотя бы один пакет перестал собираться (по сравнению со статистикой
  сборки на Rb), то транзакция откладывается;
- предпринимается попытка применить успешно собранную транзакцию к Сизифу
  по вышеописанному алгоритму, см. (*).

Из этого описания можно сделать выводы о том, что нужно для обработки
транзакции:
- бинарный репозиторий Сизиф для сборки пакетов;
- быстрое формирование нового бинарного репозитория Сизифа на основе
  предыдущего и новых пакетов (есть ли у нас необходимые средства?);
- корректное вычисление анметов (действующий алгоритм apt-cache unmet,
  по всей видимости, игнорирует конфликты);
- быстрое вычисление подмножества исходных пакетов Сизифа, для сборки
  которых требуется пакеты из указанного подмножества бинарных пакетов
  Сизифа (у нас сейчас нет такого алгоритма);
- статистика сборки исходных пакетов Сизифа должна быть частью Сизифа.

Формулировка "транзакция откладывается" означает, что дальнейшая обработка
транзакции невозможна без вмешательства извне.  На практике это может
означать отмену транзакции, дополнение транзакции новыми исходными
пакетами (фактически формирование новой транзакции на основе отложенной),
или действия уполномоченных лиц по преодолению причин, из-за которых
транзакция была отложена.


-- 
ldv
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20071108/8dce78af/attachment-0002.bin>


Подробная информация о списке рассылки Devel