Schweregrad
Kritisch — wahrscheinlichster Produktions-Crash beim MDM-Lastprofil (lt. CLAUDE.md das Zielprofil).
Problem
(a) Synchroner Hot-Path: parse_message führt fünf Pässe synchron aus (src/hl7/parser.rs:5-15), bevor store.insert aufgerufen wird (src/mllp.rs:217). Die Verbindung kann den nächsten Frame erst danach lesen.
(b) Speicher-Multiplikator: Pro Feld wird mehrfach derselbe Inhalt gehalten:
value (String) — src/hl7/parser.rs:213
components — jede Komponente erneut als eigener String — src/hl7/parser.rs:207-210
description — geklonter Dictionary-String pro Feld — src/dictionary.rs:71-74
Eine 5-MB-Base64-OBX-Zeile liegt als value (5 MB) und components[0] (5 MB) und in raw → ~3× raw. estimated_bytes zählt das korrekt mit, aber zusammen mit KB-2/KB-3 läuft der nominelle 512-MB-Deckel real deutlich früher gegen physischen RAM.
Lösungsvorschlag
- Dictionary-Beschreibungen nicht pro Feld klonen —
&'static str / Index in das OnceLock-Dictionary referenzieren statt String-Klone.
components lazy / Cow statt eager Vec<String>; besonders für Single-Component-Felder kein Klon.
- Validierung/Dictionary-Injektion ggf. aus dem Lesepfad in einen separaten Task verlagern.
Teil des Vibecoding-Code-Audits (KB-4).
Schweregrad
Kritisch — wahrscheinlichster Produktions-Crash beim MDM-Lastprofil (lt. CLAUDE.md das Zielprofil).
Problem
(a) Synchroner Hot-Path:
parse_messageführt fünf Pässe synchron aus (src/hl7/parser.rs:5-15), bevorstore.insertaufgerufen wird (src/mllp.rs:217). Die Verbindung kann den nächsten Frame erst danach lesen.(b) Speicher-Multiplikator: Pro Feld wird mehrfach derselbe Inhalt gehalten:
value(String) —src/hl7/parser.rs:213components— jede Komponente erneut als eigenerString—src/hl7/parser.rs:207-210description— geklonter Dictionary-String pro Feld —src/dictionary.rs:71-74Eine 5-MB-Base64-OBX-Zeile liegt als
value(5 MB) undcomponents[0](5 MB) und inraw→ ~3×raw.estimated_byteszählt das korrekt mit, aber zusammen mit KB-2/KB-3 läuft der nominelle 512-MB-Deckel real deutlich früher gegen physischen RAM.Lösungsvorschlag
&'static str/ Index in dasOnceLock-Dictionary referenzieren stattString-Klone.componentslazy /Cowstatt eagerVec<String>; besonders für Single-Component-Felder kein Klon.Teil des Vibecoding-Code-Audits (KB-4).