[jira] [Updated] (IGNITE-17148) Support for abstract configuration

2022-06-20 Thread Kirill Tkalenko (Jira)


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

Kirill Tkalenko updated IGNITE-17148:
-
Reviewer: Aleksandr Polovtcev

> 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
>
>  Time Spent: 10.5h
>  Remaining Estimate: 0h
>
> *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 PageMemory 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;
> }
> @ConfigurationRoot(rootName = "in-memory-page-memory", type = DISTRIBUTED) 
> public class VolatilePageMemoryStorageEngineConfigurationSchema extends 
> BasePageMemoryStorageEngineConfigurationSchema{
> @ConfigValue
> public VolatilePageMemoryDataRegionConfigurationSchema defaultRegion;
> @NamedConfigValue
> public VolatilePageMemoryDataRegionConfigurationSchema regions;
> }
> @ConfigurationRoot(rootName = "persistent-page-memory", type = DISTRIBUTED)
> 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.
> The possible options do not suit us, so I propose to add another solution.
> *Proposal*
> Add an abstract configuration schema from which we can inherit, add 
> properties, but only its heirs could be used as properties of other 
> configurations schemas or configuration roots. Unlike a polymorphic 
> configuration, it will not store and display the type in hocon, and the type 
> cannot be changed. 
> The abstract configuration schema from which will be inherited will contain 
> the annotation {*}@AbstractConfiguration{*}, and any successor must extend it 
> and contain *@Config* or {*}@ConfigurationRoot{*}, consider examples:
> {code:java}
> @AbstractConfiguration
> public class BasePageMemoryStorageEngineConfigurationSchema {
> @Value(hasDefault = true)
> public int pageSize = 16 * 1024;
> }
> @ConfigurationRoot(rootName = "in-memory-page-memory", type = DISTRIBUTED) 
> public class VolatilePageMemoryStorageEngineConfigurationSchema extends 
> BasePageMemoryStorageEngineConfigurationSchema{
> @ConfigValue
> public VolatilePageMemoryDataRegionConfigurationSchema defaultRegion;
> @NamedConfigValue
> public VolatilePageMemoryDataRegionConfigurationSchema regions;
> }
> @Config
> public class PersistentPageMemoryStorageEngineConfigurationSchema extends 
> BasePageMemoryStorageEngineConfigurationSchema{
> @ConfigValue
> public PersistentPageMemoryDataRegionConfigurationSchema defaultRegion;
> @NamedConfigValue
> public PersistentPageMemoryDataRegionConfigurationSchema regions;
> @ConfigValue
> public PageMemoryCheckpointConfigurationSchema checkpoint;
> }{code}
> *Implementation notes*
> # Add annotation 
> *org.apache.ignite.configuration.annotation.AbstractConfiguration*;
> # Add processing to 
> *org.apache.ignite.internal.configuration.processor.Processor*;
> # Add processing to 
> *org.apache.ignite.internal.configuration.asm.ConfigurationAsmGenerator*;
> # Cover with tests.
> *Further development*
>  * Consider the possibility and necessity of crossing with the annotation 
> *InternalConfiguration* and 

[jira] [Updated] (IGNITE-17148) Support for abstract configuration

2022-06-14 Thread Kirill Tkalenko (Jira)


 [ 
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 PageMemory 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;
}

@ConfigurationRoot(rootName = "in-memory-page-memory", type = DISTRIBUTED) 
public class VolatilePageMemoryStorageEngineConfigurationSchema extends 
BasePageMemoryStorageEngineConfigurationSchema{
@ConfigValue
public VolatilePageMemoryDataRegionConfigurationSchema defaultRegion;

@NamedConfigValue
public VolatilePageMemoryDataRegionConfigurationSchema regions;
}

@ConfigurationRoot(rootName = "persistent-page-memory", type = DISTRIBUTED)
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.

The possible options do not suit us, so I propose to add another solution.

*Proposal*

Add an abstract configuration schema from which we can inherit, add properties, 
but only its heirs could be used as properties of other configurations schemas 
or configuration roots. Unlike a polymorphic configuration, it will not store 
and display the type in hocon, and the type cannot be changed. 
The abstract configuration schema from which will be inherited will contain the 
annotation {*}@AbstractConfiguration{*}, and any successor must extend it and 
contain *@Config* or {*}@ConfigurationRoot{*}, consider examples:
{code:java}
@AbstractConfiguration
public class BasePageMemoryStorageEngineConfigurationSchema {
@Value(hasDefault = true)
public int pageSize = 16 * 1024;
}

@ConfigurationRoot(rootName = "in-memory-page-memory", type = DISTRIBUTED) 
public class VolatilePageMemoryStorageEngineConfigurationSchema extends 
BasePageMemoryStorageEngineConfigurationSchema{
@ConfigValue
public VolatilePageMemoryDataRegionConfigurationSchema defaultRegion;

@NamedConfigValue
public VolatilePageMemoryDataRegionConfigurationSchema regions;
}

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

@NamedConfigValue
public PersistentPageMemoryDataRegionConfigurationSchema regions;

@ConfigValue
public PageMemoryCheckpointConfigurationSchema checkpoint;
}{code}

*Implementation notes*
# Add annotation 
*org.apache.ignite.configuration.annotation.AbstractConfiguration*;
# Add processing to 
*org.apache.ignite.internal.configuration.processor.Processor*;
# Add processing to 
*org.apache.ignite.internal.configuration.asm.ConfigurationAsmGenerator*;
# Cover with tests.

*Further development*
 * Consider the possibility and necessity of crossing with the annotation 
*InternalConfiguration* and *PolymorphicConfig* in a separate ticket, at the 
moment they cannot be used together in the same class (for simplicity).

  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 PageMemory 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 {

[jira] [Updated] (IGNITE-17148) Support for abstract configuration

2022-06-14 Thread Kirill Tkalenko (Jira)


 [ 
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 PageMemory 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;
}

@ConfigurationRoot(rootName = "in-memory-page-memory", type = DISTRIBUTED) 
public class VolatilePageMemoryStorageEngineConfigurationSchema extends 
BasePageMemoryStorageEngineConfigurationSchema{
@ConfigValue
public VolatilePageMemoryDataRegionConfigurationSchema defaultRegion;

@NamedConfigValue
public VolatilePageMemoryDataRegionConfigurationSchema regions;
}

@ConfigurationRoot(rootName = "persistent-page-memory", type = DISTRIBUTED)
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.

The possible options do not suit us, so I propose to add another solution.

*Proposal*

Add an abstract configuration schema from which we can inherit, add properties, 
but only its heirs could be used as properties of other configurations schemas 
or configuration roots. Unlike a polymorphic configuration, it will not store 
and display the type in hocon, and the type cannot be changed. 
The abstract configuration schema from which will be inherited will contain the 
annotation {*}@AbstractConfiguration{*}, and any successor must extend it and 
contain *@Config* or {*}@ConfigurationRoot{*}, consider examples:
{code:java}
@AbstractConfiguration
public class BasePageMemoryStorageEngineConfigurationSchema {
@Value(hasDefault = true)
public int pageSize = 16 * 1024;
}

@ConfigurationRoot(rootName = "in-memory-page-memory", type = DISTRIBUTED) 
public class VolatilePageMemoryStorageEngineConfigurationSchema extends 
BasePageMemoryStorageEngineConfigurationSchema{
@ConfigValue
public VolatilePageMemoryDataRegionConfigurationSchema defaultRegion;

@NamedConfigValue
public VolatilePageMemoryDataRegionConfigurationSchema regions;
}

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

@NamedConfigValue
public PersistentPageMemoryDataRegionConfigurationSchema regions;

@ConfigValue
public PageMemoryCheckpointConfigurationSchema checkpoint;
}{code}

*Implementation notes
# Add annotation 
*org.apache.ignite.configuration.annotation.AbstractConfiguration*;
# Add processing to 
*org.apache.ignite.internal.configuration.processor.Processor*;
# Add processing to 
*org.apache.ignite.internal.configuration.asm.ConfigurationAsmGenerator*;
# Cover with tests.

*Further development*
 * Consider the possibility and necessity of crossing with the annotation 
