ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: "Dmitry V. Levin" <ldv@altlinux.org>
To: ALT Linux Team development discussions <devel@lists.altlinux.org>
Subject: Re: [devel] Метарепозиторий Сизифа
Date: Thu, 8 Nov 2007 20:42:25 +0300
Message-ID: <20071108174225.GA31673@basalt.office.altlinux.org> (raw)
In-Reply-To: <20071106213530.GN24160@solemn.turbinal>

[-- Attachment #1: Type: text/plain, Size: 4826 bytes --]

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

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

  parent reply	other threads:[~2007-11-08 17:42 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-11-06 21:35 Alexey Tourbin
2007-11-07  5:23   ` Alexey Tourbin
2007-11-07  5:50     ` Хихин Руслан
2007-11-07  7:01       ` Alexey Tourbin
2007-11-07 21:37         ` Kirill A. Shutemov
2007-11-07 10:16 ` Alexey I. Froloff
2007-11-07 10:38   ` Alexey Gladkov
2007-11-07 10:39 ` Alexey Gladkov
2007-11-07 10:43 ` Alexey Gladkov
2007-11-07 10:49   ` Alexey Gladkov
2007-11-08 17:42 ` Dmitry V. Levin [this message]
2007-11-08 18:38   ` Sergey Vlasov
2007-11-08 20:17     ` Dmitry V. Levin
2007-11-08 19:03   ` Alexey Tourbin
2007-11-08 19:20     ` Kirill A. Shutemov
2007-11-08 19:46       ` Alexey Tourbin
2007-11-08 19:23     ` [devel] bootstrap транзакции Alexey Tourbin
2007-11-08 21:20     ` [devel] Метарепозиторий Сизифа Dmitry V. Levin
2007-11-08 22:08       ` Alexey Tourbin
2007-11-08 22:30         ` [devel] git-репозитарий для логов сборки Alexey Tourbin
2007-11-08 22:48           ` Dmitry V. Levin
2007-11-08 23:28             ` Alexey Tourbin
2007-11-09  1:09               ` Dmitry V. Levin
2007-11-09  1:21                 ` Alexey Tourbin
2007-11-09  2:06             ` Alexey Tourbin
2007-11-08 22:38         ` [devel] Метарепозиторий Сизифа Dmitry V. Levin
2007-11-08 23:04           ` Alexey Tourbin
2007-11-09  1:06           ` Alexey Tourbin
2007-11-09  6:44             ` Kirill A. Shutemov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20071108174225.GA31673@basalt.office.altlinux.org \
    --to=ldv@altlinux.org \
    --cc=devel@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git