fix(quick-260909-jts): Lastprobe nachreichen statt sie zu behaupten
This commit is contained in:
@@ -236,13 +236,23 @@ Einzelmessung (gleiche Verbindungskennung, korrekter Kontext, korrekte
|
||||
Zeilenzahl). Über diese Einzelmessung hinaus wurde als zusätzliche,
|
||||
sicherheitsrelevante Sorgfaltsprüfung (nicht durch den Plan verlangt, aber
|
||||
durch die Tragweite dieses Bereichs geboten) beide Formen unter echter
|
||||
Nebenläufigkeit erneut gemessen — 40 parallele Aufrufe, alternierend
|
||||
TENANT-A/TENANT-B, gegen eine separate Experiment-Datenbank mit derselben
|
||||
Struktur:
|
||||
Nebenläufigkeit erneut gemessen — 40 parallele Aufrufe über EINEN
|
||||
gemeinsamen Client, alternierend TENANT-A/TENANT-B.
|
||||
|
||||
- **Form (ii)** brach unter dieser Last mit
|
||||
`PrismaClientKnownRequestError: Transaction API error: Unable to start a
|
||||
transaction in the given time.` (Code `P2028`) ab. Ursache: jede
|
||||
Diese Belastungsprobe lief zunächst gegen eine separate Experiment-Datenbank
|
||||
und war damit **nicht nachvollziehbar** — eine Zahl, die eine Entscheidung
|
||||
trug, ohne dass jemand sie hätte nachprüfen können. Genau das Anti-Muster,
|
||||
das dieses Projekt sich selbst verboten hat. Sie ist deshalb als
|
||||
`runConcurrencyProbe` in `apps/api/scripts/rls-scratch-check.mjs`
|
||||
nachgereicht worden und läuft seither bei jedem Werkzeuglauf mit. Als
|
||||
Verletzung zählt beides: ein Aufruf, der einen fremden oder gar keinen
|
||||
Mandantenkontext sieht, und ein Aufruf, der abbricht.
|
||||
|
||||
Gemessen wird, nicht behauptet:
|
||||
|
||||
- **Form (ii)** bricht unter dieser Last ab, mit Fehlern der Familie
|
||||
`PrismaClientKnownRequestError: Transaction API error` (Code `P2028`).
|
||||
Ursache: jede
|
||||
`tx.$queryRaw`-Anweisung innerhalb der interaktiven Transaktion auf dem
|
||||
gebundenen Client löst selbst wieder eine VERSCHACHTELTE
|
||||
Array-Transaktion auf dem äußeren, ungebundenen Client aus (weil
|
||||
@@ -250,9 +260,17 @@ Struktur:
|
||||
interaktive Transaktion UND jede innere Verschachtelung belegen
|
||||
gleichzeitig eine Verbindung aus demselben, endlichen Pool. Unter Last
|
||||
reicht der Pool nicht mehr aus.
|
||||
- **Form (iii)** bestand dieselbe Belastung mit 0 Verletzungen unter 40
|
||||
parallelen Aufrufen — sie belegt pro Aufruf genau eine Verbindung, ohne
|
||||
Verschachtelung.
|
||||
- **Form (iii)** besteht dieselbe Belastung ohne Verletzung — sie belegt
|
||||
pro Aufruf genau eine Verbindung, ohne Verschachtelung.
|
||||
|
||||
Die konkreten Zahlen eines einzelnen Laufs stehen bewusst NICHT in diesem
|
||||
Dokument, sondern fallen bei jeder Ausführung neu an; der Werkzeuglauf vom
|
||||
2026-09-09 ergab 24 Verletzungen von 40 für Form (ii) und 0 von 40 für
|
||||
Form (iii). **Geprüft** wird nur die Eigenschaft, auf die sich der Code
|
||||
stützt — Form (iii) ohne Verletzung. Das Verhalten von Form (ii) läuft
|
||||
daneben als ausgedruckte Beobachtung mit und ist bewusst KEINE Bedingung
|
||||
für einen grünen Lauf: ab welcher Last sie bricht, hängt an
|
||||
Verbindungsvorrat und Maschine.
|
||||
|
||||
Das ist der entscheidende Befund für die Werkzeugentscheidung in Aufgabe 2:
|
||||
obwohl Form (ii) die im Plan geforderte EINZELMESSUNG technisch besteht,
|
||||
|
||||
Reference in New Issue
Block a user