chap 5: Umsetzung — 11 Abschnitte + module-components/zip-stream/race-condition diagrams

This commit is contained in:
2026-08-25 20:33:15 +02:00
parent ce6b01626c
commit f857a244dd
17 changed files with 437 additions and 110 deletions
+18 -12
View File
@@ -1,15 +1,21 @@
sequenceDiagram
participant A as Request A
autonumber
participant A as Anfrage A
participant S3 as S3-Speicher
participant B as Request B
participant B as Anfrage B
Note over A,B: Ordner AltName/ mit 200 Objekten, Zielname: Kunde GmbH/
A->>S3: CanClaim(Kunde GmbH) → Missing → true
B->>S3: CanClaim(Kunde GmbH) → Missing → true
A->>S3: Kopiere 200 Objekte nach Kunde GmbH/
B->>S3: Kopiere Objekte #1–60 nach Kunde GmbH/
A->>S3: DeleteObjects(AltName/*) ✓
B->>S3: Kopie #61 → NoSuchKey ✗
B->>S3: catch: DeleteObjects(copiedKeys #1–60)
Note over S3: 60 Objekte aus Kunde GmbH/ gelöscht!
Note over S3: AltName/ existiert nicht mehr → Datenverlust
Note over A,B: Ausgangslage: Ordner "AltName/" mit 200 Objekten,<br/>Zielname "Kunde GmbH/". Beide Anfragen gehoeren derselben Org.
A->>S3: CanClaim("Kunde GmbH") → frei
B->>S3: CanClaim("Kunde GmbH") → frei
Note over A,B: Beide halten den Zielnamen fuer beanspruchbar
A->>S3: kopiert alle 200 Objekte
B->>S3: kopiert Objekte 1 bis 60
A->>S3: DeleteObjects("AltName/*")
Note over S3: Quelle ist jetzt geloescht
B->>S3: kopiert Objekt 61 → NoSuchKey
B->>S3: catch: DeleteObjects(eigene 60 Kopien)
Note over S3: Die 60 geloeschten Objekte sind genau die,<br/>die A erfolgreich geschrieben hatte.<br/>Die Quelle existiert nicht mehr — Datenverlust.