Polycrate API 0.11.11
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
docker pull cargo.ayedo.cloud/polycrate/polycrate-api:0.11.11
Installation & Update
# Block-Konfiguration aktualisieren
polycrate run polycrate-api install
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:
{
"detail": "Discovery has been deprecated and removed. Use reconciliation instead."
}
polycrate-api Block
Der polycrate-api Block wurde auf Version 0.5.15 aktualisiert:
polycrate pull cargo.ayedo.cloud/ayedo/k8s/polycrate-api
polycrate run polycrate-api install
Migration
Datenbank-Migration erforderlich:
# In Docker Container
python manage.py migrate
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_ENABLED-DISCOVER_WORKSPACES-DISCOVER_BLOCKS-DISCOVER_K8S_CLUSTERS-DISCOVER_K8S_APP_INSTANCES-DISCOVER_HOSTS-RECONCILE_K8S_APP_INSTANCES
Weitere Informationen
- Polycrate API Übersicht - Allgemeine Dokumentation
- Spezifikation - Technische Details
- Vollständiger Changelog