Zum Inhalt

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

Installationsanleitung


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 entfernt
  • discover_object Task komplett entfernt
  • Discovery-Phase aus control_loop() entfernt

Auswirkung nachher: - 0 DB-Queries für Discovery - Deutlich reduzierte Celery Worker Last - Kürzere Transaktionszeiten

Spezifikation

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

  1. discover_object Task entfernt: Falls Sie diesen Task direkt aufrufen, wird ein ImportError auftreten.
  2. discover API Endpoint deprecated: Gibt HTTP 410 GONE zurück statt Discovery auszuführen.
  3. SystemConfig Keys entfernt:
  4. DISCOVERY_ENABLED
  5. DISCOVER_WORKSPACES
  6. DISCOVER_BLOCKS
  7. DISCOVER_K8S_CLUSTERS
  8. DISCOVER_K8S_APP_INSTANCES
  9. DISCOVER_HOSTS
  10. RECONCILE_K8S_APP_INSTANCES

Weitere Informationen