Skip to content

[Audit KB-4] Synchrones Parsen/Validieren im MLLP-Lesepfad + 2–3× String-Duplikat-Footprint #180

@Pappet

Description

@Pappet

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 Stringsrc/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).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions