F2: Execute had no status guard, so a redelivered or stale message reran a finished run. Runs that are neither queued nor running are logged and acked without work; "running" still executes so a worker that crashed mid-run recovers. F4: failRun, finishNodeFailed and MarkRunFailed wrote the terminal status on the caller's context, which is exactly the context that is already cancelled when the run failed because of a shutdown or a sibling node — the write was refused and the run stayed stuck in "running". They now write on a context.WithoutCancel copy with a 10s timeout; the consumer's best-effort MarkRunFailed does the same. F5: peak memory scaled with the host's core count. LP_MAX_WORKERS (default 8) is now the total window-worker budget of a run and LP_MAX_NODES (default 2) the node fan-out; each node gets max(1, workers/nodes) through the new landscape.ComputeWithWorkers. Compute and service.ComputeFunc keep their signatures: Compute delegates with MaxWorkersPerNode, and a legacy ComputeFunc handed to NewLandscapeService is wrapped. F6: the stage loop used a plain errgroup, so a failing node let its siblings run to completion. It now uses errgroup.WithContext and passes the group context into runNode, cancelling siblings mid-compute. F7: wrap every float32 product in an explicit conversion so the compiler cannot fuse it into an FMA, keeping the kernels bit-identical to numpy's per-op rounding. F8: README's builder package list now matches the Dockerfile (adds g++), and the Landscape section documents the memory model and the two new knobs. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
35 lines
920 B
Plaintext
35 lines
920 B
Plaintext
# Copy to .env at the repo root and adjust as needed: cp configs/.env.example .env
|
|
|
|
# HTTP server
|
|
PORT=8080
|
|
|
|
# Postgres
|
|
DB_URL=postgres://gis:gis@127.0.0.1:5432/gis?sslmode=disable
|
|
# Schema that migrations operate on (used by `gis migrate fresh`).
|
|
DB_SCHEMA=public
|
|
|
|
# goose CLI (the `gis migrate` subcommand uses DB_URL directly; these are for the
|
|
# standalone goose CLI only)
|
|
GOOSE_DRIVER=postgres
|
|
GOOSE_DBSTRING=postgres://gis:gis@127.0.0.1:5432/gis?sslmode=disable
|
|
GOOSE_MIGRATION_DIR=migrations
|
|
|
|
# S3 / MinIO
|
|
S3_ENDPOINT=127.0.0.1:9000
|
|
S3_ACCESS_KEY=minioadmin
|
|
S3_SECRET_KEY=minioadmin
|
|
S3_BUCKET=geofiles
|
|
S3_USE_SSL=false
|
|
|
|
# RabbitMQ
|
|
RABBITMQ_URL=amqp://guest:guest@127.0.0.1:5672/
|
|
RABBITMQ_EXCHANGE=gis.events
|
|
RABBITMQ_QUEUE=gis.events.example
|
|
|
|
# Host port mapping for the postgres container (docker-compose)
|
|
DB_PORT=5432
|
|
|
|
# Landscape Program parallelism (bounds worker peak memory)
|
|
LP_MAX_WORKERS=8
|
|
LP_MAX_NODES=2
|