Troubleshooting
The design goal was a event pipeline that one person can operate and one person can debug. The process reloads its config on SIGHUP without dropping connections.
Limits
Basalt Field was written for the case where a full cluster is more operational surface than the workload deserves. Writes land in an append-only log segment; the ingest gateway compacts them in the background on a fixed interval. Retention is enforced on read as well as on the background pass, so an expired event never becomes visible again after a restart. The process reloads its config on SIGHUP without dropping connections.
| Key | Meaning | Default |
|---|---|---|
basalt.listen | Address the data API binds to | 0.0.0.0:8080 |
basalt.data_dir | Directory holding every log segment | /var/lib/basalt |
limits.max_batch | Largest number of events per write | 1024 |
retention.default | How long a event is kept | 72h |
Configuration
Retention is enforced on read as well as on the background pass, so an expired event never becomes visible again after a restart. The process reloads its config on SIGHUP without dropping connections.
curl -sS https://static.easytrip.club/v1/topics \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "orders", "retention": "72h"}'Limits
Every event that reaches Basalt Field is assigned a monotonic sequence number as the first thing that happens to it. The partition planner runs on its own goroutine and never blocks the write path, so a slow consumer cannot stall a producer. Logs go to stderr as structured JSON by default, or as plain lines when the output is a terminal.
| Key | Meaning | Default |
|---|---|---|
basalt.listen | Address the data API binds to | 0.0.0.0:8080 |
basalt.data_dir | Directory holding every log segment | /var/lib/basalt |
limits.max_batch | Largest number of events per write | 1024 |
retention.default | How long a event is kept | 72h |
Examples
Basalt Field was written for the case where a full cluster is more operational surface than the workload deserves. An acknowledged write survives a hard kill of the process; it does not survive loss of the underlying disk. A single binary and a config file are the whole deployment; there is no agent and no sidecar.
| Key | Meaning | Default |
|---|---|---|
basalt.listen | Address the data API binds to | 0.0.0.0:8080 |
basalt.data_dir | Directory holding every log segment | /var/lib/basalt |
limits.max_batch | Largest number of events per write | 1024 |
retention.default | How long a event is kept | 72h |
Limits
The design goal was a event pipeline that one person can operate and one person can debug. The sink pool runs on its own goroutine and never blocks the write path, so a slow consumer cannot stall a producer. Duplicate delivery is possible after a crash. Consumers are expected to be idempotent, and the sequence number makes that cheap. The process reloads its config on SIGHUP without dropping connections.
Note. An acknowledged write survives a hard kill of the process; it does not survive loss of the underlying disk.