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