-
Notifications
You must be signed in to change notification settings - Fork 5
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
KAD to auto-disable itself when the VUM takes over to avoid state conflicts #43
Merged
mikehaller
merged 20 commits into
eclipse-leda:main
from
SoftwareDefinedVehicle:kad-mqtt-poc
Sep 11, 2023
Merged
KAD to auto-disable itself when the VUM takes over to avoid state conflicts #43
mikehaller
merged 20 commits into
eclipse-leda:main
from
SoftwareDefinedVehicle:kad-mqtt-poc
Sep 11, 2023
Conversation
This file contains 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
vasilvas99
changed the title
Add MQTT listener to KAD
KAD to auto-disable itself when the Kanto Update Manager takes over to avoid state conflicts
Jun 28, 2023
vasilvas99
changed the title
KAD to auto-disable itself when the Kanto Update Manager takes over to avoid state conflicts
KAD to auto-disable itself when the VUM takes over to avoid state conflicts
Jun 28, 2023
mikehaller
approved these changes
Sep 11, 2023
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.
Satisfies contribution guidelines, looking good for me. Approved.
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.
Issue
KAD conflicts (overlaps) with VUM/CUA (Kanto update manager). We would like KAD to auto-disable itself when the container-update-agent (CUA) starts publishing to the
containersupdate/desiredstatefeedback
topic that it's identifying what actions it should take.Ideally, once disabled the KAD service will stay disabled after reboots/updates as the UM is fully managing the device.
Solution
We add a new module
mqtt_listener
to KAD under a compile-time feature flag called "mqtt". This module starts a lightweight MQTT client in a separate thread that subscribes to the MQTT broker and listens on thecontainersupdate/desiredstatefeedback
topic for messages from (UM) with status "IDENTIFIED".Additionally the existence of a lock-file (default path:
/var/lib/kanto-auto-deployer/KAD.enabled
) is used as persistent marker that KAD has previously seen this message.When the message with status "IDENTIFIED" is received:
.disabled
The systemd unit for KAD (example here) is expanded with:
Now systemd will always skip the KAD unit on subsequent restarts if the lock-file does not exist.
On sysVinit systems this can be checked in the runlevel-script in a similar fashion.
Testing:
Build QEMUx86-64 from
kad-mqtt-poc
of https://github.com/SoftwareDefinedVehicle/leda-distro-forkRun image
Create a mock_desiredstatefeedback.json message (from UM tests):
mosquitto_pub -t containersupdate/desiredstatefeedback -f mock_desiredstatefeedback.json
Check logs:
journalctl -u kanto-auto-deployer
. Expected:Other
KAD_LOCK_PATH=/PATH/TO/LOCK/FILE
to the environment and then running thecargo build