[
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 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.
--
This message was sent by Atlassian Jira
(v8.20.7#820007)