Chat-Import großer Workspaces scheitert: 30-s-Idle-Timeout, RAM-Pufferung des Upload-Bodys, stiller Workspace-Verlust beim Export #34
Labels
No labels
herkunft/alpha-feedback
status
blockiert
status
zu-testen
typ
bug
typ
docs
typ
enhancement
typ
feature
typ
idea
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
iris/Iris#34
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Symptom: Import eines
.irischatmit großem Workspace (LightCraft, 7,4 GB) scheitert mit „Hochladen der .irischat-Datei zum Server fehlgeschlagen“ (Client-Log:uploadFileToTemp error — Die Netzwerkverbindung wurde unterbrochen, genau 30,3 s nach Start).Ursachen und Fix (alle in einem Zug):
IrisRemoteServer.acceptConnectionsetzt einen 30-s-Timer, der erst abgebrochen wird, wenn der GANZE Request gelesen ist. Ein Multi-GB-Upload dauert länger → Server kappt die laufende Übertragung. Fix: Timer wird bei jedem empfangenen Chunk neu gesetzt (echter Leerlauf-Timeout).readHTTPRequestkopiert den bisherigen Puffer bei jedem 64-KB-Chunk (Data(buffer[…]), Copy-on-Write beim Anhängen). Fix: Header einmal parsen, Body-Bytes zählen, Puffer in einem Akkumulator-Objekt halten, 1-MB-Chunks.POST /file/uploadund/backup/uploadwird ab 8 MB (nur für authentifizierte Requests) direkt in eine Temp-Datei geschrieben statt in den RAM; die Handler kopieren den Multipart-Dateiteil blockweise ins Ziel. Der Client (uploadFileToTemp) baut den Multipart-Body als Datei und lädt perupload(for:fromFile:)statt die Datei zweimal in den RAM zu laden.downloadAndExtractWorkspacegibt bei jedem Fehlernilzurück, der Export läuft ohne Workspace weiter → leerer Workspace nach dem Import. Fix: existiert der Workspace lautGET /file/size, bricht ein Fehler den Export mit klarer Meldung ab.unzip-Exit 1 (nur Warnungen) gilt nicht mehr als Fehler.Beleg: Log 2026-10-12 19:23:53 Start, 19:24:23 Abbruch.
Umgesetzt und gemergt (PR #35,
main):readHTTPRequestparst Header einmal und hängt Chunks in einem Akkumulator an (vorher quadratisches Kopieren)./file/uploadund/backup/uploadstreamen Bodys ab 8 MB (nur authentifiziert) in eine Temp-Datei; die Handler kopieren den Multipart-Dateiteil blockweise im Hintergrund. Der Client sendet perupload(fromFile:)statt die Datei zweimal in den RAM zu laden.unzip-Exit 1 (Warnungen) gilt nicht mehr als Fehler.Geprüft: Builds
IrisundIrisClient; Test der Dateiteil-Extraktion mit 64 MB, byte-identisch.Offen: Live-Test mit dem LightCraft-Chat (7,4 GB) auf beiden Macs mit neuem Build. Das Issue bleibt bis dahin offen. Bekannt und nicht geändert: Staging per
copyItemblockiert beim Export die Oberfläche (ca. 4 Min).