Postgres-Jobqueue (processing_jobs, FOR UPDATE SKIP LOCKED), In-Prozess- Worker-Goroutinen, kein Redis/AMQP. Enqueue mit Idempotency-Key-Dedup, Dequeue mit Stale-Lock-Wiedervorlage (Absturzsicherheit), Fail mit arithmetischem Backoff und Dead-Letter-Queue nach erschoepften Versuchen, RequeueDeadLetter fuer manuelle Wiederholung. Auf 192.168.1.131 verifiziert: Absturz-Wiedervorlage (Job von einem "abgestuerzten" Worker nie completed/failed, zweiter Worker holt ihn nach Ablauf der Sperre erneut), Idempotenz bei Doppelzustellung (gleicher idempotency_key erzeugt nur 1 Zeile), DLQ-Eintrag manuell wiederholbar. Vier reale Fehler beim Testen gefunden und behoben: zwei pgx-Typinferenz- Bugs im SQL-Parameterhandling (toter workerID-Parameter ohne Referenz in der Query; untypisiertes any statt []string fuer den ::text[]-Cast), sowie zwei Testinfrastruktur-Bugs (dms_tenant_test sammelte schema_migrations- Zustand ueber Sitzungen hinweg an, jobqueue-Testfixture raeumte processing_jobs nicht auf) - neues scripts/reset-test-env.sh + make check (-p 1) analog Core behoben. Siehe dms/docs/FDN-04-PRUEFPROTOKOLL.md fuer alle Pruefungsergebnisse. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HhgFcLS8tYMhDJpP74C6AQ
44 lines
1.2 KiB
Makefile
44 lines
1.2 KiB
Makefile
.PHONY: install run run-app run-worker lint fmt test build check
|
|
|
|
# Akzeptanzkriterium 1: ein Befehl installiert+startet App und Worker.
|
|
install: build
|
|
|
|
build:
|
|
go build ./...
|
|
|
|
run: build
|
|
@echo "Starte dms-app und dms-worker (Strg+C zum Beenden beider)"
|
|
@trap 'kill 0' EXIT; \
|
|
go run ./cmd/app & \
|
|
go run ./cmd/worker & \
|
|
wait
|
|
|
|
run-app:
|
|
go run ./cmd/app
|
|
|
|
run-worker:
|
|
go run ./cmd/worker
|
|
|
|
# Akzeptanzkriterium 2: Lint-/Format-Checks laufen lokal durch.
|
|
lint:
|
|
golangci-lint run ./...
|
|
|
|
fmt:
|
|
gofmt -l .
|
|
@test -z "$$(gofmt -l .)" || (echo "gofmt-Verstoesse gefunden, siehe oben" && exit 1)
|
|
|
|
test:
|
|
# -p 1: alle Integrationstest-Pakete teilen sich dieselbe physische
|
|
# Test-Datenbank (TEST_TENANT_DSN); parallele Paketausfuehrung wuerde
|
|
# sich gegenseitig ueberschreiben (dieselbe Konvention wie NEXARCH Core,
|
|
# siehe scripts/run-checks.sh im Core-Modul).
|
|
go test ./... -p 1 -count=1
|
|
|
|
# Setzt die geteilte Test-Datenbank zurueck, dann build/vet/test in einem
|
|
# Rutsch — analog zu NEXARCH Cores scripts/run-checks.sh.
|
|
check: build
|
|
NEXARCH_DMS_TEST_DB_PASSWORD="$${NEXARCH_DMS_TEST_DB_PASSWORD:?Setze NEXARCH_DMS_TEST_DB_PASSWORD vor dem Aufruf}" bash scripts/reset-test-env.sh
|
|
go vet ./...
|
|
golangci-lint run ./...
|
|
go test ./... -p 1 -count=1
|