Managing a distributed, heterogeneous Git mirror network
Boudhayan Gupta (~boudhayan) |
At KDE, our git server infrastructure consists of one master git server that accepts pushes, a network of read-only anongit servers, and a GitHub organisation which hosts another read-only copy of our repositories.
We typically need to create new repos, rename and move existing ones, and finally delete unused repos. All of these operations have to played on our master server, the anongit mirrors and to whatever extent possible, our GitHub org. We have to keep the mirrors in sync, poke CI when all the mirrors are up-to-date, and notify the admins when something goes wrong. Managing all of this is a big task, especially when networks are bad, servers don't sync and daemons crash.
To solve this problem, what started out as a set of ad-hoc scripts became a full blown piece of server software built to manage a fleet of git mirrors. In this talk, we'll describe how we use Python, Redis, Tornado and other libraries, with a home grown task queue, to solve all of our problems.
Knowledge of basic Python is required. An intermediate level of knowledge about Git is beneficial, but not necessary.
- Propagator's code: https://phabricator.kde.org/diffusion/PROPAGATOR/
Slides will be finalised at a later date.
Boudhayan Gupta: Boudhayan is a developer and system administrator for KDE. He started learning Python at age 11, and switched to using Linux full-time at age 12. Now a final-year undergraduate student working towards a Computer Engineering degree, he divides his waking hours between developing software, maintaining server infrastructure, and eating.
- Boudhayan's blog: https://blog.baloneygeek.com/
- Boudhayan's GitHub: https://github.com/BaloneyGeek