Leitfaden zur Mitarbeit
Austausch
Bei Fragen, für interaktive Hilfe zur Fehlerbehebung oder zum Austausch mit anderen Patroni-Nutzern steht der Kanal #patroni im PostgreSQL-Slack zur Verfügung.
Fehler melden
Vor dem Melden eines Fehlers sicherstellen, dass er mit der neuesten Patroni-Version reproduzierbar ist! Außerdem sorgfältig prüfen, ob das Problem bereits in unserem Issue-Tracker erfasst ist.
Tests ausführen
Voraussetzungen für die Ausführung von behave-Tests:
- Die PostgreSQL-Pakete einschließlich der contrib -Module müssen installiert sein.
- Die ausführbaren PostgreSQL-Dateien müssen im
PATHverfügbar sein. Gegebenenfalls müssen sie zum Suchpfad hinzugefügt werden, etwa mitPATH=/usr/lib/postgresql/11/bin:$PATH python -m behave. - Für Tests mit externen DCS (z. B. etcd, Consul und Zookeeper) müssen die Pakete installiert sein und die jeweiligen Dienste laufen. Sie müssen unverschlüsselte/ungeschützte Verbindungen auf localhost und dem Standardport annehmen. Bei etcd oder Consul kann die behave-Testsuite die Dienste starten, wenn die ausführbaren Dateien im
PATHverfügbar sind.
Abhängigkeiten installieren:
Nach der Installation aller Abhängigkeiten können die verschiedenen Testsuiten ausgeführt werden:
Testen mit tox
Für tox-Tests muss neben Python nur eine Abhängigkeit installiert werden:
Für die Ausführung der Docker-basierten behave-Tests muss außerdem Docker installiert sein.
Die Tox-Konfiguration in tox.ini enthält „Umgebungen“ für die folgenden Aufgaben:
- lint: Python-Code mit
flake8prüfen - test: Unit-Tests mit
pytestfür alle verfügbaren Python-Interpreter; erzeugt bei erkanntem TTY HTML-Berichte, andernfalls XML-Berichte - dep: Konflikte zwischen Paketabhängigkeiten mit
pipdeptreeerkennen - type: statische Typprüfung mit
pyright - black: Codeformatierung mit
black - docker-build: Docker-Image für die Umgebung
behaveerstellen - docker-cmd: beliebigen Befehl mit dem obigen Image ausführen
- docker-behave-etcd: tox für behave-Tests mit dem obigen Image ausführen
- py*behave: behave mit den verfügbaren Python-Interpretern ausführen (ohne Docker, obwohl genau dies innerhalb der Docker-Container aufgerufen wird)
- docs: Dokumentation mit
sphinxerstellen
tox ausführen
Um die Standardliste der Umgebungen dep, lint, test und docs auszuführen, genügt:
Die Umgebungen test können mit dem Label test ausgeführt werden:
Die Docker-Tests für behave können mit dem Label behave ausgeführt werden:
Entsprechend hat docs das Label docs.
Alle anderen Umgebungen können über ihre jeweiligen Namen ausgeführt werden:
Mit factors können auch Teilmengen der Umgebungen ausgewählt werden. Beispielsweise lassen sich alle Umgebungen für Python 3.10 wie folgt ausführen:
Dies entspricht der Ausführung aller nachfolgend aufgeführten Umgebungen:
Alle konfigurierten Kombinationen von Umgebungen lassen sich mit tox (>=v4) wie folgt auflisten:
Die Umgebungen test und docs versuchen nach Abschluss der Aufgabe, die HTML-Ausgabedateien zu öffnen, sofern tox in einem aktiven Terminal läuft. Dies soll die lokale Arbeit mit diesen Umgebungen erleichtern. Auf einem Mac wird dazu open aufgerufen, unter Linux xdg-open. Für einen anderen Befehl die Umgebungsvariable OPEN_CMD auf dessen Namen oder Pfad setzen. Schlägt dieser Schritt fehl, schlägt dadurch nicht der gesamte Durchlauf fehl. Zum Deaktivieren dieser Funktion die Umgebungsvariable OPEN_CMD auf den wirkungslosen Befehl : setzen.
Behave-Tests
Behave-Tests mit -m behave erstellen Docker-Images auf Basis der PG_MAJOR-Versionen 12 bis 18 und führen anschließend alle behave-Tests aus. Dies kann recht lange dauern. Daher kann es sinnvoll sein, den Umfang auf eine bestimmte Postgres-Version, bestimmte Funktionen oder einzelne Schritte zu begrenzen.
Um die Postgres-Version festzulegen, den vollständigen Namen der gewünschten abhängigen Umgebung zum Erstellen des Images angeben, gefolgt vom Namen der behave-Umgebung. Beispielsweise für Postgres 14:
Um hingegen eine bestimmte Funktion zu testen, können Positionsargumente an behave übergeben werden. Der folgende Befehl führt das behave-Testszenario für die Watchdog-Funktion mit allen Postgres-Versionen aus.
Beide Möglichkeiten lassen sich auch kombinieren.
Einen Pull Request einreichen
- Einen Fork des Repositories erstellen, die Codeänderungen entwickeln und testen.
- Die Änderungen in der Benutzerdokumentation berücksichtigen.
- Einen Pull Request mit einer klaren Beschreibung des Ziels der Änderungen einreichen. Falls nötig, einen bestehenden Issue verlinken.
Rückmeldung zum Pull Request erfolgt so bald wie möglich.
Viel Spaß beim Entwickeln mit Patroni ;-)