-
-
Notifications
You must be signed in to change notification settings - Fork 1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix RAUC tryboot handler set-state idempotency, add more checks #3891
Conversation
When RPi is booted in the tryboot state and the set-state operation is called for the second time, the tryboot files don't exists anymore and the handler exits with an error code, printing an error in the Supervisor logs. Fix handling of this case and add few more checks to make the handler a bit more robust/traceable.
📝 WalkthroughWalkthroughThe pull request refines the boot state handling in the Changes
Sequence Diagram(s)sequenceDiagram
participant S as rpi-tryboot.sh
participant FS as File System
S->>S: Evaluate new_state
alt new_state is not "good"
S->>FS: Remove .good file
S-->>S: Exit script
else new_state is "good"
S->>FS: Check existence of cmdline-tryboot.txt
alt cmdline-tryboot.txt missing
S->>FS: Check existence of .good file
alt .good file missing
S-->>S: Exit script
end
end
S->>FS: Check existence of tryboot.txt
alt tryboot.txt missing
S-->>S: Exit script
else
S->>FS: Create .good file
S-->>S: Continue processing
end
end
✨ Finishing Touches
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (1)
buildroot-external/board/raspberrypi/rpi5-64/rootfs-overlay/usr/lib/rauc/rpi-tryboot.sh (1)
86-114
: Robust File Existence and State Commitment Checks.This block adds several important checks:
- It verifies that
cmdline-tryboot.txt
is present. If it is missing but a.good
file exists, it exits gracefully assuming the operation was already handled; otherwise, it logs an error and exits.- It similarly ensures that
tryboot.txt
is present before proceeding.- It validates that the
rcauc.slot
value extracted fromcmdline-tryboot.txt
matches the expected slot, which prevents state mismatches.These additions greatly enhance error handling and the robustness of the state commitment process.
Consider refactoring the nested conditions to reduce complexity and improve readability—possibly by combining file checks into a compound conditional.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
buildroot-external/board/raspberrypi/rpi5-64/rootfs-overlay/usr/lib/rauc/rpi-tryboot.sh
(3 hunks)
🔇 Additional comments (2)
buildroot-external/board/raspberrypi/rpi5-64/rootfs-overlay/usr/lib/rauc/rpi-tryboot.sh (2)
76-80
: Early Exit for Non-"good" State.The check on these lines ensures that if the state being set is not
"good"
, then the script immediately removes the.good
file and exits. This early exit supports idempotency by preventing further unintended modifications.
115-117
: Conditional Creation of the.good
File.This final segment creates the
.good
file only whennew_state
is exactly"good"
, which is consistent with the intended behavior of marking a successful tryboot state. This ensures that the file is only created after all the preceding checks have passed and the intended state is confirmed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
When RPi is booted in the tryboot state and the set-state operation is called for the second time, the tryboot files don't exists anymore and the handler exits with an error code, printing an error in the Supervisor logs. Fix handling of this case and add few more checks to make the handler a bit more robust/traceable.
Summary by CodeRabbit