Polycrate API 0.15.1¶
Release-Datum: 19. April 2026
Typ: Hotfix (Migrate-Job / Migrations / Pricing-Signals)
Highlights¶
Hotfix für den 0.15.0-Migrate-Job. Die Migration k8s.0200_backfill_k8svolume_product konnte auf Datenbanken, die vor 0.15.0 erstellt wurden, mit InFailedSqlTransaction abbrechen, weil sie die von polycrate_api.0069 angelegte Spalte SystemConfig.default_k8s_volume_product_id las, ohne die zugehörige Cross-App-Dependency zu deklarieren.
Zusätzlich konnte jeder DB-Fehler in einem ProductizedModelMixin-Post-Save-Signal (inklusive IntegrityError durch K8sVolume-Rows ohne Organisation) die aufrufende Migration- oder Request-Transaktion vergiften (Transaction Poisoning). 0.15.1 ergänzt die fehlende Migrationsabhängigkeit, umschließt den SystemConfig-Zugriff sowie beide Signal-Pfade mit Savepoints und fügt in reconcile_organization_product einen deterministischen Early-Return für fehlende Organisation hinzu.
Siehe auch Spec 158 im polycrate-api-Repository (polycrate spec inspect 158 im API-Workspace).
Artefakte¶
Docker Image¶
Block¶
Changes¶
Migrations¶
k8s.0200_backfill_k8svolume_producthängt jetzt explizit vonpolycrate_api.0069_systemconfig_default_k8s_volume_productab. Django wendet damitpolycrate_api.0069vork8s.0200an; die Spaltepolycrate_api_systemconfig.default_k8s_volume_product_idexistiert, bevor der Backfill sie liest — der zuvor beobachteteProgrammingError/InFailedSqlTransaction-Abbruch beim 0.15.0-Rollout entfällt.- Der
SystemConfig.get_solo().default_k8s_volume_product-Zugriff innerhalb der Migration läuft zusätzlich in einemtransaction.atomic(savepoint=True)-Block, damit ein unerwarteter DB-Fehler die äußere Migrationstransaktion (und den anschließendenINSERT INTO django_migrations) nicht mehr zurückrollt.
Pricing-Signals¶
ProductizedModelMixin._post_saveund_post_deleteumschließen die Aufrufereconcile_organization_product()bzw.delete_organization_product()mit einem Savepoint. Ein DB-Fehler im Signal wird weiterhin als Warnung protokolliert; die aufrufende Transaktion (RunPython-Migration, HTTP-Request, Celery-Task) bleibt committfähig statt mitInFailedSqlTransactionzu enden.reconcile_organization_productsteigt früh aus, wenninstance.organization_idnicht gesetzt ist. Damit werdenIntegrityErrors fürK8sVolume-Rows ohne Organisation vermieden, bei denenOrganizationProduct.organization(NOT NULL) keinen gültigen Wert bekommen würde.
Betriebliche Hinweise¶
- Datenbanken, die vor 0.15.0 waren und die defekte 0.15.0-Migration zurückgerollt haben, sind durch 0.15.1 abgedeckt: Der Migrate-Job führt
polycrate_api.0069vork8s.0200aus und schließt den Backfill ab. - Der
workspaces.0130-Deadlock (Scale-Down-Timing, langlebige Sessions gegenAccessExclusiveLock) ist nicht Teil dieses Fixes; er bleibt ein operatives Thema und wird separat adressiert.
Migration¶
Kein manueller Schema-Schritt außerhalb des üblichen Deploys. Nach Image-Update den Migrate-Job erneut ausführen lassen (wie im polycrate-api-Block vorgesehen).
Verwandte Releases¶
- Vorheriges Feature-Bundle: Polycrate API 0.15.0
- Nachfolgende Fixes (UI/API nach Rollout): Polycrate API 0.15.2