Retire the supervisor process
На данный момент каждый инстанс пикодаты состоит из 2х процессов:
- супервизор -- цель его жизни запустить основной процесс пикодаты и перезапустить его если нужно ребутстрапить состояние базы данных
- основной процесс -- в нём находится вся логика продукта пикодаты.
Такая архитектура сложилась исторически и у неё есть ряд недостатков:
- Необходимость объяснять людям, зачем в пикодате 2 процесса, один из которых всю жизнь спит
- Невозможность использовать в супервизоре тарантульный логгер, из-за чего страдает UX
- Один из процессов может остаться висеть если второй прибить через SIGKILL
- Сложность отладки: нужно прыгать через обручь с set follow fork mode child в gdb и т.п.
- Затруднения при тестировании: см. !1125 (comment 88011)
При этом есть решения не имеющие таких недостатков, например перезапуск процесса при помощи exec без использования fork. Так в частности делает postgres (по некоторым данным @funbringer).