Skip to content

OPS-SAT run 3, version 2: each replica in a process of its own (v0.7.0) - #38

Merged
wbnns merged 1 commit into
mainfrom
opssat-run3-processes
Oct 22, 2026
Merged

wbnns merged 1 commit into
mainfrom
opssat-run3-processes

Conversation

@wbnns

@wbnns wbnns commented Oct 22, 2026

Copy link
Copy Markdown
Member

Will's decision of 22 Oct 2026 (finance run3-plan.md, section 9): make run 3 the most representative setup within the OPS-SAT rules. Version 1 (the v0.6.0 package, replicas as threads) stays as the fallback.

What runs. MruQuorum, the manager process (RedundancyManager, HealthRegistry, FaultInjector, RunRecorder, F´'s CdhCore services, sequencer, Linux timer), starts three MruReplica processes, each one ReplicaHost behind F´'s GenericHub. The links are SOCK_SEQPACKET Unix socket pairs made by the manager and handed to each replica at start: message boundaries are kept, so the hub needs no framing, and there is no network. Replica 0 pins itself to core 0, replicas 1 and 2 to core 1.

Real faults. The stuck value and the bit flip stay in FaultInjector; the kill is a real SIGKILL of replica 0's process at the start of cycle 240, sent by the manager process from a new RunRecorder cycle hook (MRU-RR-006). The summary reports how each replica process ended and the CPU share of all four processes.

New. SeqPacketDriver (F´'s TcpClient shape over an inherited descriptor; after it opens it turns off reopening and ends its reconnect thread, so a send to a dead replica fails at once), MruQuorum, MruReplica, Mru/Payload, opssat/fprime2/. A workaround for an F´ v4.4.1 autocoder gap (serial-to-typed hub calls name the port serializer without its module).

Evidence.

  • VERSION=2 scripts/fprime-deployment.sh (new CI step): counts against the demo, events on their cycles, the restore, a second run in the same folder, three replica processes pinned, replica 0 killed by SIGKILL at cycle 240, the others ended cleanly. Version 1's check unchanged.
  • Full length in ESA's image (local ARM build, package.sh, user exp): 148 s, every exit as planned, the same counts and events as version 1, cores 0/1/1 in every segment, 19.9 MB address space, the experiment's CPU 2.9% to 3.75% under emulation (manager 1.5% to 1.8%).
  • 45 unit tests (one new), parity 36 of 60 identical. cargo test, scenarios, C test, no_std, claims: all pass.

MruQuorum, the manager process, starts three MruReplica processes, one
ReplicaHost each, linked through F´'s GenericHub over SOCK_SEQPACKET Unix
socket pairs (no network, no framing), and pins replica 0 to core 0 and
replicas 1 and 2 to core 1. The kill is real: RunRecorder calls the
deployment at the start of each cycle and the manager sends SIGKILL to
replica 0's process at cycle 240. SeqPacketDriver turns off reopening and
ends its reconnect thread once open. The payload is its own module.
Requirements MRU-DEP-005 to 007, MRU-RR-006; CI runs version 2; the
release adds its ARM build. Full length in ESA's image: 148 s, the same
counts and events as version 1.
@wbnns
wbnns merged commit bbdad54 into main Oct 22, 2026
28 checks passed
@wbnns
wbnns deleted the opssat-run3-processes branch October 22, 2026 22:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant