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: Fri, 9 Nov 2007 00:20:02 +0300
Message-ID: <20071108212002.GA13739@nomad.office.altlinux.org> (raw)
In-Reply-To: <20071108190328.GW24160@solemn.turbinal>

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

On Thu, Nov 08, 2007 at 10:03:28PM +0300, Alexey Tourbin wrote:
> On Thu, Nov 08, 2007 at 08:42:25PM +0300, Dmitry V. Levin wrote:
> > Сборка транзакции (A) происходит следующим образом:
> > - создаётся репозиторий - снапшот текущего опубликованного Сизифа (Ra);
> >   использование ссылок делает эту операцию дешевой;
> > - на этом снапшоте выполняется сборка --with-stuff исходных пакетов
> >   транзакции; если хотя бы один не собрался, то транзакция отменяется
> >   (в первой реализации сборочной системы не вижу смысла оптимизировать
> >   эту часть);
> 
> Здесь есть тонкость: сборка --with-stuff второго и последующего пакетов
> транзакции идёт со СТАРЫМИ contents_index_bin и contents_index_all.
> То есть практика сборки --with-stuff потенциально может давать
> неправильныме зависимости -- сразу же после фиксации транзакции
> второый и последующие пакеты при тестовой пересборке могут получить
> отличающиеся зависимости.  Так что здесь есть несколько подходов:
> 0) забить; 0a) пока забить; 1) делать в хешере локальный
> contents_index_bin/all; 2) формировать временный сизиф после каждого
> пакета транзакции и вести сборку уже на нём.  Это всё равно не до конца
> решает вопрос, если зависимостями между пакетами в транзакции
> топологически не упорядочены (то есть напр. при сборке первого пакета в
> транзакции используется старая сборка одного из последующих пакетов).

Транзакция состоит не просто из множества исходных пакетов, а из списка
исходных пакетов, т.е. это множество линейно упорядочено мантейнером.

Для решения вопроса зависимостей, порождаемых под влиянием contents_index,
можно действительно выбрать один из нескольких вариантов:
- формировать contents_index по окончании сборки каждого пакета в транзакции;
- формировать временный сизиф по окончании сборки каждого пакета в транзакции;
Кроме того, можно собирать пакеты транзакции в два прохода (второй после
проверки на анметы), но это не альтернатива вышеперечисленному.

[...]
> Имеется такая "структура коммитов" в метарепозитарии:
> 
> 	     * Rb (HEAD)
> 	     |
> 	     * ...
> branch Ra' * |
>             `* Ra
> 
> Я на самом деле всегда об этом думал в терминах специальной "стратегии
> мёржа" метарепозитария, и эта идея казалась мне полдотвороной.  Теперь
> предлагается вместо мёржа делать ребейс.  Вообще-то ребейс хуже мёржа,
> но в данном случае речь идёт примерно об одной и той же алгебраической
> операции.  Мы хотим "насадить" изменение Ra->Ra' "сверху" на Rb.

Честно говоря, я пока не вижу способа реализовать merge, который не есть
по сути rebase.

> То есть имеются изменения Nab=Ra->Rb' и Naa'=Ra->Ra'.
> Можно ли их совместить "без конфликтов"?
> 
> (Важное замечание.  По сути речь идёт КРИТЕРИИ ВОЗМОЖНОСТИ мёржа/ребейса.
> Этот критерий говорит о том, что эта операция ЛИБО ВОЗМОЖНА, ЛИБО
> НЕВОЗМОЖНА.  Это замечание можно переформулировать так: нельзя
> ребейсить что угодно на что угодно.)

Чем отличается критерий возможности rebase от критерия возможности сборки
вообще?  По идее, изменение Ra->Ra' можно преобразовать (rebase) в Ra->Rb',
если транзакцию A можно собрать на репозитории Rb.

[...]
> Но можно смотреть немного по-другому.  Здесь нужен ещё один слой защиты
> от "частичного удаления" src.rpm пакетов.  То есть должна быть
> алгебраическая операция "удалить src.rpm" пакет.  src.rpm пакет может
> быть удалён только полностью, то есть в виде всех своих подпакетов.
> А новый src.rpm может быть добавлен тоже только полностью, в виде всех
> своих подпакетов.

Видимо, да.

[...]
> > - предпринимается попытка применить успешно собранную транзакцию к Сизифу
> >   по вышеописанному алгоритму, см. (*).
> 
> Это рекурсивно что ли получается?

Скорее итеративно.

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

Быстрее чем среднее время сборки пакета.

> Думаю что достаточно быстрое имеется.

В каком виде?

> > - корректное вычисление анметов (действующий алгоритм apt-cache unmet,
> >   по всей видимости, игнорирует конфликты);
> 
> По крайней мере, если новый репозитарий правильно сформирован, то
> 'apt-cache unmet' помогает обнаруживать бездумную/unintented смену
> сонейма.

Это отдельная проблема.  Просто она всплыла в процессе обдумывания, и я
отметил её.  В первом приближении можно пренебречь.

> > - быстрое вычисление подмножества исходных пакетов Сизифа, для сборки
> >   которых требуется пакеты из указанного подмножества бинарных пакетов
> >   Сизифа (у нас сейчас нет такого алгоритма);
> 
> 30 минут на машине класса mash (см. мой query-rebuild.git).
> Но это может быть намного быстрее на каком-нибудь Core2Duo,
> и, следовательно, более приемлемо.

В машинах класса mash измерять уже не интересно, но 30 минут -- это
довольно много.

> > - статистика сборки исходных пакетов Сизифа должна быть частью Сизифа.
> 
> Да.  Частью метарепозитария.  То есть нужно знать когда и в каком виде
> пакет последний раз собрался и кое-что ещё.

В моих рассуждениях было достаточно знать про каждый исходный пакет в
Сизифе Ra, собирался он или нет.  Зачем может быть нужно что-то ещё?

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

Процедура, согласно которой изменение A, первоначально сделанное для
репозитория Ra, "проигрывается" на репозитории Rb, называется rebase.
Если хочешь, называй это merge, я не против, но rebase, как мне кажется,
лучше отражает суть происходящего.

> При мёрже в метарепозитарии явно остаётся
> информация, что нечто сломалось и потом починилось.  Это ИНТЕРЕСНО.

Если во время rebase что-то сломалось, то это уже не совсем чистый rebase.

> При ребейсе эта информация исчезает, и кажется, что как-будто всё
> само шло хорошо и гладко.

Наверное, можно сохранять промежуточные состояния жизни транзакции, если
это интересно.  Я пока не вижу, зачем это может понадобиться.


-- 
ldv

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

  parent reply	other threads:[~2007-11-08 21:20 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
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     ` Dmitry V. Levin [this message]
2007-11-08 22:08       ` [devel] Метарепозиторий Сизифа 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=20071108212002.GA13739@nomad.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