[devel] I: git.alt update
Dmitry V. Levin
ldv на altlinux.org
Пн Ноя 22 23:52:01 UTC 2010
On Tue, Nov 23, 2010 at 02:11:02AM +0300, Alexey Tourbin wrote:
[...]
> С другой стороны, смотри. Узнать, что репозиторий изменился (и что
> придётся проигрывать всё задание заново) можно гораздо раньше, чем
> в самом конце при попытке коммита задания.
Вопрос в том, всегда ли интересно узнать это гораздо раньше?
Я полагаю, что сборку задания имеет смысл довести до конца,
не интересуясь изменением репозитория, в двух случаях:
- задание test-only (его всё равно не придется коммитить);
- номер итерации задания равен 1 (не факт, что оно вообще соберется);
> Это также наводит на мысль, что клонировать репозиторий нет необходимости.
> Достаточно иметь операцию
>
> lock_repo_for_reading,check_the_repo_is_unchanged,otherwise_fail_and_schedule_task_for_reiteration
>
> Далее нарезать girar-builder, чтобы некоторые куски выполнялись под этим
> локом, а некоторые - без него. Наример, gb-remote-build нужно разрезать на
> две части: первая часть выполнятеся под локом, она готовит чрут для сборки
> (в том числе выгребает пакеты из репозитория). Вторая часть просто
> собирает пакет - упрощенно говоря 'hsh-run rpmbuild ...', лок на
> репозиторий для этого не нужен.
Пожалуй, можно так сделать, и обработка задания тогда будет прерываться
быстрее, чем сейчас. Но что это даст на практике? Сейчас, судя по
таймингам в логах сборки, задание с номером итерации > 1 проводит очень
много времени в gb-task-gen-testrepo, и с этим пока ничего не получается
сделать. apt -- наш главный тормоз как при вычислении зависимостей
(high startup costs), так и при вычислении индексов.
$ egrep '^(Mem|Buffers|Cached|Active|Inactive|Slab)' /proc/meminfo
MemTotal: 24627408 kB
MemFree: 1032952 kB
Buffers: 737652 kB
Cached: 20408488 kB
Active: 5720820 kB
Inactive: 15464156 kB
Slab: 2271392 kB
> > задание переводится в состояние COMMITTING, репозиторий обновляется,
> > и выполнение задания завершается.
> > > Гарантируется ли строгая (логическая) сериализация заданий?
> > А что это значит?
>
> Это понятие из теории СУБД. Транзакции могут выполняться параллельно,
> но с точки зрения самой транзакции она выполняется как бы эксклюзивно,
> а результат параллельного выполнения должен быть такой, как если бы
> транзакции выполнялись в каком-либо порядке. Иначе возникают неприятные
> побочные эффекты (самый известный и простой - продать два билета на одно
> место).
В этом смысле да, такая сериализация заданий гарантируется.
При условии что gb-task-validate-state и кэширование в
gb-remote-build/gb-remote-check-install реализовано правильно, конечно.
> Т.е. одно коммитится, все остальные идут на реитерацию.
Да.
--
ldv
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : отсутствует
Тип : application/pgp-signature
Размер : 198 байтов
Описание: отсутствует
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20101123/b47935f4/attachment.bin>
Подробная информация о списке рассылки Devel