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