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

Kirill Tkalenko updated IGNITE-17148:
-------------------------------------
    Description: 
*NOTE*

Description may not be complete.

*Problem*
We need the ability to create a basic configuration schema so that we can 
define a common configuration schema and inherit from it with additional 
configuration added.

Let's look at an example:

We need to create two configuration schemes for the Memory based storage 
engine, they should have a common property "page size in bytes" and then they 
should be different, let's sketch an example scheme.
{code:java}
public class BasePageMemoryStorageEngineConfigurationSchema {
    @Value(hasDefault = true)
    public int pageSize = 16 * 1024;
}

public class VolatilePageMemoryStorageEngineConfigurationSchema extends 
BasePageMemoryStorageEngineConfigurationSchema{
    @ConfigValue
    public VolatilePageMemoryDataRegionConfigurationSchema defaultRegion;

    @NamedConfigValue
    public VolatilePageMemoryDataRegionConfigurationSchema regions;
}

public class PersistentPageMemoryStorageEngineConfigurationSchema extends 
BasePageMemoryStorageEngineConfigurationSchema{
    @ConfigValue
    public PersistentPageMemoryDataRegionConfigurationSchema defaultRegion;

    @NamedConfigValue
    public PersistentPageMemoryDataRegionConfigurationSchema regions;

    @ConfigValue
    public PageMemoryCheckpointConfigurationSchema checkpoint;
}{code}
How can we implement this at the moment:
 * internal extension of the configuration: then the user will not be able to 
see and change it - not suitable;
 * polymorphic configuration:
 ** by design, we cannot create root config schemas for polymorphic config or 
instances;
 ** by design, we can change the type of polymorphic configuration to any 
instance, we do not fix its type, which does not suit us;
 ** by design, we cannot expose a polymorphic instance as a configuration 
schema property;
 ** hocon will display the type of polymorphic configuration, which is not 
necessary in this case and will look a little strange.

 

  was:
*NOTE*

Description may not be complete.

*Problem*
We need the ability to create a basic configuration schema so that we can 
define a common configuration schema and inherit from it with additional 
configuration added.

Let's look at an example:

We need to create two configuration schemes for the Memory based storage 
engine, they should have a common property "page size in bytes" and then they 
should be different, let's sketch an example scheme.
{code:java}
public class BasePageMemoryStorageEngineConfigurationSchema {
    @Value(hasDefault = true)
    public int pageSize = 16 * 1024;
}

public class VolatilePageMemoryStorageEngineConfigurationSchema extends 
BasePageMemoryStorageEngineConfigurationSchema{
    @ConfigValue
    public VolatilePageMemoryDataRegionConfigurationSchema defaultRegion;

    @NamedConfigValue
    public VolatilePageMemoryDataRegionConfigurationSchema regions;
}

public class PersistentPageMemoryStorageEngineConfigurationSchema extends 
BasePageMemoryStorageEngineConfigurationSchema{
    @ConfigValue
    public PersistentPageMemoryDataRegionConfigurationSchema defaultRegion;

    @NamedConfigValue
    public PersistentPageMemoryDataRegionConfigurationSchema regions;

    @ConfigValue
    public PageMemoryCheckpointConfigurationSchema checkpoint;
}{code}
How can we implement this at the moment:
 * internal extension of the configuration: then the user will not be able to 
see and change it - not suitable;
 * polymorphic configuration:
 ** by design, we cannot create root config schemas for polymorphic config or 
instances;
 ** by design, we can change the type of polymorphic configuration to any 
instance, we do not fix its type, which does not suit us;

 * 
 ** by design, we cannot expose a polymorphic instance as a configuration 
schema property;
 ** hocon will display the type of polymorphic configuration, which is not 
necessary in this case and will look a little strange.

 


> Support for abstract configuration
> ----------------------------------
>
>                 Key: IGNITE-17148
>                 URL: https://issues.apache.org/jira/browse/IGNITE-17148
>             Project: Ignite
>          Issue Type: Task
>            Reporter: Kirill Tkalenko
>            Assignee: Kirill Tkalenko
>            Priority: Major
>              Labels: iep-55, ignite-3
>             Fix For: 3.0.0-alpha6
>
>
> *NOTE*
> Description may not be complete.
> *Problem*
> We need the ability to create a basic configuration schema so that we can 
> define a common configuration schema and inherit from it with additional 
> configuration added.
> Let's look at an example:
> We need to create two configuration schemes for the Memory based storage 
> engine, they should have a common property "page size in bytes" and then they 
> should be different, let's sketch an example scheme.
> {code:java}
> public class BasePageMemoryStorageEngineConfigurationSchema {
>     @Value(hasDefault = true)
>     public int pageSize = 16 * 1024;
> }
> public class VolatilePageMemoryStorageEngineConfigurationSchema extends 
> BasePageMemoryStorageEngineConfigurationSchema{
>     @ConfigValue
>     public VolatilePageMemoryDataRegionConfigurationSchema defaultRegion;
>     @NamedConfigValue
>     public VolatilePageMemoryDataRegionConfigurationSchema regions;
> }
> public class PersistentPageMemoryStorageEngineConfigurationSchema extends 
> BasePageMemoryStorageEngineConfigurationSchema{
>     @ConfigValue
>     public PersistentPageMemoryDataRegionConfigurationSchema defaultRegion;
>     @NamedConfigValue
>     public PersistentPageMemoryDataRegionConfigurationSchema regions;
>     @ConfigValue
>     public PageMemoryCheckpointConfigurationSchema checkpoint;
> }{code}
> How can we implement this at the moment:
>  * internal extension of the configuration: then the user will not be able to 
> see and change it - not suitable;
>  * polymorphic configuration:
>  ** by design, we cannot create root config schemas for polymorphic config or 
> instances;
>  ** by design, we can change the type of polymorphic configuration to any 
> instance, we do not fix its type, which does not suit us;
>  ** by design, we cannot expose a polymorphic instance as a configuration 
> schema property;
>  ** hocon will display the type of polymorphic configuration, which is not 
> necessary in this case and will look a little strange.
>  



--
This message was sent by Atlassian Jira
(v8.20.7#820007)

Reply via email to