chap 5: Umsetzung — 11 Abschnitte + module-components/zip-stream/race-condition diagrams
This commit is contained in:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user