v0.4.0 - dual send mirror implementation #6
Reference in New Issue
Block a user
Delete Branch "dev"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
[0.4.0] - 2026-06-25
Added — Mirror (dual-send)
mirror_api_url/mirror_sfm_urlmeans existing installs are unchanged after auto-update.mirror_api_urlwhen set. Bounded by the existing API timeout and fully wrapped — it can never delay or fail the primary heartbeat; its result is ignored except for a debug log line.mirror_sfm_urlusing a separate sha256 state file (mirror_sfm_state_file, blank →<log_dir>/thor_forwarded_mirror.json), so the mirror tracks its own delivery independently of the primary. A quick reachability probe (~3 s) skips the mirror pass when the mirror server is down, so a dead mirror never stalls the loop on per-event timeouts; skipped events stay pending in the mirror state and deliver when the mirror returns — no data loss.Mirror API URL+Mirror SFM URLfields (blank = off). The mirror rides along with the primary — there is no separate enable flag (heartbeat-mirror active iff the primary heartbeat is on andmirror_api_urlis set; event-mirror active iff primary forwarding is on andmirror_sfm_urlis set).test_event_forwarder.pycovering mirror reachability, the down-mirror skip, separate-state idempotency, and the isolation invariant (a mirror failure leaves the primary's result + state untouched).Configuration
New
config.jsonkeys (all default-empty = off; existing 0.3.x deployments don't change behaviour on auto-update):mirror_api_url""api_url(blank = off)mirror_sfm_url""http://10.0.0.x:8200(blank = off)mirror_sfm_state_file""<log_dir>\thor_forwarded_mirror.jsonChanged
VERSIONto0.4.0