-
Notifications
You must be signed in to change notification settings - Fork 2k
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
doc/memos: RDM Runtime Configuration Architecture #10622
base: master
Are you sure you want to change the base?
doc/memos: RDM Runtime Configuration Architecture #10622
Conversation
Nice first pass at this! Conceptually the approach makes sense, and I agree that a facility to store configuration is useful. I do not have experience with trying to solve this problem though, so my comments below are more generic. Context is a good place to start. What alternative implementations are available in other embedded systems? Is the design here in the mainstream? I see a link to Apache mynewt but no reference in the text. Consider addition of a real example. I like the flow section, but the discussion would be more concrete with a specific example, like setting the IP address for a resource directory server, or maybe the group of configuration items for networking. I like the bullets in section 4 for the top level interface to registry handlers. Can you do the same for the storage interface in section 5 and configuration manager in section 6? That would help focus their main responsibilities. I was thrown off by the use of 'commit' in the registry section. That verb seems like it would apply to the storage section. Is there a better name for this notification that the registry is ready to use? The diagram is really helpful. The size of configuration interface in the diagram makes it seem like it's more important than storage or the registry handlers. From the discussion, it seems like all three of these elements are important, with maybe storage a little less so because its purpose is pretty clear. Maybe resize the components to reflect their importance. |
doc/memos/rdm-draft-alamos-lanzieri-runtime-configuration-architecture.md
Outdated
Show resolved
Hide resolved
doc/memos/rdm-draft-alamos-lanzieri-runtime-configuration-architecture.md
Outdated
Show resolved
Hide resolved
doc/memos/rdm-draft-alamos-lanzieri-runtime-configuration-architecture.md
Outdated
Show resolved
Hide resolved
doc/memos/rdm-draft-alamos-lanzieri-runtime-configuration-architecture.md
Outdated
Show resolved
Hide resolved
doc/memos/rdm-draft-alamos-lanzieri-runtime-configuration-architecture.md
Outdated
Show resolved
Hide resolved
doc/memos/rdm-draft-alamos-lanzieri-runtime-configuration-architecture.md
Outdated
Show resolved
Hide resolved
doc/memos/rdm-draft-alamos-lanzieri-runtime-configuration-architecture.md
Outdated
Show resolved
Hide resolved
doc/memos/rdm-draft-alamos-lanzieri-runtime-configuration-architecture.md
Outdated
Show resolved
Hide resolved
doc/memos/rdm-draft-alamos-lanzieri-runtime-configuration-architecture.md
Outdated
Show resolved
Hide resolved
doc/memos/rdm-draft-alamos-lanzieri-runtime-configuration-architecture.md
Outdated
Show resolved
Hide resolved
doc/memos/rdm-draft-alamos-lanzieri-runtime-configuration-architecture.md
Outdated
Show resolved
Hide resolved
doc/memos/rdm-draft-alamos-lanzieri-runtime-configuration-architecture.md
Show resolved
Hide resolved
doc/memos/rdm-draft-alamos-lanzieri-runtime-configuration-architecture.md
Outdated
Show resolved
Hide resolved
doc/memos/rdm-draft-alamos-lanzieri-runtime-configuration-architecture.md
Outdated
Show resolved
Hide resolved
doc/memos/rdm-draft-alamos-lanzieri-runtime-configuration-architecture.md
Outdated
Show resolved
Hide resolved
doc/memos/rdm-draft-alamos-lanzieri-runtime-configuration-architecture.md
Outdated
Show resolved
Hide resolved
Can we at least move this discussion to an issue or add a PR to the RDM-0? |
I've raised an issue, aiming to address style and review standards of documentation across the board: #10778 |
After discussion offline, here's some clarification of the process of these, from RDM0
This means that an implementation PR can, and may often be, merged before a design RDM PR. There seems to me to be some ambiguity around what a minor revision consists of, compared to when an RDM should be deprecated, which I've attempted to address here: #10798. |
I would say it's nice to have an RDM before an implementation, because it helps gathering consensus and explaining design decisions.
IMO RDMs should focus more in "clarity" (help other developers understand what the motivations are, provide useful resources, explain why it's designed that way, etc) rather than "quality" (strict definitions, sharp scope, strict rules, etc). While I agree it's always better to have a perfect document, in practice there will be an overhead that doesn't necessarily reflect in a better implementation. E.g in this document we are trying to explain why we think the architecture is suitable for RIOT and why we plan to integrate the RIOT Registry into RIOT. It might (or maybe not) be a good approach for Runtime Configuration System and that's why I think these kind of discussions should also be addressed here (so if this gets rejected, implementers don't waste time writing code that will never get merged) Because of this, I would personally prefer to focus more on design issues with this document and evident problems (typos, design not clear enough, etc). After #10798 gets resolved we can add a new revision to this document (or deprecate). |
#10798 has three ACKs, but I'll leave it open until tomorrow morning in case you want to make amendments. After it's merged, I'll review this PR following the guidelines contained in it. |
I just merged it ;) |
Ok, cool, thanks for that :) |
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.
Some detail ... plus some editorial style: It would be IMO helpful to introduce figure captions with numbering and refer to the figures from the text.
- A UART shell with special commands for interacting with configurations (CLI) | ||
|
||
A Configuration Manager may interact with the RIOT Registry to access Runtime | ||
Configurations. |
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.
Is this really a "MAY" here? According to the first architecture graph, the Configuration Manager accesses the RIOT Registry.
It would be IMO helpful to clarify
- which is the interface or surface the Configuration Manager sees and interacts with
- which (southbound) API(s) does it need to implement towards RIOT
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.
Is this really a "MAY" here? According to the first architecture graph, the Configuration Manager accesses the RIOT Registry.
You are right, the Configuration Managers should only access the parameters via the Registry.
It would be IMO helpful to clarify
- which is the interface or surface the Configuration Manager sees and interacts with
- which (southbound) API(s) does it need to implement towards RIOT
Each implemented Configuration Manager will interact directly with the RIOT Registry API.
Regarding the API of the Configuration Managers towards RIOT, I'm not sure if we extract a common interface it at the moment, as all of them are really different (IMO Configuration Managers could even require an RDM on their own). We can though define some responsibilities they have (e.g. access control mechanisms, enable/disable of interfaces). Maybe that can be rephrased in the document.
IMO the state of this document is quite advanced. |
From the described architecture, implemented and working (though further testing is still needed):
Yes, the implementations of the modules follow the design described in the RDM.
Will add |
So let's concentrate on the implementation for the moment and let this memo rest in the meantime. If the solution stabilizes, we should see the RDM merge. |
After reading the code a bit I found that the name "registry handler" wasn't that intuitive. "Storage facility" clearly indicates what it means, but since "registry" is the whole thing being implemented, "registry handler" is a bit too generic. Something like just "config group" would be clearer imo. What do you think? |
@leandrolanzieri @jia200x are the formal issues of @danpetry addressed? Then I guess we should resolve the blocking comment. |
@tcschmidt, We had some offline discussions with @leandrolanzieri, @jia200x that may lead to some changes (simplifications, I believe). |
Maybe summarize the outcome briefly here so that others can follow the state of development? |
The general idea was to:
The concrete changes are:
Also:
I just had another idea: what if we remove |
To expand a little more on why a table: by having a table of |
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. If you want me to ignore this issue, please mark it with the "State: don't stale" label. Thank you for your contributions. |
Contribution description
This PR is meant to explain the current efforts and ideas on how to implement a runtime configuration system, and to discuss about the proposed architecture. This is one of the concerns of the Configuration Task Force.
If needed, further RDMs can be drafted to explain in detail the different parts of the system (RIOT Registry, storage facilities, configuration manager and interfaces).
You can see the output of the draft here