[ 
https://issues.apache.org/jira/browse/IGNITE-15047?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Ivan Bessonov updated IGNITE-15047:
-----------------------------------
    Description: 
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.

  was:
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

 


> 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
>            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)

Reply via email to