34 lines
1.3 KiB
Markdown
34 lines
1.3 KiB
Markdown
# Relay Lab
|
|
|
|
A local reliability engineering demo with a SQLite-backed queue, two competing
|
|
workers, and a live dashboard. The consumer is simulated. The database
|
|
transactions, retries, and lease recovery are real.
|
|
|
|
Requires Python 3.10 or newer. From this directory:
|
|
|
|
```sh
|
|
python3 app.py
|
|
```
|
|
|
|
Open http://127.0.0.1:4176 and select a scenario. Use `--db PATH` to choose a
|
|
database and `--port PORT` to choose a local port.
|
|
|
|
## Failure scenarios
|
|
|
|
- **Transient failure** retries after two and four seconds before succeeding.
|
|
- **Worker interruption** abandons the first lease. Another claim recovers the
|
|
job once that lease expires.
|
|
- **Permanent failure** reaches the dead-letter state after three attempts.
|
|
- **Resubmit** reuses an idempotency key and returns the same job ID. Reusing
|
|
that key for a different scenario returns HTTP 409.
|
|
|
|
## Delivery guarantees
|
|
|
|
Job creation and its first event commit together. Workers serialize claims with
|
|
a SQLite write transaction and use unique lease tokens to reject stale results.
|
|
Retry timing, terminal state, and event history persist across restarts.
|
|
|
|
A worker can lose its lease after the consumer has processed an event and
|
|
before the result is saved. A real consumer would need to deduplicate by job ID.
|
|
This lab binds to loopback and is intended for a trusted local environment.
|