Polycrate API 0.11.11¶
Release-Datum: 15. Januar 2026
Typ: Performance & Cleanup Release
Highlights¶
Dieses Release bringt massive Performance-Verbesserungen durch Entfernung der ungenutzten Discovery-Phase und Optimierung des Activity-Trackings.
- 🚀 Discovery-Entfernung - 500+ DB-Queries pro control_loop-Zyklus eliminiert
- ⚡ Activity-Tracking Optimierung - SELECT-Query in save() durch Caching eliminiert
- 🧹 K8sAppInstance Cleanup - Obsoletes Model aus Reconciliation entfernt
- 🔧 API Endpoint Cleanup - discover_object Task und API Endpoint entfernt
Artefakte¶
Docker Images¶
Installation & Update¶
Performance-Verbesserungen¶
Discovery-Phase komplett entfernt¶
Problem: Der control_loop (alle 10 Sekunden) rief discover_class() für 5 Model-Typen auf. Jeder Aufruf spawnte bis zu 250 discover_object Tasks parallel. Obwohl die run_discovery() Methoden meist nur pass enthielten, führte jeder Task zu 2 Datenbankoperationen (discovery_running setzen + last_discovery aktualisieren).
Auswirkung vorher: - 250 Tasks × 2 DB-Operationen × 2 Queries (SELECT + UPDATE) = 1000+ DB-Queries pro 10 Sekunden - Hohe CPU-Last auf Celery Workern - Lange Transaktionszeiten in PostgreSQL
Lösung:
discover_class()Funktion komplett entferntdiscover_objectTask komplett entfernt- Discovery-Phase aus
control_loop()entfernt
Auswirkung nachher: - 0 DB-Queries für Discovery - Deutlich reduzierte Celery Worker Last - Kürzere Transaktionszeiten
Activity-Tracking mit from_db() Caching¶
Problem: Die Funktion get_original_field_values() wurde bei jedem ManagedObject.save() aufgerufen, um Feldänderungen zu tracken. Diese Funktion führte einen SELECT-Query durch, um die Original-Werte aus der Datenbank zu laden - auch für Models mit activity_tracking_disabled = True.
Auswirkung vorher: - Jeder save() = 1 zusätzlicher SELECT-Query - Bei 500+ discover_object Tasks = 500+ unnötige SELECTs
Lösung:
# Neuer Caching-Mechanismus in ManagedObject
@classmethod
def from_db(cls, db, field_names, values):
instance = super().from_db(db, field_names, values)
instance._cache_tracked_field_values() # Werte beim Laden cachen
return instance
def save(self, *args, **kwargs):
# Gecachte Werte verwenden statt DB-Query
original_values = getattr(self, '_original_tracked_values', None)
# ...
Auswirkung nachher: - Kein zusätzlicher SELECT bei save() - Gecachte Werte werden beim initialen Laden gespeichert - activity_tracking_disabled = True Models überspringen Caching komplett
Cleanup¶
K8sAppInstance aus Reconciliation entfernt¶
Das K8sAppInstance Model wird nicht mehr verwendet. Folgende Komponenten wurden bereinigt:
| Komponente | Änderung |
|---|---|
k8s/apps.py | register_for_reconciliation(K8sAppInstance, ...) entfernt |
polycrate_api/models.py | DISCOVER_K8S_APP_INSTANCES, RECONCILE_K8S_APP_INSTANCES aus SystemConfig entfernt |
k8s/models.py | enable_app_instance_discovery Feld + Discovery-Methoden entfernt |
k8s/views.py | discover_app_instances Action entfernt |
k8s/serializers.py | Feld aus Serializer entfernt |
k8s/tables.py | Spalte aus Table entfernt |
k8s/forms.py | Feld aus Form entfernt |
Migration erforderlich: 0176_remove_k8scluster_enable_app_instance_discovery
discover API Endpoint deprecated¶
Der generische discover Endpoint in ManagedObjectBaseViewset gibt jetzt HTTP 410 GONE zurück:
polycrate-api Block¶
Der polycrate-api Block wurde auf Version 0.5.15 aktualisiert:
Migration¶
Datenbank-Migration erforderlich:
Die Migration entfernt das enable_app_instance_discovery Feld von K8sCluster.
Breaking Changes¶
- discover_object Task entfernt: Falls Sie diesen Task direkt aufrufen, wird ein ImportError auftreten.
- discover API Endpoint deprecated: Gibt HTTP 410 GONE zurück statt Discovery auszuführen.
- SystemConfig Keys entfernt:
DISCOVERY_ENABLEDDISCOVER_WORKSPACESDISCOVER_BLOCKSDISCOVER_K8S_CLUSTERSDISCOVER_K8S_APP_INSTANCESDISCOVER_HOSTSRECONCILE_K8S_APP_INSTANCES
Weitere Informationen¶
- Polycrate API Übersicht - Allgemeine Dokumentation
- Spezifikation - Technische Details
- Vollständiger Changelog