*InternalConfiguration* and *PolymorphicConfig* in a separate ticket, at the 
moment they cannot be used together in the same class (for simplicity).

  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 PageMemory 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 {

[jira] [Updated] (IGNITE-17148) Support for abstract configuration

2022-06-09 Thread Kirill Tkalenko (Jira)


 [ 
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 PageMemory 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;
}

@ConfigurationRoot(rootName = "in-memory-page-memory", type = DISTRIBUTED) 
public class VolatilePageMemoryStorageEngineConfigurationSchema extends 
BasePageMemoryStorageEngineConfigurationSchema{
@ConfigValue
public VolatilePageMemoryDataRegionConfigurationSchema defaultRegion;

@NamedConfigValue
public VolatilePageMemoryDataRegionConfigurationSchema regions;
}

@ConfigurationRoot(rootName = "persistent-page-memory", type = DISTRIBUTED)
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.

The possible options do not suit us, so I propose to add another solution.

*Proposal*

Add an abstract configuration schema from which we can inherit, add properties, 
but only its heirs could be used as properties of other configurations schemas 
or configuration roots. Unlike a polymorphic configuration, it will not store 
and display the type in hocon, and the type cannot be changed. 
The abstract configuration schema from which will be inherited will contain the 
annotation {*}@AbstractConfiguration{*}, and any successor must extend it and 
contain *@Config* or {*}@ConfigurationRoot{*}, consider examples:
{code:java}
@AbstractConfiguration
public class BasePageMemoryStorageEngineConfigurationSchema {
@Value(hasDefault = true)
public int pageSize = 16 * 1024;
}

@ConfigurationRoot(rootName = "in-memory-page-memory", type = DISTRIBUTED) 
public class VolatilePageMemoryStorageEngineConfigurationSchema extends 
BasePageMemoryStorageEngineConfigurationSchema{
@ConfigValue
public VolatilePageMemoryDataRegionConfigurationSchema defaultRegion;

@NamedConfigValue
public VolatilePageMemoryDataRegionConfigurationSchema regions;
}

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

@NamedConfigValue
public PersistentPageMemoryDataRegionConfigurationSchema regions;

@ConfigValue
public PageMemoryCheckpointConfigurationSchema checkpoint;
}{code}
*Further development*
 * Merge with internal configuration extension;
 * Consider joining with a polymorphic configuration.

 

 

  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 PageMemory 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;
}

@ConfigurationRoot(rootName = "in-memory-page-memory", type = DISTRIBUTED) 
public class VolatilePageMemoryStorageEngineConfigurationSchema extends 
BasePageMemoryStorageEngineConfigurationSchema{
@ConfigValue
public VolatilePageMemoryDataRegionConfigurationSchema defaultRegion;

@NamedConfigValue
public 

[jira] [Updated] (IGNITE-17148) Support for abstract configuration

2022-06-09 Thread Kirill Tkalenko (Jira)


 [ 
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 PageMemory 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;
}

@ConfigurationRoot(rootName = "in-memory-page-memory", type = DISTRIBUTED) 
public class VolatilePageMemoryStorageEngineConfigurationSchema extends 
BasePageMemoryStorageEngineConfigurationSchema{
@ConfigValue
public VolatilePageMemoryDataRegionConfigurationSchema defaultRegion;

@NamedConfigValue
public VolatilePageMemoryDataRegionConfigurationSchema regions;
}

@ConfigurationRoot(rootName = "persistent-page-memory", type = DISTRIBUTED)
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.

The possible options do not suit us, so I propose to add another solution.

*Proposal*

Add an abstract configuration schema from which we can inherit, add properties, 
but only its heirs could be used as properties of other configurations schemas 
or configuration roots. Unlike a polymorphic configuration, it will not store 
and display the type in hocon, and the type cannot be changed. 
The abstract configuration schema from which will be inherited will contain the 
annotation {*}@AbstractConfiguration{*}, and any successor must extend it and 
contain *@Config* or {*}@ConfigurationRoot{*}, consider examples:
{code:java}
@AbstractConfiguration
public class BasePageMemoryStorageEngineConfigurationSchema {
@Value(hasDefault = true)
public int pageSize = 16 * 1024;
}

@ConfigurationRoot(rootName = "in-memory-page-memory", type = DISTRIBUTED) 
public class VolatilePageMemoryStorageEngineConfigurationSchema extends 
BasePageMemoryStorageEngineConfigurationSchema{
@ConfigValue
public VolatilePageMemoryDataRegionConfigurationSchema defaultRegion;

@NamedConfigValue
public VolatilePageMemoryDataRegionConfigurationSchema regions;
}

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

@NamedConfigValue
public PersistentPageMemoryDataRegionConfigurationSchema regions;

@ConfigValue
public PageMemoryCheckpointConfigurationSchema checkpoint;
}{code}
*Further development*
 * Merge with internal configuration extension;
 * Consider joining with a polymorphic configuration.

  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 PageMemory 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;
}

