Minecraft for Everypony Дружбомагия в каждом кубике!

Blameless Postmortem: «Дело – труба»

@

Что случилось?

При обновлении труб на сервере реестр блоков и модов разломался, отчего время замены мода увеличилось до пары часов.

Вводные данные

У нас есть несколько сред выполнения, или же «серверов»: основной (production) и несколько тестовых, среди них есть staging – место для разработки и обкатки.

Замена мода c ThermalDynamics на EnderIO в среде staging прошла успешно, но на production накатывание тех же изменений привело к невозможности присоединения клиента, хотя набор изменений для обновления не менялся.

Диагностика и решение проблемы

Первой гипотезой было расхождение между средами; на staging моды могли обновляться, и довольно часто. Частично это оказалось правдой: первая неудача при выкатке была из-за устарелого JEI, тут же оперативно обновленного.

Затем исследование логов клиентов после неудачной регистрациии блоков натолкнуло нас на мысль, что само обновление, масштабно меняющее ID блоков в мире, на staging накатывалось в две фазы, удаление старого мода с добавлением нового на production покатилось одним пакетом.

Это привело к недетерминированному порядку регистрациии ID блоков и последующих конфликтов.

Уже с этой гипотезой мы откатились на известное чистое состояние (сервер без каких-либо труб вообще), и уже затем вторым этапом добавили сам EnderIO.

После этого всё заработало так, как ожидалось.

Выводы

  • При крупных обновлениях держать staging идентичный серверу production.
  • Stateless-обновления сервера вести только автовыкаткой с git-репозитория, stateful (как это) – по строгому сценарию.
  • Резервировать время на непредвиденные ситуации +1 час к работам.