Wire the artifact storage foundation to HTTP.
- PUT /tasks/{id}/artifacts/{filename}: a worker streams a partial result;
the coordinator verifies lease ownership (foreign worker → 409), streams
the bytes to blob storage while hashing, and records the metadata. An
orphaned blob from a failed metadata insert is cleaned up.
- GET /artifacts/{id}/download: streams an artifact back with its content
type, length, and checksum.
- Ownership is read with a new non-locking TaskRepository.Get, so no row lock
is held across a long upload. Identity travels in X-Worker-ID / X-Task-Attempt
headers per the contract; upload/download bypass the short request timeout.
- docker-compose mounts ./data for durable artifact storage; smoke and
requests.http exercise an upload → foreign-409 → download round-trip.
25 lines
798 B
Bash
25 lines
798 B
Bash
# Copy to .env and adjust. All settings are read from the environment.
|
|
|
|
COORDINATOR_ADDR=:8080
|
|
DATABASE_URL=postgres://scimesh:scimesh@localhost:5432/scimesh?sslmode=disable
|
|
|
|
# Shared bearer token every worker must present. Leave empty to disable auth (dev only).
|
|
WORKER_AUTH_TOKEN=change-me
|
|
|
|
# Logging. LOG_LEVEL: debug|info|warn|error. LOG_FILE empty = stdout only;
|
|
# set a path to also write a size-rotated file (kept across restarts).
|
|
LOG_LEVEL=info
|
|
# LOG_FILE=./logs/coordinator.log
|
|
|
|
# Directory where artifact bytes are stored.
|
|
COORDINATOR_STORAGE_DIR=./data
|
|
|
|
# Optional tuning (defaults shown).
|
|
DB_MAX_CONNS=10
|
|
# How long to keep retrying the initial DB connection while Postgres boots.
|
|
DB_CONNECT_TIMEOUT=30s
|
|
REQUEST_TIMEOUT=15s
|
|
LEASE_DURATION=2m
|
|
DEFAULT_MAX_ATTEMPTS=3
|
|
REAPER_INTERVAL=30s
|