From c98eccc057eaa96d8b5a5a1a428ca3ad53c12c9f Mon Sep 17 00:00:00 2001 From: deeaitch Date: Sun, 25 Oct 2026 08:31:08 -0400 Subject: [PATCH] next chapter --- CHANGELOG.md | 12 +- ...fine-rollback-eligibility-and-retention.md | 56 +++++ ...reserve-data-compatibility-during-trial.md | 53 +++++ ...covery-and-block-failed-system-releases.md | 59 ++++++ diagrams/plantuml/rollback-policy.puml | 52 +++++ .../plantuml/rollback-recovery-sequence.puml | 46 +++++ diagrams/plantuml/rollback-window.puml | 43 ++++ diagrams/readme.md | 11 +- diagrams/rendered/rollback-policy.png | Bin 0 -> 85200 bytes .../rendered/rollback-recovery-sequence.png | Bin 0 -> 93661 bytes diagrams/rendered/rollback-window.png | Bin 0 -> 63460 bytes docs/00-series-overview.md | 11 +- docs/06-atomic-updates.md | 6 +- docs/07-rollback-and-recovery.md | 149 ++++++++++++++ .../rollback-policy/CMakeLists.txt | 23 +++ examples/simulations/rollback-policy/main.cpp | 49 +++++ .../simulations/rollback-policy/readme.md | 70 +++++++ .../rollback-policy/simulation.cpp | 193 ++++++++++++++++++ .../rollback-policy/simulation.hpp | 67 ++++++ .../simulations/rollback-policy/tests.cpp | 161 +++++++++++++++ readme.md | 4 +- 21 files changed, 1054 insertions(+), 11 deletions(-) create mode 100644 adr/ADR-020-define-rollback-eligibility-and-retention.md create mode 100644 adr/ADR-021-preserve-data-compatibility-during-trial.md create mode 100644 adr/ADR-022-bound-recovery-and-block-failed-system-releases.md create mode 100644 diagrams/plantuml/rollback-policy.puml create mode 100644 diagrams/plantuml/rollback-recovery-sequence.puml create mode 100644 diagrams/plantuml/rollback-window.puml create mode 100644 diagrams/rendered/rollback-policy.png create mode 100644 diagrams/rendered/rollback-recovery-sequence.png create mode 100644 diagrams/rendered/rollback-window.png create mode 100644 docs/07-rollback-and-recovery.md create mode 100644 examples/simulations/rollback-policy/CMakeLists.txt create mode 100644 examples/simulations/rollback-policy/main.cpp create mode 100644 examples/simulations/rollback-policy/readme.md create mode 100644 examples/simulations/rollback-policy/simulation.cpp create mode 100644 examples/simulations/rollback-policy/simulation.hpp create mode 100644 examples/simulations/rollback-policy/tests.cpp diff --git a/CHANGELOG.md b/CHANGELOG.md index e716410..94c0989 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,11 +4,21 @@ Reader-facing changes to the articles, architecture decisions, diagrams, and pra When adding or revising material, add a short entry under the relevant date with links to the affected files and any related issue or commit. +## 2026-10-24 + +- Added [chapter 07: Rollback and Recovery](docs/07-rollback-and-recovery.md), covering recovery target eligibility, shared-data compatibility, approved restore and data loss, restart rules, bounded recovery, failed-release blocks, and the rollback window. +- Added [ADR-020: Define Rollback Eligibility and Retention](adr/ADR-020-define-rollback-eligibility-and-retention.md), [ADR-021: Preserve Data Compatibility During Trial](adr/ADR-021-preserve-data-compatibility-during-trial.md), and [ADR-022: Bound Recovery and Block Failed System Releases](adr/ADR-022-bound-recovery-and-block-failed-system-releases.md). +- Added a [C++17 rollback policy simulation](examples/simulations/rollback-policy/readme.md) with nine scenarios and CMake/CTest checks. It models completed durable transitions and supplied eligibility and health outcomes, not real storage, backup restoration, bootloader integration, or a rescue environment. +- Added PlantUML sources for [rollback policy](diagrams/plantuml/rollback-policy.puml), [recovery coordination](diagrams/plantuml/rollback-recovery-sequence.puml), and the [rollback window](diagrams/plantuml/rollback-window.puml). Added PNG previews for [rollback policy](diagrams/rendered/rollback-policy.png), [recovery coordination](diagrams/rendered/rollback-recovery-sequence.png), and the [rollback window](diagrams/rendered/rollback-window.png), rendered from those sources. +- Updated the [README](readme.md), [series overview](docs/00-series-overview.md), [chapter 06 continuation](docs/06-atomic-updates.md), and [diagram index](diagrams/readme.md). Linked the existing chapter 06 PNG previews and corrected the outdated source-only descriptions. + ## 2026-10-20 +- Added PNG previews for the [installation sequence](diagrams/rendered/ab-installation-sequence.png) and [restart decisions](diagrams/rendered/ab-installation-recovery.png) after the initial chapter 06 addition. History: [9385583](https://git.himro.ca/deeaitch/ota-reference-design/commit/9385583). + - Added [chapter 06: Atomic Updates](docs/06-atomic-updates.md), covering preparation before activation, durable state, gaps between records, restart decisions, and the limits of package recovery. - Added [ADR-018: Prepare and Verify Before Activation](adr/ADR-018-prepare-and-verify-before-activation.md) and [ADR-019: Recover Interrupted Updates From Durable State](adr/ADR-019-recover-interrupted-updates-from-durable-state.md). -- Added PlantUML sources for the [installation sequence](diagrams/plantuml/ab-installation-sequence.puml) and [restart decisions](diagrams/plantuml/ab-installation-recovery.puml). No new image previews are included. +- Added PlantUML sources for the [installation sequence](diagrams/plantuml/ab-installation-sequence.puml) and [restart decisions](diagrams/plantuml/ab-installation-recovery.puml). The initial chapter addition included sources only; previews were added in the follow-up above. - Added a [C++17 interrupted installation model](examples/simulations/interrupted-installation/readme.md), with reset points, three supplied boot-record write outcomes, recovery checks, and CMake/CTest support. It models completed durable operations in memory, not real power-loss-safe storage. - Applied the root [.clang-format](.clang-format) to the new model and the existing [A/B trial boot example](examples/simulations/ab-trial-boot/readme.md). Existing C++ changes are formatting only. - Updated the [README](readme.md), [series overview](docs/00-series-overview.md), [chapter 05 continuation](docs/05-storage-layout.md), and [diagram index](diagrams/readme.md). diff --git a/adr/ADR-020-define-rollback-eligibility-and-retention.md b/adr/ADR-020-define-rollback-eligibility-and-retention.md new file mode 100644 index 0000000..3e9992d --- /dev/null +++ b/adr/ADR-020-define-rollback-eligibility-and-retention.md @@ -0,0 +1,56 @@ +# ADR-020: Define Rollback Eligibility and Retention + +## Context + +An A/B device retains A while trying B. Keeping A's bytes does not guarantee that A can still run: shared data, configuration, boot components, or security policy may have changed. Confirmation and later slot reuse also affect what the product can promise. + +The reference design needs local recovery without downloading the old release. Boot control and Linux must understand the retained recovery state. + +## Decision + +Define an explicit rollback window and the conditions that make its target eligible. Retain the target release, matching boot artifacts, required dependencies, verification information, and a supported data path for that window. Record release identities and the window state outside replaceable software. + +Admit a trial only when its permitted operations preserve the early-boot recovery path. The eligibility contract covers artifact validity, shared components, configuration, data, recovery-state formats, and the platform's security policy. Reassess these conditions before a supervisor initiates recovery where possible. Early boot recovery must rely on a contract established before trial, not on checks that require the failed Linux system. + +Confirmation alone neither guarantees nor closes a post-confirmation rollback window. The product must state whether such a window exists. Save its closure before an incompatible change or slot reuse removes the promised recovery path. An interrupted closure may conservatively leave rollback unavailable; it must not leave a promise to use a removed target. + +If eligibility cannot be established, stop ordinary rollback and use the separate recovery policy. Check essential functions after starting the retained release before reporting success. + +## Alternatives Considered + +### Treat Any Retained Slot as Recoverable + +Simple, but ignores shared data and changes outside the slot. The slot may boot while the application remains unusable. + +### Keep Every Previous Release Indefinitely + +This needs more storage and still does not preserve compatibility or permission to run old software. + +### Download Recovery Software When Needed + +This can supplement local recovery, but cannot satisfy this design's offline requirement. + +## Consequences + +### Positive + +- The recovery promise has an explicit lifetime and prerequisites. +- Cleanup and migrations cannot silently invalidate a retained target. +- Confirmation, data compatibility, and slot retention can be reviewed separately. + +### Negative + +- Retained artifacts and compatible data consume resources. +- Releases must maintain compatible recovery-state formats during the window. +- Closing the window may require an alternative recovery path. + +## Applicability and Limits + +Use when a product promises a return to retained software. This decision defines policy, not an artifact verifier or a durable journal implementation. Hardware failure and damaged shared boot components need separate recovery support. Security policy can prohibit an otherwise operational old release. + +## Related Documents + +- [Chapter 07: Rollback and Recovery](../docs/07-rollback-and-recovery.md) +- [ADR-014: Trial Boot and Confirmation](ADR-014-trial-boot-and-confirmation.md) +- [ADR-017: Keep Recovery State Outside Replaceable Software](ADR-017-keep-recovery-state-outside-replaceable-software.md) +- [ADR-021: Preserve Data Compatibility During Trial](ADR-021-preserve-data-compatibility-during-trial.md) diff --git a/adr/ADR-021-preserve-data-compatibility-during-trial.md b/adr/ADR-021-preserve-data-compatibility-during-trial.md new file mode 100644 index 0000000..8cc3810 --- /dev/null +++ b/adr/ADR-021-preserve-data-compatibility-during-trial.md @@ -0,0 +1,53 @@ +# ADR-021: Preserve Data Compatibility During Trial + +## Context + +The reference A/B design shares persistent application data and configuration between A and B. Boot control may return to A before a Linux recovery supervisor can run. A trial that makes shared data unreadable by A would invalidate that path. + +This example can keep a compatible format during trial. It does not require an incompatible migration before B can pass its checks. + +## Decision + +Keep shared application data and configuration usable by both retained releases throughout trial. Review writes as well as reads: B's output must remain usable by A. Include interrupted application writes in the platform's data-recovery tests. + +Reject or defer a trial requiring an incompatible mutation without another supported recovery path. Delay such a migration until confirmation and explicit closure of the old rollback window. If rollback remains promised after confirmation, preserve compatibility for that period too. + +Save window closure before beginning an incompatible migration. The migration still needs its own interruption and failure procedure; closing the window does not make the migration safe. + +## Alternatives Considered + +### Separate Data Copy for B + +Can isolate trial writes, but needs more space, a durable selection procedure, and a policy for merging or losing trial records. Suitable when compatible shared writes are impractical. + +### Restore a Backup Before Returning to A + +Can recover an older format, but requires a validated backup, interruption-safe restoration, and explicit authorization for any lost records. Early failures require a recovery environment that can restore data before A uses it. This is not assumed in the shared-data trial design. + +### Always Reverse the Migration + +A reverse migration may exist, but can fail or lose information. It must be implemented and tested for the specific schema; it cannot be assumed from the presence of an old image. + +## Consequences + +### Positive + +- Boot control can return to A without first running a data restore service. +- Trial records remain available after rollback when both versions support them. +- Compatibility becomes an admission condition for a release. + +### Negative + +- New features may need a staged schema change. +- Compatibility tests must cover both versions' readers and writers. +- A later incompatible migration ends this rollback path and needs another recovery plan. + +## Applicability and Limits + +Use when retained releases share data and compatible operation during trial is feasible. This does not protect against corruption or guarantee that a migration after confirmation succeeds. Products needing incompatible trial writes should choose and test a different data recovery design explicitly. + +## Related Documents + +- [Chapter 07: Rollback and Recovery](../docs/07-rollback-and-recovery.md) +- [ADR-016: Separate System Software and Persistent Device Data](ADR-016-separate-system-software-and-persistent-device-data.md) +- [ADR-020: Define Rollback Eligibility and Retention](ADR-020-define-rollback-eligibility-and-retention.md) diff --git a/adr/ADR-022-bound-recovery-and-block-failed-system-releases.md b/adr/ADR-022-bound-recovery-and-block-failed-system-releases.md new file mode 100644 index 0000000..580d648 --- /dev/null +++ b/adr/ADR-022-bound-recovery-and-block-failed-system-releases.md @@ -0,0 +1,59 @@ +# ADR-022: Bound Recovery and Block Failed System Releases + +## Context + +Returning to A can fail, and a server may offer failed B again after a successful return. Restarting a coordinator must not give either path unlimited new attempts. The device must recover locally and retain results while offline. + +Boot control owns boot selection and attempt accounting. A supervisor coordinates recovery checks and keeps policy records outside the slots. + +## Decision + +Save the failed system release's unambiguous identity and reason, its automatic retry block, and recovery intent before recovery actions. Apply the block on every automatic installation path. It survives reset and rediscovery of the same release. A different release is subject to normal admission checks. An authorized operator may clear the block after review, with the action recorded. + +Use a finite recovery budget and a defined check deadline. Boot control accounts for each recovery boot attempt durably before handing control to the target. A restart does not refresh this budget. The reset mechanism must cover hangs that would otherwise prevent progress. + +Reconcile the supervisor's progress with authoritative boot state after interruption. Exclude competing installs while recovery owns the target and data. Report recovery success only after the restored system passes its essential local checks. + +If the target is ineligible, checks fail, or the recovery budget expires, stop the ordinary A/B path. Enter a separately defined recovery policy rather than alternating releases. The platform must specify the available recovery environment or physical service path, behavior of affected functions, and diagnostics that remain possible. + +Retain the failed release, failure reason, recovery result, running release, active block, and any approved data loss for later reporting. Losing connectivity does not prevent local recovery. + +## Alternatives Considered + +### Retry Until One Slot Works + +Can leave a device switching indefinitely without providing its required functions or reaching a diagnosable terminal state. + +### Let Rediscovery Clear the Failure + +Normal polling could immediately repeat a known failing installation. A new offer alone is not evidence that the failure was corrected. + +### Block All Future Releases + +May fit stricter products, but prevents an otherwise acceptable corrective release from being considered. This example blocks the exact failed release on this device. + +## Consequences + +### Positive + +- Failed updates cannot automatically repeat without policy intervention. +- Recovery has a finite outcome and continues offline. +- Reports distinguish an update failure from a failed recovery. + +### Negative + +- Boot control and supervisor records need coordination and compatible formats. +- Retry limits, check deadlines, and watchdog coverage need platform validation. +- A separate recovery path and a block-removal process must be maintained. + +## Applicability and Limits + +Use for automatic system rollback with locally retained state. This extends the package retry-block pattern from ADR-015 to system release identities. It does not implement a rescue environment or a fleet rollout pause. The block is operational policy; it does not replace signature verification or security anti-rollback rules. + +## Related Documents + +- [Chapter 07: Rollback and Recovery](../docs/07-rollback-and-recovery.md) +- [ADR-014: Trial Boot and Confirmation](ADR-014-trial-boot-and-confirmation.md) +- [ADR-015: Service Checks and Package Downgrade](ADR-015-service-checks-and-package-downgrade.md) +- [ADR-019: Recover Interrupted Updates From Durable State](ADR-019-recover-interrupted-updates-from-durable-state.md) +- [ADR-020: Define Rollback Eligibility and Retention](ADR-020-define-rollback-eligibility-and-retention.md) diff --git a/diagrams/plantuml/rollback-policy.puml b/diagrams/plantuml/rollback-policy.puml new file mode 100644 index 0000000..30042dc --- /dev/null +++ b/diagrams/plantuml/rollback-policy.puml @@ -0,0 +1,52 @@ +@startuml +title Ordinary rollback policy after a failed system update +skinparam shadowing false +skinparam monochrome true +start +:Save failed release, reason, retry block, +recovery intent and finite budget; +:Exclude competing installation; +if (Rollback window open and +target eligible?) then (yes) + if (Recovery boot budget remains?) then (yes) + if (Current data usable by A?) then (yes) + else (no) + if (Valid compatible backup and +restore explicitly authorized?) then (yes) + :Restore through the defined recovery procedure; + :Retain any data-loss result; + else (no) + :Save failure; enter separate recovery policy; + stop + endif + endif + :Boot control saves consumed attempt +and selects A before handoff; + if (A reaches checks and passes +within the deadline?) then (yes) + :Save recovery success and pending report; + :Retain failed-release block; + stop + else (no) + :Explicit check failure goes to separate recovery; + :Failure to reach checks uses reset path +and remaining saved budget; + :Budget exhaustion goes to separate recovery; + stop + endif + else (no) + :Save exhausted budget; enter separate recovery; + stop + endif +else (no) + :Save ineligible target; enter separate recovery; + stop +endif +legend bottom + Target eligibility includes artifacts, shared components, configuration, + recovery-state compatibility, and permission under security policy. + Early boot recovery relies on the contract established before trial. + A backup restore before A boots requires a capable recovery environment. + This diagram describes policy, not storage atomicity or a rescue implementation. +endlegend +@enduml diff --git a/diagrams/plantuml/rollback-recovery-sequence.puml b/diagrams/plantuml/rollback-recovery-sequence.puml new file mode 100644 index 0000000..3e5f837 --- /dev/null +++ b/diagrams/plantuml/rollback-recovery-sequence.puml @@ -0,0 +1,46 @@ +@startuml +title Recovery coordination and restart after boot handoff +skinparam shadowing false +skinparam monochrome true +participant "Recovery supervisor" as Supervisor +database "Recovery journal" as Journal +participant "Data recovery procedure" as Data +participant "Boot control" as Boot +participant "Retained system A" as A + +Supervisor -> Journal : Save failed release, reason, block,\nrecovery intent and reporting obligation +Supervisor -> Supervisor : Exclude installs; establish target eligibility +opt Approved compatible backup needed + Supervisor -> Data : Restore under its interruption contract + Data --> Supervisor : Compatible data; loss accounting + Supervisor -> Journal : Save completed restore and data-loss result +end +Supervisor -> Boot : Request recovery boot of A +Boot -> Boot : Save selection and consumed recovery attempt +Boot --> Supervisor : Saved state / request result +... reset can occur before supervisor saves progress ... +Boot -> A : Handoff under saved boot state +A -> Supervisor : Start local recovery coordinator +Supervisor -> Boot : Read authoritative selection and budget +Boot --> Supervisor : A selected; attempt already consumed +Supervisor -> Journal : Reconcile progress; do not replenish budget +Supervisor -> A : Check required local functions with deadline +alt Checks pass + A --> Supervisor : Healthy + Supervisor -> Journal : Save recovery success, running release,\ndata loss and pending report; retain block +else Checks fail + A --> Supervisor : Failed + Supervisor -> Journal : Save recovery failure + Supervisor -> Supervisor : Enter separate recovery policy +end +note over Boot,A + If A cannot reach checks, the reset path and saved budget + bound further boots. Exhaustion enters separate recovery. +end note +note over Supervisor,Data + Supervisor available here is an assumption. If restoration must + precede A's startup, a capable recovery environment must perform it. + Each component needs its own durable write and restart contract. + The sequence is not one transaction. Reporting may remain offline. +end note +@enduml diff --git a/diagrams/plantuml/rollback-window.puml b/diagrams/plantuml/rollback-window.puml new file mode 100644 index 0000000..df2e87d --- /dev/null +++ b/diagrams/plantuml/rollback-window.puml @@ -0,0 +1,43 @@ +@startuml +title Example rollback window across a release lifecycle +skinparam shadowing false +skinparam monochrome true +participant "Release lifecycle" as Release +participant "Rollback policy" as Policy +participant "Shared data" as Data +participant "Slot A" as A + +Release -> Policy : Admit B's trial; retain eligible A +Policy -> A : Preserve A and matching artifacts +Policy -> Data : Require A/B-compatible reads and writes +note over Policy,A + Rollback window open during trial. +end note +Release -> Release : B passes local checks +Release -> Policy : Confirm B +note over Policy,Data + Confirmation accepts B. It does not itself prove that later + data changes remain compatible or define a retention period. +end note +opt Product promises rollback after confirmation + Policy -> A : Continue retaining eligible A + Policy -> Data : Continue preserving A compatibility +end +Release -> Policy : End promised rollback period +Policy -> Policy : Durably close A's rollback window +note over Policy,A + If closure is interrupted, never infer an open window + after its prerequisites have been removed. +end note +opt Incompatible migration required + Release -> Data : Migrate under a separate recovery procedure +end +opt A becomes the target of a later update + Release -> A : Reuse under the next update's admission policy +end +note over Policy,A + A is no longer promised as an ordinary recovery choice. + Separate recovery and security policy still apply. + Closure, migration, and slot reuse are distinct events. +end note +@enduml diff --git a/diagrams/readme.md b/diagrams/readme.md index d4b4ac1..616e580 100644 --- a/diagrams/readme.md +++ b/diagrams/readme.md @@ -1,14 +1,17 @@ # OTA diagrams -PlantUML sources accompany chapters 03–06. The diagrams describe the example A/B design, not a required platform or partition table. +PlantUML sources accompany chapters 03–07. The diagrams describe the example A/B design, not a required platform or partition table. | View | Source | Preview | |---|---|---| | Roles and the server/device boundary | [PlantUML](plantuml/ota-architecture.puml) | [PNG](rendered/ota-architecture.png) | | Trial boot, confirmation and recovery | [PlantUML](plantuml/ab-trial-boot.puml) | [PNG](rendered/ab-trial-boot.png) | | Storage areas and access responsibilities | [PlantUML](plantuml/ab-storage-layout.puml) | [PNG](rendered/ab-storage-layout.png) | -| Preparation and activation sequence | [PlantUML](plantuml/ab-installation-sequence.puml) | Source only | -| Installation states and restart decisions | [PlantUML](plantuml/ab-installation-recovery.puml) | Source only | +| Preparation and activation sequence | [PlantUML](plantuml/ab-installation-sequence.puml) | [PNG](rendered/ab-installation-sequence.png) | +| Installation states and restart decisions | [PlantUML](plantuml/ab-installation-recovery.puml) | [PNG](rendered/ab-installation-recovery.png) | +| Rollback eligibility and recovery decisions | [PlantUML](plantuml/rollback-policy.puml) | [PNG](rendered/rollback-policy.png) | +| Recovery coordination and restart | [PlantUML](plantuml/rollback-recovery-sequence.puml) | [PNG](rendered/rollback-recovery-sequence.png) | +| Rollback window and release lifecycle | [PlantUML](plantuml/rollback-window.puml) | [PNG](rendered/rollback-window.png) | From the repository root, regenerate previews with a local PlantUML installation and Graphviz: @@ -16,4 +19,4 @@ From the repository root, regenerate previews with a local PlantUML installation JAVA_TOOL_OPTIONS=-Djava.awt.headless=true plantuml -tpng -o ../rendered diagrams/plantuml/*.puml ``` -Chapters 03–05 include existing previews. The chapter 06 diagrams are provided as sources only; generate previews locally when needed. No external rendering service is needed. These diagrams do not establish power-loss safety. The [A/B simulation](../examples/simulations/ab-trial-boot/readme.md) covers trial boot. The [interrupted installation model](../examples/simulations/interrupted-installation/readme.md) covers preparation, old progress, and supplied boot-record write outcomes. +Chapters 03–07 include PNG previews alongside their editable PlantUML sources. No external rendering service is needed. These diagrams do not establish power-loss safety. The [A/B simulation](../examples/simulations/ab-trial-boot/readme.md) covers trial boot. The [interrupted installation model](../examples/simulations/interrupted-installation/readme.md) covers preparation, old progress, and supplied boot-record write outcomes. The [rollback policy simulation](../examples/simulations/rollback-policy/readme.md) covers recovery eligibility, data loss, bounded attempts, and failed-release blocks. diff --git a/diagrams/rendered/rollback-policy.png b/diagrams/rendered/rollback-policy.png new file mode 100644 index 0000000000000000000000000000000000000000..0d2d237975e4445c9144f30bc94fa3be58a90c17 GIT binary patch literal 85200 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 literal 0 HcmV?d00001 diff --git a/diagrams/rendered/rollback-recovery-sequence.png b/diagrams/rendered/rollback-recovery-sequence.png new file mode 100644 index 0000000000000000000000000000000000000000..3c33417c16c3a1fefd162789c536d46061e05ad0 GIT binary patch literal 93661 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 z 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%0A%q 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 literal 0 HcmV?d00001 diff --git a/docs/00-series-overview.md b/docs/00-series-overview.md index ce89345..f501470 100644 --- a/docs/00-series-overview.md +++ b/docs/00-series-overview.md @@ -71,7 +71,7 @@ The emphasis is always on understanding the underlying design rather than memori ## Repository Structure -The structure below includes the current documentation, PlantUML diagrams, and A/B simulation. Hardware demonstrations and later chapters will be added as the practical material develops. +The structure below includes the current documentation, PlantUML diagrams, and C++ simulations. Hardware demonstrations and later chapters will be added as the practical material develops. ```text ota-reference-design/ @@ -84,6 +84,7 @@ ota-reference-design/ │ ├── 04-starting-an-updated-system-or-service.md │ ├── 05-storage-layout.md │ ├── 06-atomic-updates.md +│ ├── 07-rollback-and-recovery.md │ ├── ... │ ├── diagrams/ @@ -93,7 +94,8 @@ ota-reference-design/ ├── examples/ │ └── simulations/ │ ├── ab-trial-boot/ -│ └── interrupted-installation/ +│ ├── interrupted-installation/ +│ └── rollback-policy/ │ ├── adr/ │ ├── ADR-001-repository-name.md @@ -115,6 +117,7 @@ The chapters are designed to build on each other. The current chapters are: - [04. Starting an Updated System or Service](04-starting-an-updated-system-or-service.md) - [05. Storage Layout](05-storage-layout.md) - [06. Atomic Updates](06-atomic-updates.md) +- [07. Rollback and Recovery](07-rollback-and-recovery.md) To catch up on additions and revisions, see the [changelog](../CHANGELOG.md), with dated summaries and links to chapters, diagrams, simulations, and related history. @@ -139,7 +142,7 @@ Storage Layout Atomic Updates │ ▼ -Rollback +Rollback and Recovery │ ▼ Security @@ -201,7 +204,7 @@ Where possible, theoretical discussions are accompanied by practical material, i The objective is to connect high-level architecture with practical implementation. -Available now: [PlantUML diagrams](../diagrams/readme.md), a [C++ A/B trial boot simulation](../examples/simulations/ab-trial-boot/readme.md), and a [C++ interrupted installation model](../examples/simulations/interrupted-installation/readme.md). Chapters 03–05 have PNG previews; chapter 06 currently has sources only. Raspberry Pi and QEMU demonstrations are planned. +Available now: [PlantUML diagrams](../diagrams/readme.md), a [C++ A/B trial boot simulation](../examples/simulations/ab-trial-boot/readme.md), a [C++ interrupted installation model](../examples/simulations/interrupted-installation/readme.md), and a [C++ rollback policy simulation](../examples/simulations/rollback-policy/readme.md). Chapters 03–07 have PNG previews alongside their PlantUML sources. Raspberry Pi and QEMU demonstrations are planned. --- diff --git a/docs/06-atomic-updates.md b/docs/06-atomic-updates.md index 5d00f8b..761eaf8 100644 --- a/docs/06-atomic-updates.md +++ b/docs/06-atomic-updates.md @@ -58,6 +58,8 @@ If the request returns an error or its result is lost during a restart, the OTA [Preparation and activation sequence — PlantUML source](../diagrams/plantuml/ab-installation-sequence.puml) +![Preparation and activation sequence](../diagrams/rendered/ab-installation-sequence.png) + There is a gap between steps 6 and 7: boot control may have saved the request while the OTA manager still says “prepared.” After a restart, boot control can start B. The OTA manager must accept that saved boot decision and repair its progress record. It must not overwrite B or reset the trial attempt count. Two separate records do not form one transaction. Safe ordering and recovery rules handle the states left between them. @@ -103,6 +105,8 @@ Package scripts, database migrations, and external actions also need their own r [Installation states and restart decisions — PlantUML source](../diagrams/plantuml/ab-installation-recovery.puml) +![Installation states and restart decisions](../diagrams/rendered/ab-installation-recovery.png) + [ADR-019: Recover Interrupted Updates From Durable State](../adr/ADR-019-recover-interrupted-updates-from-durable-state.md) defines the ownership and recovery rules used here. [ADR-017](../adr/ADR-017-keep-recovery-state-outside-replaceable-software.md) defines where the records must live. ## 6. An Independent Service Update @@ -151,4 +155,4 @@ Model tests check ordering. Platform tests must also interrupt real writes, rese Preparation keeps incomplete software out of the boot path. Activation gives a complete version a chance to run. Confirmation still depends on checks after startup. -Next, we will look more closely at rollback: when to return to a previous version, what recovery needs, and when that previous version is no longer a usable choice. +Next, [chapter 07: Rollback and Recovery](07-rollback-and-recovery.md) examines when to return to a previous version, what recovery needs, and when that previous version is no longer a usable choice. diff --git a/docs/07-rollback-and-recovery.md b/docs/07-rollback-and-recovery.md new file mode 100644 index 0000000..83db387 --- /dev/null +++ b/docs/07-rollback-and-recovery.md @@ -0,0 +1,149 @@ +# 07. Rollback and Recovery: When the Previous Version Still Works + +[Chapter 06](06-atomic-updates.md) kept incomplete software out of the boot path and defined how to continue an interrupted installation. A complete update can still fail when it runs. + +Suppose B starts, changes a shared database, and then fails its checks. Boot control returns to A. A's files are intact, but A cannot read the new database. The slot switch worked; recovery did not. + +The question for this chapter is: **what must remain usable for the device to recover, and what happens when returning to the previous version is no longer safe?** + +## 1. Three Different Operations + +| Operation | What it changes | What it does not establish | +|---|---|---| +| System rollback | Selects a retained system release, including its matching boot artifacts | That its data is compatible or its services work | +| Package downgrade | Reinstalls an older package on the current platform | That dependencies, scripts, and data can be restored | +| Recovery | Restores the required device functions through a defined procedure | That returning to an old release is always the right procedure | + +Rollback and downgrade are possible parts of recovery. Recovery may instead require a separate environment, a repair procedure, or physical service. + +We keep the A/B example from earlier chapters. A was confirmed before B's trial. Boot control owns slot selection and attempts. A separate supervisor coordinates local checks and recovery. Its records remain outside the replaceable slots. These roles need not be separate executables. + +## 2. Decide Which Failure Starts Recovery + +The trial rules from [ADR-014](../adr/ADR-014-trial-boot-and-confirmation.md) still apply: + +- If B reaches local checks and fails them, request recovery without spending every remaining trial attempt. +- If B cannot reach the checks, saved attempt limits let boot control return to A on a later boot. +- If B hangs, a watchdog or another defined mechanism must cause that later boot. + +Losing the server connection alone is not a failed local health check in this design. Recovery and its checks work offline; reporting can wait. + +A failure after B has been confirmed is a different case. The trial may have ended, A may have been replaced, or shared data may have changed. Do not silently restart the old trial policy. Reassess the available recovery target under the product's current policy. + +For an early boot failure, Linux cannot run a compatibility check before choosing A. Before allowing B's trial, the system must establish that the retained software and permitted trial data changes preserve this recovery path. A runtime supervisor can perform additional checks when it runs, but cannot replace that admission rule. + +## 3. A Previous Release Must Still Be Eligible + +Before relying on A, establish: + +1. Its release identity and matching boot artifacts are known, retained, and valid under the platform's verification policy. +2. Its required shared components and device configuration remain compatible. +3. It can use the current data, or an approved restore procedure can prepare compatible data. +4. The rollback window is still open and the platform's security policy permits this release. +5. The local recovery mechanism and a finite attempt budget are available. + +These conditions are a recovery contract. A record saying that A passed checks last week does not prove them today. Retain the artifacts, dependencies, and verification information that the contract requires, rather than relying on a later download. + +The contract must also cover update-state formats shared by A and B. Old software that cannot interpret the recovery record is not a usable recovery target. + +[ADR-020: Define Rollback Eligibility and Retention](../adr/ADR-020-define-rollback-eligibility-and-retention.md) defines this choice. The following decision diagram shows the ordinary rollback path and where it must stop. + +![Rollback policy](../diagrams/rendered/rollback-policy.png) + +[Rollback policy — PlantUML source](../diagrams/plantuml/rollback-policy.puml) + +## 4. Recovering Software and Data Together + +The [storage chapter](05-storage-layout.md) separated device data from system slots. That preserves data when an image is replaced, but both versions still need to understand it. + +| Approach | Benefit | Cost or limit | +|---|---|---| +| Keep a format usable by A and B | Return to A can retain records written during B's trial | Both readers and writers must preserve compatibility | +| Keep a separate trial copy | B's changes can be isolated from A's copy | Extra space; new records need an explicit merge or loss policy | +| Restore a validated backup | Can recover a compatible earlier dataset | Restore needs interruption handling; newer records may be lost | +| Delay an incompatible migration | Preserves the old recovery path during trial | B must work before that migration; the rollback window must end explicitly | + +Compatibility includes write behavior. B must not merely read A's format; its writes must leave data A can still use. Configuration changes need the same review. + +For the shared-data reference design, keep data compatible during trial. Reject or defer a release that needs an incompatible change before confirmation and has no supported recovery path. [ADR-021](../adr/ADR-021-preserve-data-compatibility-during-trial.md) records this decision. + +A backup is an alternative, not an automatic escape hatch. Suppose it contains measurements 1 and 2, while the live database contains 1 through 4. Restoring it discards measurements 3 and 4 unless another mechanism preserves them. Product policy must authorize that loss before the restore. A copy also needs a valid format, consistency checks, sufficient space, and a tested restore procedure. + +An incompatible migration cannot normally be postponed until after a failed early boot and then undone by an unavailable Linux supervisor. If restoring data is necessary before A can start, a recovery environment capable of doing that work must run first. + +## 5. Execute Recovery as a Saved Procedure + +A possible procedure after a detected failure is: + +1. Save the failed release identity, reason, recovery target, remaining budget, and a block against automatically retrying the failed release. +2. Exclude a competing installation while recovery owns the target and data. +3. Check target eligibility. Prepare compatible data through the approved procedure, if needed. +4. Ask boot control to select A under its durable-state contract. Account for each recovery boot attempt before handing control to A. +5. Start A and check the required local functions within a defined time limit. +6. Save either recovered or recovery failed, the running release, any data loss, and a pending report. + +A selected slot is not a successful recovery. Only the checks establish that the required functions have returned. + +![Recovery sequence](../diagrams/rendered/rollback-recovery-sequence.png) + +[Recovery sequence — PlantUML source](../diagrams/plantuml/rollback-recovery-sequence.puml) + +Boot control remains authoritative about boot selection and attempts. The supervisor's journal must not override it after a reset. If selection succeeded but saving local progress did not, read the saved boot state and reconcile the journal, following [ADR-019](../adr/ADR-019-recover-interrupted-updates-from-durable-state.md). + +Give every restore, package operation, and state transition an interruption rule. After a reset, determine whether it completed before repeating it. In particular, do not restore an old backup again after normal operation has resumed and written new data. Do not replenish an attempt budget merely because a coordinator restarted. + +For an independent service, use the package manager's repair and downgrade rules from [ADR-015](../adr/ADR-015-service-checks-and-package-downgrade.md). Keep its supervisor usable when the service fails. A package command completing still needs service checks afterward. + +## 6. Stop Repeated Failures + +After recovering A, a normal update check may discover B again. Without a saved block, the device can repeat the same failed update forever. + +In this example, the block identifies the exact failed system release on this device, survives reset, and applies to every automatic installation path. Rediscovering B does not remove it. A different release can be considered through the normal admission checks. An authorized operator can clear the block after review, with the action recorded. Use an unambiguous release identity rather than a reusable display name. + +If A fails its checks, cannot start within the recovery budget, or is ineligible, stop the ordinary A/B path. Do not keep alternating A and B. Record the available diagnosis and enter the platform's separate recovery policy. + +That policy must identify what can actually run: for example, a recovery environment with independent boot support, or a physical service path. A third partition sharing the same broken boot code does not by itself solve the failure. Define whether the device stops affected functions, what diagnostics remain available, and how service is requested. + +[ADR-022: Bound Recovery and Block Failed System Releases](../adr/ADR-022-bound-recovery-and-block-failed-system-releases.md) records these rules. This chapter defines the boundary; it does not implement a rescue image or hardware recovery mechanism. + +## 7. Define When the Rollback Window Ends + +**Confirmation** accepts B after its required checks. **Closing the rollback window** ends the promise that the device can return to A. **Reusing A's slot** removes the retained software. These are separate events, although a product may deliberately coordinate them. + +If the product promises rollback after confirmation, it must continue preserving A and compatible data for that period. Otherwise it can explicitly close the window after confirmation, then perform an incompatible migration or reuse the slot under the next update's policy. Before either destructive action, save that A is no longer an ordinary recovery choice. If the transition is interrupted, a conservative closed window is safer than promising an unavailable target. + +![Rollback window](../diagrams/rendered/rollback-window.png) + +[Rollback window — PlantUML source](../diagrams/plantuml/rollback-window.puml) + +Recovery selection must also respect the platform's security policy. A local failure block prevents repeating a failed deployment; a security anti-rollback rule restricts which older software may run. Their purposes differ. Signature verification and security version policy follow in the security chapter. + +## 8. A C++ Model of Recovery Policy + +The [rollback policy example](../examples/simulations/rollback-policy/readme.md) supplies software eligibility and health-check outcomes to a small C++17 state machine. It models shared data as a schema number and a list of record IDs, with an optional backup. + +It covers successful rollback, incompatible data without restore permission, an approved restore with explicit data loss, reset during recovery, failure of A, rediscovery of blocked B, attempt exhaustion, a closed rollback window, and an unavailable target. + +The existing [trial boot example](../examples/simulations/ab-trial-boot/readme.md) explains boot mechanics. The new model explains recovery decisions and data consequences. They are separate programs. The backup scenarios deliberately explore an alternative to ADR-021's trial policy; they do not authorize incompatible trial writes in the shared-data reference design. + +Each modeled transition is assumed to finish durably. Reset points occur between transitions. The model does not implement real backup restoration, a bootloader, package operations, signatures, storage flushing, watchdogs, or interruption within a write. A boolean eligibility input is an assumption, not an implementation of release verification. + +## 9. Check the Design Against Failures + +| Failure | Required result | +|---|---| +| B fails checks; A and data remain usable | Return to A, check it, save recovery success, keep B blocked | +| B cannot reach the supervisor | Boot control and the reset path enforce the admitted trial recovery contract | +| A cannot read current data | Use an approved restore path or separate recovery; do not start A on incompatible data | +| Backup restore would lose unapproved data | Stop ordinary rollback without changing the live data | +| Reset during recovery | Resume from authoritative saved state without refreshing the budget | +| A also fails or exhausts attempts | Enter separate recovery; do not alternate slots indefinitely | +| B is offered again after reset | Preserve and enforce the failed-release block | +| Rollback window closed or A replaced | Reject A as an ordinary recovery target | +| Device is offline | Perform local checks and recovery; retain the report for later | + +Model checks establish policy behavior under supplied assumptions. Platform tests must also interrupt actual restore and boot-state writes, force startup hangs, and exercise the separate recovery path. + +## 10. What Comes Next? + +Recovery needs both an available target and permission to use it. Next, we will examine update integrity, signatures, trust, and the security policy that determines which releases a device may accept. diff --git a/examples/simulations/rollback-policy/CMakeLists.txt b/examples/simulations/rollback-policy/CMakeLists.txt new file mode 100644 index 0000000..fe15f75 --- /dev/null +++ b/examples/simulations/rollback-policy/CMakeLists.txt @@ -0,0 +1,23 @@ +cmake_minimum_required(VERSION 3.20) +project(rollback_policy LANGUAGES CXX) +set(CMAKE_CXX_EXTENSIONS OFF) + +add_library(rollback-model simulation.cpp) +target_compile_features(rollback-model PUBLIC cxx_std_17) +if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") + target_compile_options(rollback-model PRIVATE -Wall -Wextra -Wpedantic) +endif() + +add_executable(rollback-simulate main.cpp) +target_link_libraries(rollback-simulate PRIVATE rollback-model) + +include(CTest) +if(BUILD_TESTING) + add_executable(rollback-tests tests.cpp) + target_link_libraries(rollback-tests PRIVATE rollback-model) + add_test(NAME recovery-policy-invariants COMMAND rollback-tests) + add_test(NAME all-scenarios COMMAND rollback-simulate all) + add_test(NAME cli-help COMMAND rollback-simulate --help) + add_test(NAME cli-invalid COMMAND rollback-simulate invalid) + set_tests_properties(cli-invalid PROPERTIES WILL_FAIL TRUE) +endif() diff --git a/examples/simulations/rollback-policy/main.cpp b/examples/simulations/rollback-policy/main.cpp new file mode 100644 index 0000000..9bae85d --- /dev/null +++ b/examples/simulations/rollback-policy/main.cpp @@ -0,0 +1,49 @@ +#include "simulation.hpp" + +#include +#include +#include + +namespace model = ota::rollback; + +namespace { + + void usage(std::ostream &output) { + output << "Usage: rollback-simulate [all|SCENARIO|--help]\nScenarios:\n"; + for (const auto &scenario: model::scenarios()) output << " " << scenario << '\n'; + } + + void run(const std::string &scenario) { + const auto result = model::run_scenario(scenario); + std::cout << scenario << ": " << model::name(result.phase) + << "; running=" << (result.running == model::Slot::A ? "A" : "B") + << "; boots=" << result.boots_requested + << "; attempts-left=" << result.attempts_left + << "; records-lost=" << result.records_lost + << "; failed-release-blocked=" << (result.blocked_releases.count(result.failed_release) != 0) + << "; " << result.recovery_reason << '\n'; + } + +}// namespace + +int main(int argc, char **argv) { + if (argc == 2 && std::string(argv[1]) == "--help") { + usage(std::cout); + return 0; + } + if (argc > 2) { + usage(std::cerr); + return 1; + } + try { + const std::string requested = argc == 2 ? argv[1] : "all"; + if (requested == "all") { + for (const auto &scenario: model::scenarios()) run(scenario); + } else + run(requested); + } catch (const std::exception &error) { + std::cerr << error.what() << '\n'; + usage(std::cerr); + return 1; + } +} diff --git a/examples/simulations/rollback-policy/readme.md b/examples/simulations/rollback-policy/readme.md new file mode 100644 index 0000000..e1c0cb5 --- /dev/null +++ b/examples/simulations/rollback-policy/readme.md @@ -0,0 +1,70 @@ +# Rollback policy simulation + +This C++17 standard-library example accompanies [chapter 07](../../../docs/07-rollback-and-recovery.md), [ADR-020](../../../adr/ADR-020-define-rollback-eligibility-and-retention.md), [ADR-021](../../../adr/ADR-021-preserve-data-compatibility-during-trial.md), and [ADR-022](../../../adr/ADR-022-bound-recovery-and-block-failed-system-releases.md). It models recovery decisions after B fails, including data compatibility, bounded attempts, and a persistent failed-release block. + +Build with CMake 3.20 or later and a C++17 compiler from the repository root. No third-party libraries are needed: + +```sh +cmake -S examples/simulations/rollback-policy -B /tmp/ota-rollback-build -DCMAKE_BUILD_TYPE=Debug +cmake --build /tmp/ota-rollback-build +/tmp/ota-rollback-build/rollback-simulate all +/tmp/ota-rollback-build/rollback-simulate backup-restore +ctest --test-dir /tmp/ota-rollback-build --output-on-failure +``` + +No argument also runs all scenarios. `--help` lists their names. Invalid arguments return a nonzero status. + +## Scenarios + +| Scenario | Expected result | +|---|---| +| `success` | Compatible data; A passes checks; recovery succeeds. | +| `incompatible-data` | A cannot read schema 2; no approved restore; stop without changing data or booting A. | +| `backup-restore` | Approved schema-1 backup replaces schema-2 data; A passes; two live record IDs are lost. | +| `restart-during-recovery` | Reset before A completes checks; another boot consumes the remaining attempt and passes. | +| `recovery-failure` | A explicitly fails local checks; enter separate recovery immediately. | +| `blocked-release` | After recovery and reset, rediscovering system-2 leaves it blocked. | +| `attempts-exhausted` | Two A boots fail to reach completed checks; no third boot is allowed. | +| `window-closed` | Retained A is outside the promised rollback window; do not select it. | +| `target-unavailable` | Supplied target eligibility fails; do not select A. | + +The backup scenarios explore an alternative to ADR-021's compatible shared-data trial policy. They are not permission for incompatible writes during that reference design's trial. A real early-boot failure would need a recovery environment able to restore data before A uses it. + +## State and Ownership + +`Storage` represents saved boot-control and supervisor records plus data. It survives reconstruction of `Coordinator`; nothing is persisted to real files. The normal path is: + +```text +Idle -> Assess -> [RestoreData] -> SelectPrevious -> CheckPrevious -> Recovered + | | | | + +-----------+----------------+-----------------+--> SeparateRecovery +``` + +`start()` saves the failure reason, exact release block, and recovery intent before taking action. Calling it again is rejected. Resume the saved phase instead. During recovery, automatic offers are excluded. `can_offer()` checks only that exclusion and the local failed-release block; it does not implement signature, hardware, or full admission policy. + +The modeled boot-control transition saves an attempt before handoff to A. Creating another coordinator does not consume or refresh attempts. `after_reset()` represents an actual device reset: an A boot that had not completed checks must go through another accounted handoff. After the illustrative budget of two boots is exhausted, the result is separate recovery. An explicit failed check stops sooner. + +Data consists of a schema number and unique record IDs. A accepts schema 1. Backup validity and restore permission are supplied inputs; the model counts live IDs missing from the restored copy. A completed restore is not repeated on restart. Terminal recovery does not restore the backup over later records. + +`running` records the last modeled handoff. At separate recovery it is diagnostic history, not evidence that a system is healthy or that a rescue environment started. Pending results and blocks are retained; no network transport or block-removal API is implemented. + +## Checks and Limits + +[tests.cpp](tests.cpp) checks all scenario outcomes, reset boundaries before and after restore and boot, data-loss accounting, block retention, exclusion of competing offers, finite attempt consumption, check-before-success ordering, invalid or unauthorized backups, and changes in eligibility before an action. The checks use exceptions and remain enabled in Release builds. + +Each transition is assumed to complete durably. Data replacement and its phase change form one assumed operation here. The example does not test a crash inside a restore or between separate real boot-control and journal writes. Real implementations need their own reconciliation rules, atomic data selection or restartable restore procedure, and platform failure injection. + +The model supplies eligibility and health outcomes. It does not validate actual artifacts, implement signatures or security anti-rollback, interpret a real schema, run a watchdog, measure deadlines, invoke a package manager, or enter a rescue system. A closed window and an unavailable target are policy inputs rather than a retention implementation. There are no concurrent writers. The block covers one failed update on one device. + +The [trial boot simulation](../ab-trial-boot/readme.md) covers boot mechanics; the [interrupted installation model](../interrupted-installation/readme.md) covers preparation and activation. The three programs are independent, not an integrated updater. + +## Sources and Diagrams + +- [simulation.hpp](simulation.hpp) and [simulation.cpp](simulation.cpp): saved state, policy transitions, and scenarios. +- [main.cpp](main.cpp): scenario runner. +- [tests.cpp](tests.cpp) and [CMakeLists.txt](CMakeLists.txt): invariants and CTest integration. +- Rollback policy: [PlantUML](../../../diagrams/plantuml/rollback-policy.puml), [PNG](../../../diagrams/rendered/rollback-policy.png). +- Recovery sequence: [PlantUML](../../../diagrams/plantuml/rollback-recovery-sequence.puml), [PNG](../../../diagrams/rendered/rollback-recovery-sequence.png). +- Rollback window: [PlantUML](../../../diagrams/plantuml/rollback-window.puml), [PNG](../../../diagrams/rendered/rollback-window.png). + +Format C++ sources with the repository's root `.clang-format`. Diagrams include editable PlantUML sources and PNG previews. diff --git a/examples/simulations/rollback-policy/simulation.cpp b/examples/simulations/rollback-policy/simulation.cpp new file mode 100644 index 0000000..c4cdce8 --- /dev/null +++ b/examples/simulations/rollback-policy/simulation.cpp @@ -0,0 +1,193 @@ +#include "simulation.hpp" + +#include +#include + +namespace ota::rollback { + + namespace { + + bool compatible(const Data &data) { + return data.schema == 1; + } + + bool can_restore(const Storage &storage) { + return storage.restore_authorized && storage.backup_valid && storage.backup && compatible(*storage.backup); + } + + bool eligible(const Storage &storage) { + return storage.window_open && storage.target_eligible; + } + + void finish(Coordinator &coordinator, Storage &storage, bool healthy = true) { + for (int steps = 0; !terminal(storage.phase); ++steps) { + if (steps >= 16) throw std::runtime_error("Recovery did not terminate"); + coordinator.advance(healthy); + } + } + + }// namespace + + Coordinator::Coordinator(Storage &storage) : storage_(storage) {} + + void Coordinator::start(const std::string &reason) { + if (storage_.phase != Phase::Idle) throw std::logic_error("Recovery already started; resume saved state"); + if (reason.empty() || storage_.failed_release.empty() || storage_.previous_release.empty() || storage_.failed_release == storage_.previous_release) + throw std::logic_error("Recovery requires distinct release identities and a failure reason"); + storage_.failure_reason = reason; + storage_.blocked_releases.insert(storage_.failed_release); + storage_.report_pending = true; + storage_.phase = Phase::Assess; + } + + void Coordinator::stop(const std::string &reason) { + storage_.recovery_reason = reason; + storage_.phase = Phase::SeparateRecovery; + } + + void Coordinator::advance(bool previous_healthy) { + switch (storage_.phase) { + case Phase::Idle: + throw std::logic_error("Save recovery intent before taking action"); + case Phase::Assess: + if (!eligible(storage_)) stop("previous release unavailable or rollback window closed"); + else if (storage_.attempts_left <= 0) + stop("recovery boot budget exhausted"); + else if (compatible(storage_.data)) + storage_.phase = Phase::SelectPrevious; + else if (can_restore(storage_)) + storage_.phase = Phase::RestoreData; + else + stop("incompatible data; no authorized valid restore"); + break; + case Phase::RestoreData: { + if (!eligible(storage_) || storage_.attempts_left <= 0 || !can_restore(storage_)) { + stop("restore prerequisites no longer hold"); + break; + } + // Record IDs are unique. Count live records absent from the backup. + const auto &saved = storage_.backup->records; + storage_.records_lost = static_cast(std::count_if( + storage_.data.records.begin(), storage_.data.records.end(), + [&](int record) { return std::find(saved.begin(), saved.end(), record) == saved.end(); })); + storage_.data = *storage_.backup; + ++storage_.restores; + // Data replacement and this progress transition are one assumed durable + // operation in this model. Real restores need their own recovery protocol. + storage_.phase = Phase::SelectPrevious; + break; + } + case Phase::SelectPrevious: + if (!eligible(storage_) || !compatible(storage_.data)) { + stop("previous release or data no longer eligible"); + break; + } + if (storage_.attempts_left <= 0) { + stop("recovery boot budget exhausted"); + break; + } + // Abstract boot control saves the consumed attempt before handoff. + --storage_.attempts_left; + ++storage_.boots_requested; + storage_.running = Slot::A; + storage_.phase = Phase::CheckPrevious; + break; + case Phase::CheckPrevious: + if (!eligible(storage_) || !compatible(storage_.data) || storage_.running != Slot::A) + stop("recovery prerequisites changed before checks"); + else if (!previous_healthy) + stop("previous release failed local checks"); + else { + storage_.recovery_reason = "previous release passed local checks"; + storage_.phase = Phase::Recovered; + } + break; + case Phase::Recovered: + case Phase::SeparateRecovery: + break; + } + } + + void Coordinator::after_reset() { + // A reset before completed checks requires another accounted boot. Recreating + // the Linux coordinator alone does not imply a device reset or new attempt. + if (storage_.phase == Phase::CheckPrevious) storage_.phase = Phase::SelectPrevious; + } + + bool terminal(Phase phase) { + return phase == Phase::Recovered || phase == Phase::SeparateRecovery; + } + + bool can_offer(const Storage &storage, const std::string &release) { + // This models the local block and exclusion only, not full update admission. + return (storage.phase == Phase::Idle || storage.phase == Phase::Recovered) && + storage.blocked_releases.count(release) == 0; + } + + const char *name(Phase phase) { + switch (phase) { + case Phase::Idle: + return "idle"; + case Phase::Assess: + return "assess"; + case Phase::RestoreData: + return "restore-data"; + case Phase::SelectPrevious: + return "select-previous"; + case Phase::CheckPrevious: + return "check-previous"; + case Phase::Recovered: + return "recovered"; + case Phase::SeparateRecovery: + return "separate-recovery"; + } + throw std::logic_error("Unknown recovery phase"); + } + + const std::vector &scenarios() { + static const std::vector values{ + "success", "incompatible-data", "backup-restore", "restart-during-recovery", + "recovery-failure", "blocked-release", "attempts-exhausted", "window-closed", "target-unavailable"}; + return values; + } + + Storage run_scenario(const std::string &scenario) { + if (std::find(scenarios().begin(), scenarios().end(), scenario) == scenarios().end()) + throw std::invalid_argument("Unknown scenario: " + scenario); + Storage storage; + if (scenario == "incompatible-data" || scenario == "backup-restore") storage.data.schema = 2; + if (scenario == "backup-restore") { + storage.backup = Data{1, {1, 2}}; + storage.backup_valid = true; + storage.restore_authorized = true; + } + if (scenario == "window-closed") storage.window_open = false; + if (scenario == "target-unavailable") storage.target_eligible = false; + { + Coordinator coordinator(storage); + coordinator.start("B failed required local checks"); + if (scenario == "restart-during-recovery" || scenario == "attempts-exhausted") { + coordinator.advance();// Assess. + coordinator.advance();// First A boot; checks not completed. + } else { + finish(coordinator, storage, scenario != "recovery-failure"); + } + } + if (scenario == "restart-during-recovery" || scenario == "attempts-exhausted") { + Coordinator restarted(storage); + restarted.after_reset(); + if (scenario == "attempts-exhausted") { + restarted.advance();// Second A boot also fails to reach completed checks. + restarted.after_reset(); + } + finish(restarted, storage); + } + if (scenario == "blocked-release") { + Coordinator restarted(storage); + restarted.after_reset(); + if (can_offer(storage, storage.failed_release)) throw std::runtime_error("Failed release was offered again"); + } + return storage; + } + +}// namespace ota::rollback diff --git a/examples/simulations/rollback-policy/simulation.hpp b/examples/simulations/rollback-policy/simulation.hpp new file mode 100644 index 0000000..2dd2046 --- /dev/null +++ b/examples/simulations/rollback-policy/simulation.hpp @@ -0,0 +1,67 @@ +#pragma once + +#include +#include +#include +#include +#include + +namespace ota::rollback { + + enum class Phase { Idle, + Assess, + RestoreData, + SelectPrevious, + CheckPrevious, + Recovered, + SeparateRecovery }; + enum class Slot { A, + B }; + + struct Data { + int schema = 1; + std::vector records{1, 2, 3, 4}; + }; + + // These are assumed complete durable records, not a storage implementation. + struct Storage { + Phase phase = Phase::Idle; + Slot running = Slot::B; + std::string failed_release = "system-2"; + std::string previous_release = "system-1"; + std::set blocked_releases; + std::string failure_reason; + std::string recovery_reason; + bool report_pending = false; + bool window_open = true; + bool target_eligible = true; + int attempts_left = 2; + int boots_requested = 0; + Data data; + std::optional backup; + bool backup_valid = false; + bool restore_authorized = false; + std::size_t records_lost = 0; + int restores = 0; + }; + + class Coordinator { + public: + explicit Coordinator(Storage &storage); + void start(const std::string &reason); + void advance(bool previous_healthy = true); + // Call once for an actual reset, not merely a coordinator restart. + void after_reset(); + + private: + Storage &storage_; + void stop(const std::string &reason); + }; + + bool terminal(Phase phase); + bool can_offer(const Storage &storage, const std::string &release); + const char *name(Phase phase); + const std::vector &scenarios(); + Storage run_scenario(const std::string &scenario); + +}// namespace ota::rollback diff --git a/examples/simulations/rollback-policy/tests.cpp b/examples/simulations/rollback-policy/tests.cpp new file mode 100644 index 0000000..7d2f5fd --- /dev/null +++ b/examples/simulations/rollback-policy/tests.cpp @@ -0,0 +1,161 @@ +#include "simulation.hpp" + +#include +#include + +namespace model = ota::rollback; + +namespace { + + void expect(bool condition, const char *message) { + if (!condition) throw std::runtime_error(message); + } + + template + void rejected(Operation operation) { + try { + operation(); + } catch (const std::logic_error &) { + return; + } + throw std::runtime_error("Invalid operation accepted"); + } + + void finish(model::Storage &storage) { + model::Coordinator coordinator(storage); + for (int steps = 0; !model::terminal(storage.phase); ++steps) { + expect(steps < 16, "Recovery did not terminate"); + coordinator.advance(); + } + } + + void scenario_outcomes() { + for (const auto &scenario: model::scenarios()) { + const auto storage = model::run_scenario(scenario); + const bool recovered = scenario == "success" || scenario == "backup-restore" || + scenario == "restart-during-recovery" || scenario == "blocked-release"; + expect(storage.phase == (recovered ? model::Phase::Recovered : model::Phase::SeparateRecovery), "Wrong scenario outcome"); + expect(storage.blocked_releases.count("system-2") == 1, "Failed release block lost"); + expect(storage.report_pending && !storage.failure_reason.empty() && !storage.recovery_reason.empty(), "Recovery diagnosis lost"); + expect(storage.attempts_left >= 0 && storage.boots_requested <= 2, "Boot budget violated"); + if (recovered) { + expect(storage.running == model::Slot::A && storage.data.schema == 1, "Recovered without usable A and data"); + expect(model::can_offer(storage, "system-3"), "Different release cannot reach normal admission"); + } + expect(!model::can_offer(storage, "system-2"), "Failed release automatically retried"); + } + const auto restored = model::run_scenario("backup-restore"); + expect(restored.data.records == std::vector({1, 2}) && restored.records_lost == 2 && restored.restores == 1, "Restore data loss not accounted"); + const auto incompatible = model::run_scenario("incompatible-data"); + expect(incompatible.data.schema == 2 && incompatible.data.records.size() == 4 && incompatible.boots_requested == 0, "Unsafe rollback changed data or booted A"); + const auto exhausted = model::run_scenario("attempts-exhausted"); + expect(exhausted.attempts_left == 0 && exhausted.boots_requested == 2, "Reset refreshed recovery attempts"); + } + + void reset_boundaries() { + // Cut after intent, assessment, restore, boot handoff, and completed checks. + for (int cut = 0; cut <= 4; ++cut) { + model::Storage storage; + storage.data.schema = 2; + storage.backup = model::Data{1, {1, 2}}; + storage.backup_valid = true; + storage.restore_authorized = true; + { + model::Coordinator coordinator(storage); + coordinator.start("trial health failure"); + for (int step = 0; step < cut; ++step) coordinator.advance(); + } + const int consumed = storage.boots_requested; + model::Coordinator restarted(storage); + restarted.after_reset(); + expect(storage.boots_requested == consumed && storage.attempts_left == 2 - consumed, "Reset changed saved budget"); + rejected([&] { restarted.start("rediscovered failure"); }); + finish(storage); + expect(storage.phase == model::Phase::Recovered, "Reset prevented recovery"); + expect(storage.restores == 1 && storage.records_lost == 2, "Reset repeated backup restore"); + // Data acquired after recovery must not be replaced by the old backup. + storage.data.records.push_back(5); + model::Coordinator next(storage); + next.after_reset(); + next.advance(); + expect(storage.data.records == std::vector({1, 2, 5}) && storage.restores == 1, "Completed recovery restored old backup again"); + } + } + + void admission_and_guards() { + model::Storage storage; + model::Coordinator coordinator(storage); + rejected([&] { coordinator.advance(); }); + rejected([&] { coordinator.start(""); }); + coordinator.start("local health failure"); + expect(storage.blocked_releases.count(storage.failed_release) == 1 && storage.boots_requested == 0, "Recovery acted before saving block"); + expect(!model::can_offer(storage, "system-3"), "Competing update admitted during recovery"); + coordinator.advance(); + coordinator.advance(); + expect(storage.phase == model::Phase::CheckPrevious, "Boot handoff reported success before checks"); + model::Coordinator process_restart(storage); + process_restart.advance(false); + expect(storage.phase == model::Phase::SeparateRecovery && storage.boots_requested == 1, "Failed recovery did not stop"); + process_restart.after_reset(); + process_restart.advance(); + expect(storage.phase == model::Phase::SeparateRecovery && storage.boots_requested == 1, "Terminal failure started another boot"); + } + + void restore_guards() { + for (int fault = 0; fault < 4; ++fault) { + model::Storage storage; + storage.data.schema = 2; + storage.backup = model::Data{1, {1, 2}}; + storage.restore_authorized = true; + storage.backup_valid = true; + if (fault == 0) storage.restore_authorized = false; + if (fault == 1) storage.backup_valid = false; + if (fault == 2) storage.backup->schema = 2; + if (fault == 3) storage.backup.reset(); + model::Coordinator coordinator(storage); + coordinator.start("trial failed after data change"); + finish(storage); + expect(storage.phase == model::Phase::SeparateRecovery && storage.restores == 0 && storage.boots_requested == 0, "Invalid restore accepted"); + expect(storage.data.schema == 2 && storage.data.records.size() == 4, "Rejected restore changed live data"); + } + model::Storage storage; + storage.data.schema = 2; + storage.backup = model::Data{1, {1, 2}}; + storage.backup_valid = storage.restore_authorized = true; + model::Coordinator coordinator(storage); + coordinator.start("trial failed"); + coordinator.advance(); + storage.restore_authorized = false; + coordinator.advance(); + expect(storage.phase == model::Phase::SeparateRecovery && storage.restores == 0, "Restore ignored revoked permission"); + } + + void target_changes() { + for (bool change_data: {false, true}) { + model::Storage storage; + model::Coordinator coordinator(storage); + coordinator.start("trial failed"); + coordinator.advance(); + if (change_data) storage.data.schema = 2; + else + storage.window_open = false; + coordinator.advance(); + expect(storage.phase == model::Phase::SeparateRecovery && storage.boots_requested == 0, "Changed prerequisites allowed boot handoff"); + } + } + +}// namespace + +int main() { + try { + scenario_outcomes(); + reset_boundaries(); + admission_and_guards(); + restore_guards(); + target_changes(); + std::cout << "All rollback policy checks passed\n"; + } catch (const std::exception &error) { + std::cerr << "Test failed: " << error.what() << '\n'; + return 1; + } +} diff --git a/readme.md b/readme.md index 6e07ca9..fb9fef1 100644 --- a/readme.md +++ b/readme.md @@ -22,7 +22,9 @@ This repository is not intended to be a production-ready framework. Instead, it The repository is being developed incrementally as a structured series of articles, diagrams, architecture decisions, and practical examples. -Start with the [series overview](docs/00-series-overview.md). The current practical material includes [PlantUML diagrams](diagrams/readme.md), an [A/B trial boot simulation](examples/simulations/ab-trial-boot/readme.md), and an [interrupted installation model](examples/simulations/interrupted-installation/readme.md). [Chapter 06: Atomic Updates](docs/06-atomic-updates.md) connects preparation, activation, and recovery after interruption. +Start with the [series overview](docs/00-series-overview.md). The current practical material includes [PlantUML diagrams](diagrams/readme.md), an [A/B trial boot simulation](examples/simulations/ab-trial-boot/readme.md), an [interrupted installation model](examples/simulations/interrupted-installation/readme.md), and a [rollback policy simulation](examples/simulations/rollback-policy/readme.md). + +[Chapter 06: Atomic Updates](docs/06-atomic-updates.md) connects preparation, activation, and recovery after interruption. [Chapter 07: Rollback and Recovery](docs/07-rollback-and-recovery.md) explains target eligibility, data compatibility, bounded recovery, and failed-release blocks. See the [changelog](CHANGELOG.md) for dated updates to the chapters, architecture decisions, diagrams, and simulations, with links to the material and related history.