Polycrate API 0.11.16¶
Release-Datum: 20. Januar 2026
Typ: Bugfixes & UI Improvements
Highlights¶
- 🔥 Critical Fix: S3 Buckets bleiben nicht mehr DEGRADED - Reconciliation-Blockade behoben
- 🔥 Critical Fix: LoadBalancer Traffic-Metriken zeigen jetzt korrekte Werte
- Fix: Leere Namen bei Backups/Certificates werden automatisch korrigiert
- UI: S3 Bucket Detail Redesign mit Inline Access Keys
- UI: Endpoint Monitoring Coverage Chart auf 1h Granularität optimiert
Artefakte¶
Docker Images¶
Installation¶
Critical Bugfixes¶
S3 Bucket Reconciliation Fix¶
Problem:
S3 Buckets blieben permanent DEGRADED und wurden beim Provider (MinIO) nie erstellt. In den Logs erschien kein Error, nur:
Root Cause:
Bei der Migration zu run_reconciliation() in 0.11.12 wurden early returns im Minio Metrics-Fetching Block eingeführt, die den REPAIRS-Abschnitt komplett überspringen. Für neue Buckets (ohne Metriken) wurde der create_bucket()-Aufruf nie erreicht.
Lösung:
| Änderung | Beschreibung |
|---|---|
| Guard für Metrics-Fetch | Nur wenn provider_object_created = True |
| Early Returns entfernt | Nur loggen, nicht abbrechen |
| Exception Handling | raise e → log + continue |
| Pre-flight Check | Credential-Validierung vor create_bucket() |
| Besseres Logging | Exception-Details in Fehlermeldungen |
Nach Deploy:
Betroffene S3 Buckets manuell über den Reconcile-Button anstoßen.
LoadBalancer Traffic-Metriken Fix¶
Problem:
Zwei LoadBalancer, deployed vor 6 und 9 Stunden, zeigten auf "30 Days" bereits 11.4 TB Traffic - und identische Werte obwohl sie unterschiedliche Instanzen sind.
Root Causes:
- Fallback ohne Labels - Bei fehlenden Metriken wurde auf alle HAProxy-Metriken im System gefallback
- Prometheus Extrapolation -
increase(metric[30d])für eine 6h alte Metrik wird auf 30 Tage hochgerechnet - Range Query für Instant-Daten -
increase()sollte als Instant Query laufen
Lösung:
| Änderung | Beschreibung |
|---|---|
| Fallbacks entfernt | Keine Metriken = 0 (nicht "alle HAProxy-Metriken") |
| Instant Queries | increase() als Instant Query statt Range |
| Zeitlimit | Periode auf LBI-Lebenszeit begrenzt |
| Label-Validierung | Format-Prüfung der Prometheus-Labels |
Bugfixes¶
Backup & Certificate Name Validation¶
Problem:
Backups und Certificates wurden mit leerem Namen erstellt und erschienen im UI als "Unnamed" oder "None".
Root Cause:
sync_from_cert_manager_cr()nutztemetadata.get('name', '')- leerer String als Default- Model-Validatoren werden bei
get_or_create()nicht automatisch aufgerufen
Lösung:
| Komponente | Änderung |
|---|---|
| Serializer | name als required mit min_length=1 |
| Model | _normalize_name_for_api() Helper mit Fallback-Kette |
| Celery | fix_empty_object_names() Task bei Beat-Start |
Automatische Korrektur:
Bestehende Einträge ohne Namen werden beim nächsten Celery-Beat-Start automatisch repariert (Fallback auf secret_name oder UUID).
UI Improvements¶
S3 Bucket Detail Redesign¶
Das S3 Bucket Detail UI wurde analog zum LoadbalancerInstance UI redesigned:
- Inline Access Keys - Access Key ID und Secret werden direkt angezeigt (mit Copy-Button)
- Metrics Dashboard - Usage und Object Count mit Timeline-Graphen
- Kantige Collapsibles - Konsistente UI-Sprache ohne
rounded-*Klassen
Endpoint Monitoring Coverage Chart¶
Änderung:
Die Granularität des Coverage Charts wurde von 5-Minuten auf 1-Stunden-Intervalle optimiert.
Grund:
- Bei 30-Tage-Ansicht waren 8.640 Datenpunkte zu unübersichtlich
- 1h-Intervalle zeigen sinnvollere Trends (720 Datenpunkte)
- Bessere Performance bei der Datenabfrage
Migration¶
Keine Datenbank-Migration erforderlich.
Nach Deploy:
- DEGRADED S3 Buckets manuell reconcilen (Reconcile-Button)
fix_empty_object_namesTask läuft automatisch beim Celery-Beat-Start
Changelog¶
| Datei | Änderung |
|---|---|
src/s3/models.py | S3Cluster.create_bucket() - Pre-flight Check, Error Logging |
src/s3/models.py | S3Bucket.run_reconciliation() - Guard + keine early returns |
src/loadbalancers/models.py | _fetch_metrics_data() komplett überarbeitet |
src/backups/serializers.py | Name-Validierung hinzugefügt |
src/certificates/serializers.py | Name-Validierung hinzugefügt |
src/polycrate_api/tasks.py | fix_empty_object_names() Task |
src/polycrate_api/views.py | Coverage Chart Step auf 1h |
src/s3/templates/s3/bucket_detail_new.html | UI Redesign |
Block-Version¶
Spezifikationen¶
Die detaillierten Implementierungs-Spezifikationen finden sich in .specs/0.11.16/:
s3-bucket-reconciliation-fix.md- S3 Reconciliation Analyseloadbalancer-metrics-fix.md- LoadBalancer Metrics Analysebackup-name-validation.md- Backup Name Validationcertificate-name-validation.md- Certificate Name Validations3-bucket-ui-redesign.md- S3 UI Redesignendpoint-monitoring-coverage-chart-granularity.md- Coverage Chart