Files
gis/configs/.env.example
Bakhtiyar Issakhmetov 4051506b95 fix(landscape): guard redelivery, detach terminal writes, bound workers
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>
2026-09-05 14:44:34 +05:00

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