fix: Crash-Robustheit + Performance in Backend und Frontend härten
Backend: recover() in allen langlebigen Goroutinen (neues internal/safego- Paket), MIME-Multipart-Tiefenlimit gegen Stack-Overflow, IMAP-Zeilenlängen- und FETCH-Result-Limits gegen OOM, MBOX-Buffer-Aliasing-Bug (Datenkorruption beim Import), ungeprüfte Type Assertions abgesichert, Data Race im API-Key-Rate-Limiter behoben, SMTP-Session-Panic führt jetzt zu 451-Retry statt Prozessabsturz. Performance: O(n²)-String-Concat in Mailparser und IMAP-Parser durch strings.Builder ersetzt. Frontend: Error Boundaries für Root und Mail-Detailansicht ergänzt (gab es vorher nicht), zahlreiche Guards gegen nil-Slices aus dem Backend-JSON die sonst .map()/.length-Crashes/White-Screens auslösten, defekte JSON-Antworten in api/core.ts abgefangen, zwei React-Key-Bugs bei löschbaren Listen korrigiert. Verifiziert auf 192.168.1.132: Build und Tests der geänderten Pakete fehlerfrei, keine Regressionen gegenüber vorbestehendem Stand. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019j28kGcaJAhBnrYX34hGdt
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
0fa4fad49d
commit
798cb2817c
@@ -3,6 +3,7 @@ package ocr
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"strings"
|
||||
"sync"
|
||||
@@ -199,6 +200,19 @@ func (w *Worker) run(ctx context.Context, id int) {
|
||||
}
|
||||
|
||||
func (w *Worker) process(ctx context.Context, job Job) {
|
||||
// A panic while processing a single mail (malformed attachment, external
|
||||
// tool output, index backend) must not kill the worker goroutine — the
|
||||
// whole process would go down with it.
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
w.logger.Error("ocr worker: recovered from panic",
|
||||
"mail_id", job.MailID, "panic", fmt.Sprintf("%v", r))
|
||||
if w.store != nil {
|
||||
_ = w.store.SetOCRResult(ctx, job.MailID, "failed", 0)
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
// PROJ-44: The canonical source of truth for a mail's tenant assignment
|
||||
// is emails.tenant_id in PostgreSQL — never the submitter's context.
|
||||
// Re-imports via IMAP/POP3 scheduler may submit the same mail with a
|
||||
|
||||
Reference in New Issue
Block a user