@ConfigurationRoot(rootName = "in-memory-page-memory", type = DISTRIBUTED) 
public class VolatilePageMemoryStorageEngineConfigurationSchema extends 
BasePageMemoryStorageEngineConfigurationSchema{
@ConfigValue
public VolatilePageMemoryDataRegionConfigurationSchema defaultRegion;

@NamedConfigValue
public VolatilePageMemoryDataRegionConfigurationSchema 

[jira] [Updated] (IGNITE-17148) Support for abstract configuration

2022-06-09 Thread Kirill Tkalenko (Jira)


 [ 
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 PageMemory 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;
}

@ConfigurationRoot(rootName = "in-memory-page-memory", type = DISTRIBUTED) 
public class VolatilePageMemoryStorageEngineConfigurationSchema extends 
BasePageMemoryStorageEngineConfigurationSchema{
@ConfigValue
public VolatilePageMemoryDataRegionConfigurationSchema defaultRegion;

@NamedConfigValue
public VolatilePageMemoryDataRegionConfigurationSchema regions;
}

@ConfigurationRoot(rootName = "persistent-page-memory", type = DISTRIBUTED)
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.

The possible options do not suit us, so I propose to add another solution.

*Proposal*

Add an abstract configuration schema from which we can inherit, add properties, 
but only its heirs could be used as properties of other configurations schemas 
or configuration roots. Unlike a polymorphic configuration, it will not store 
and display the type in hocon, and the type cannot be changed. 
The abstract configuration schema from which will be inherited will contain the 
annotation {*}@AbstractConfiguration{*}, and any successor must extend it and 
contain *@Config* or {*}@ConfigurationRoot{*}, consider examples:
{code:java}
@AbstractConfiguration
public class BasePageMemoryStorageEngineConfigurationSchema {
@Value(hasDefault = true)
public int pageSize = 16 * 1024;
}

@ConfigurationRoot(rootName = "in-memory-page-memory", type = DISTRIBUTED) 
public class VolatilePageMemoryStorageEngineConfigurationSchema extends 
BasePageMemoryStorageEngineConfigurationSchema{
@ConfigValue
public VolatilePageMemoryDataRegionConfigurationSchema defaultRegion;

@NamedConfigValue
public VolatilePageMemoryDataRegionConfigurationSchema regions;
}

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

@NamedConfigValue
public PersistentPageMemoryDataRegionConfigurationSchema regions;

@ConfigValue
public PageMemoryCheckpointConfigurationSchema checkpoint;
}{code}
 
 

  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 PageMemory 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;
}

@ConfigurationRoot(rootName = "in-memory-page-memory", type = DISTRIBUTED) 
public class VolatilePageMemoryStorageEngineConfigurationSchema extends 
BasePageMemoryStorageEngineConfigurationSchema{
@ConfigValue
public VolatilePageMemoryDataRegionConfigurationSchema defaultRegion;

@NamedConfigValue
public VolatilePageMemoryDataRegionConfigurationSchema regions;
}

@ConfigurationRoot(rootName = "persistent-page-memory", type = DISTRIBUTED)  \
public class 

[jira] [Updated] (IGNITE-17148) Support for abstract configuration

2022-06-09 Thread Kirill Tkalenko (Jira)


 [ 
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 PageMemory 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;
}

@ConfigurationRoot(rootName = "in-memory-page-memory", type = DISTRIBUTED) 
public class VolatilePageMemoryStorageEngineConfigurationSchema extends 
BasePageMemoryStorageEngineConfigurationSchema{
@ConfigValue
public VolatilePageMemoryDataRegionConfigurationSchema defaultRegion;

@NamedConfigValue
public VolatilePageMemoryDataRegionConfigurationSchema regions;
}

@ConfigurationRoot(rootName = "persistent-page-memory", type = DISTRIBUTED)  \
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 PageMemory 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 

[jira] [Updated] (IGNITE-17148) Support for abstract configuration

2022-06-09 Thread Kirill Tkalenko (Jira)


 [ 
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 PageMemory 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 PageMemory based storage 
> engine, they should have a common property "page size in bytes" and then they 
> should be different, let's sketch an 

[jira] [Updated] (IGNITE-17148) Support for abstract configuration

2022-06-09 Thread Kirill Tkalenko (Jira)


 [ 
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 

[jira] [Updated] (IGNITE-17148) Support for abstract configuration

2022-06-09 Thread Kirill Tkalenko (Jira)


 [ 
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 

[jira] [Updated] (IGNITE-17148) Support for abstract configuration

2022-06-09 Thread Kirill Tkalenko (Jira)


 [ 
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|https://issues.apache.org/jira/browse/IGNITE-15047]: then the 
user will not be able to see and change it - not suitable;
 * [polymorphic 
configuration|https://issues.apache.org/jira/browse/IGNITE-14645]:

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