Repository navigation
feat: v2.10.0 — Watchdog & Liveness Rebuild (§Phase 14 milestone 54) - #49
Merged
Merged
Conversation
Replaces rcp/watchdog.hpp in full, per the Satellite Package Disposition table's entry for this file: the pre-replacement client-driven periodic CommandType::Watchdog kick model built on rcp.hpp's Zone/Command/Controller is discarded, not adapted (that command type has no analog in the target protocol). The actual per-stream watchdog timeout/latch primitive already existed as rcp::e2e::RxWatchdog (v2.6.0); this milestone's job is the driver layer around it: - watchdog::StreamWatchdog::kick_from_request resets a stream's watchdog on every accepted inbound request, regardless of kind or safety tag, matching the "reset by any inbound request" rule directly instead of a separate client-side health poll. - StreamWatchdog::check reads a live regmap::RequestStreamConfig on every poll, reports HealthEvent::overflowed on timeout, and — only when rx_wd_safestate_enable is set — calls rcp::e2e::apply_watchdog_overflow to latch safe state and purge normal requests, reusing the v2.6.0 purge-normal/retain-safety rule unmodified. - watchdog::Manager multiplexes StreamWatchdog across every request stream the embedding application registers (keyed by an opaque uint64_t, e.g. avtp::StreamId::to_u64()) and fans out HealthEvents to subscribed callbacks. Rebuilds rcp/deadline.hpp per the disposition table's ADAPT call: the alive/dead-on-deadline concept survives, but every concrete signal source is rebound away from Status-subscription polling, which does not exist in the target model. deadline::Monitor is driven by two independent liveness signals per the roadmap's "and/or" — note_heartbeat (regmap::ResponseQueueConfig::flush_time, a new field added at this milestone) and note_lifecycle_change (lifecycle::ServerLifecycle's new subscribe_state_changed trigger, also added at this milestone) — either alone being sufficient evidence of liveness. Both additions are small, explicitly-scoped, and purely additive; no pre-existing field or transition rule in regmap.hpp/lifecycle.hpp changes. Nothing else in the tree depended on the old watchdog::Keeper or deadline::Monitor APIs (only their own tests did), so no legacy shim was needed, same as every other Phase 14 rebuild. New/rewritten coverage lives in tests/test_watchdog.cpp (REQ-WDG-001..008, entirely rewritten), tests/test_deadline.cpp (REQ-DL-001..008, entirely rewritten), and tests/test_lifecycle.cpp (REQ-LIFECYCLE-007, new), traced in .fusa-reqs.json. Bumps kVersion/project version to 2.10.0. Updates ROADMAP.md with a Done (v2.10.0) summary for milestone 54. Signed-off-by: Matt <47545907+SoundMatt@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Implements ROADMAP.md milestone 54, "Watchdog & Liveness Rebuild (v2.10.0)", the second of four Phase 14 satellite-package rebuilds.
rcp/watchdog.hpp— REPLACE (per the Satellite Package Disposition table). The pre-replacement client-driven periodicCommandType::Watchdogkick model, built onrcp.hpp'sZone/Command/Controller, is discarded — that command type has no analog in the target protocol. The actual per-stream watchdog timeout/latch primitive already existed asrcp::e2e::RxWatchdog(v2.6.0); this milestone builds the driver/wiring layer around it:watchdog::StreamWatchdog::kick_from_requestresets a stream's watchdog on every accepted inbound request, regardless of kind or safety tag — the "reset by any inbound request" rule, directly, in place of the old client-side health poll.StreamWatchdog::checkreads a liveregmap::RequestStreamConfigon every poll, reports overflow, and — only whenrx_wd_safestate_enableis set — reusesrcp::e2e::apply_watchdog_overflowto latch safe state and purge normal (non-safety) requests.watchdog::ManagermultiplexesStreamWatchdogacross every registered stream (keyed by an opaqueuint64_t, e.g.avtp::StreamId::to_u64()) and fans outHealthEvents to subscribers.rcp/deadline.hpp— ADAPT (per the disposition table). The alive/dead-on-deadline concept survives from the oldMonitor, but every concrete signal source is rebound away fromStatus-subscription polling, which doesn't exist in the target model.deadline::Monitoris driven by two independent liveness signals per the roadmap's own "and/or":note_heartbeat(a newregmap::ResponseQueueConfig::flush_timefield) andnote_lifecycle_change(a newlifecycle::ServerLifecycle::subscribe_state_changedtrigger) — either alone is sufficient evidence of liveness. Both additions are small, explicitly-scoped, and purely additive.Nothing else in the tree depended on the old
watchdog::Keeper/deadline::MonitorAPIs (only their own tests did), so no legacy shim was needed.Test plan
cmake --build build --parallel— full build clean (clang, C++17)ctest --test-dir build— 59/59 test suites pass, including rewrittentest_watchdog,test_deadline, and thetest_lifecycleadditions forREQ-LIFECYCLE-007relay conform --strict build/cpp-rcp— RELAY §12 conformance gate: PASScpfusa check/cpfusa lint/cpfusa cyber/cpfusa trace --req-coverage 100/cpfusa qualify/cpfusa verify— all exit 0, no new errors introduced.fusa-reqs.jsonrewritten:REQ-WDG-001..008,REQ-DL-001..008fully rewritten against the new model;REQ-LIFECYCLE-007added for the new state-changed triggerROADMAP.mdupdated with aDone (v2.10.0)summary for milestone 54kVersion/project version bumped to 2.10.0