[
https://issues.apache.org/jira/browse/IGNITE-15047?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17400176#comment-17400176
]
Ivan Bessonov commented on IGNITE-15047:
----------------------------------------
EDIT: we should probably add @InternalRoot annotation as well
> Support internal/private properties in configuration framework
> --------------------------------------------------------------
>
> Key: IGNITE-15047
> URL: https://issues.apache.org/jira/browse/IGNITE-15047
> Project: Ignite
> Issue Type: Task
> Reporter: Ivan Bessonov
> Assignee: Kirill Tkalenko
> Priority: Major
> Labels: iep-55, ignite-3
>
> In order to provide consistent update of configuration and metastorage
> metadata we should have configuration values that are hidden form the user.
> Requirements are:
> * these configuration values should be available from internal code only
> * they should not be accessible in JSON or any other configuration view
> representation
> * they can't be updated via CLI's HOCON update requests or any other public
> API calls
> One possible solution is to have configuration schema extensions, registered
> in "internal" modules - they'll lead to generation of extended VIEW and
> CHANGE interfaces. All extra fields from these schemas will be marked as
> internal by configuration framework, technically it is possible.
> h3. API notes
> I think it would be convenient to have explicit internal configuration
> extensions like these:
> {code:java}
> @InternalConfigurationExtension
> public class ExtendedConfigurationSchema extends PublicConfigurationSchema {
> // fields
> }{code}
> There has to be some "extension descriptor", like a "RootKey", that should
> be passed into configuration manager constructor (or registered in it by some
> other means before component's start). It should have at least the
> information about the schema that it extends.
> Following restriction has to be applied:
> * There cannot be multiple extensions for the same schema. It is possible to
> avoid this restriction but it would lead to unnecessary complications (like
> in polymorphic schemas, that would probably complicate such approach even
> more: IGNITE-14645).
> There's also no point in having extension in the same module. Maybe we should
> validate this fact.
> Every {{FooConfiguration}} object must in fact be an instance of
> {{InternalFooConfiguration}} as well. Same applies to {{*View}} and
> {{*Change}} interfaces. There's no way that it's possible to design API where
> its user won't have to perform explicit type casts, so this solution looks
> fine.
> h3. Implementation notes
> First of all, annotation processor will be expanded. I suppose that
> {{@InternalConfigurationExtension}} will be the only addition to public
> configuration-api module, everything else will be hidden in implementation
> packages.
> Traversal / construction API will be expanded as well. I guess that adding a
> {{internal}} flag to a bunch of method will be enough. Having two sets of
> methods for {{all}} and {{public}} would just be too much.
> After these methods are changed, {{ConfigurationAsmGenerator}} and a lot of
> their usages will have to be fixed. I suspect that most changes will be here
> and in tests.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)