ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Igor Zubkov <igor.zubkov@gmail.com>
To: ALT Linux Team development discussions <devel@lists.altlinux.org>
Subject: [devel] Last outage of packages.altlinux.org. Post Mortem.
Date: Tue, 5 Jul 2016 21:33:27 +0300
Message-ID: <CAJXf7QMjk7yibzt_8hGyEc4-vbF6JPP1mhHEt0B7zs6VRhDpAg@mail.gmail.com> (raw)

Hi,

Я хочу рассказать что было, почему пошло не так и что было сделано.

10 мая я начал работу по переводу prometheus2.0 движка с rails 4.2 на
rails 5.0. Задача вполне себе стандартная, перевести проект с одной
версии рельсы на другую. Семь дней назад это был закончено и готово к
выкатыванию. Было немного рефакторинга и много тестов. Было много
обновлено используемых rubygems (в том числе и из upstream git),
добавлено немного фич (я надеюсь их заметили :) ) и общие улучшения
для облегчения поддержки всего этого в будущем.

Потом было стандартное выкатывание. Которое (на удивление) не вызвало
никаких проблем. Веб часть как работала так и работала. И я читал логи
которые мне присылает сам prometheus2.0. Через пару часов я обнаружил
в логах дубликаты пакетов и отключил обновление.

Пока веб часть работала, я выяснял что пошло не так. Post Mortem
показал что не работали Observer'ы. Observer это такой шаблон
проектирования. Это когда один объект сообщает другому что он
изменился и надо выполнить какой-то код. Через механизм обсерверов я
переписал то, как работает импорт пакетов и их удаление. Тесты
показывали что все работает и все бы работать если бы не баг в
реализации rails-observers (это rubygem такой). Эти обсерверы просто
не вызывались. В документации написано, сделайте так и у вас они
заработают. Но как оказалось, не с rails 5. Как результат, каша в
базе.

И так, что было сделано что бы это исправить. Вариант, удалить все и
заимпортить заново не рассматривался. Как слишком долгих и тяжелый.
Это было бы 1-1,5 недели. Я удалил из базы все пакеты которые были
добавлены в базу дважды для одного бранча. Удалил кеш redis (в нем
лежит информация о том, был ли пакет добавлен или нет).
Перегенерировал кеш и снял с паузы обновления. Сейчас ситуация
стабилизировалась, но если Вы увидите что, что-то идет не так, пишите.
Буду исправлять.

Ну и что было сделано что бы такого больше не было. Первое, я
отказался от observers. rails-observers. Наверно их не зря выкинули из
ядра rails в отдельный rubygem. Я (опять) переписал этот код. Второе,
я починил скрипт восстановления кеша redis. Ну и третье, я хотел
написать валидацию что в одном бранче может быть только один пакет с
именем (e.g. glibc), но не сейчас это не возможно. Подробности будет
отдельным письмом.

Спасибо за внимание!

-- 
Igor Zubkov
http://hi.im/ice

                 reply	other threads:[~2016-07-05 18:33 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=CAJXf7QMjk7yibzt_8hGyEc4-vbF6JPP1mhHEt0B7zs6VRhDpAg@mail.gmail.com \
    --to=igor.zubkov@gmail.com \
    --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