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