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

Aleksandr Polovtsev updated IGNITE-27772:
-----------------------------------------
    Ignite Flags:   (was: Docs Required,Release Notes Required)

> Configuration. Cannot load configuration file after adding a field with a 
> default NULL value
> --------------------------------------------------------------------------------------------
>
>                 Key: IGNITE-27772
>                 URL: https://issues.apache.org/jira/browse/IGNITE-27772
>             Project: Ignite
>          Issue Type: Bug
>          Components: configuration ai3
>    Affects Versions: 3.1
>            Reporter: Maksim Zhuravkov
>            Priority: Major
>              Labels: ignite-3
>
> It is not possible to add a configuration field with a null default value, 
> configuration validation fails with an error:
> {noformat}
> org.apache.ignite.configuration.validation.ConfigurationValidationException: 
> Validation did not pass for keys: [ignite.network., 
> 'ignite.network.someStringProperty' configuration value is not initialized.]
> {noformat}
> *Reproducer*
> Add this code to the NetworkConfigurationSchema.
> {code:java}
>  // NetworkConfigurationSchema   
>     @Value(hasDefault = true)
>     public String someStringProperty = null; 
> {code}
> Add the following test under the runner module.
> {code:java}
> package org.apache.ignite.internal.configuration.compatibility;
> import java.io.IOException;
> import java.nio.charset.StandardCharsets;
> import java.nio.file.Files;
> import java.nio.file.Path;
> import java.nio.file.Paths;
> import java.util.List;
> import org.apache.ignite.configuration.ConfigurationModule;
> import org.apache.ignite.configuration.KeyIgnorer;
> import org.apache.ignite.internal.configuration.ConfigurationManager;
> import org.apache.ignite.internal.configuration.ConfigurationModules;
> import org.apache.ignite.internal.configuration.ConfigurationTreeGenerator;
> import org.apache.ignite.internal.configuration.NodeConfiguration;
> import org.apache.ignite.internal.configuration.ServiceLoaderModulesProvider;
> import 
> org.apache.ignite.internal.configuration.storage.LocalFileConfigurationStorage;
> import 
> org.apache.ignite.internal.configuration.validation.ConfigurationValidator;
> import 
> org.apache.ignite.internal.configuration.validation.ConfigurationValidatorImpl;
> import org.apache.ignite.internal.manager.ComponentContext;
> import org.apache.ignite.internal.testframework.WorkDirectory;
> import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
> import org.junit.jupiter.api.Test;
> import org.junit.jupiter.api.extension.ExtendWith;
> @ExtendWith(WorkDirectoryExtension.class)
> public class ConfigurationTest {
>     @WorkDirectory
>     private Path path;
>     @Test
>     public void test() throws IOException {
>         Path file = path.resolve("file.conf");
>         String configString = "ignite { network: {} \n"
>                 + "} ";
>         
>         Files.writeString(file, configString, StandardCharsets.UTF_8);
>         NodeConfiguration config = 
> loadConfiguration(file.toAbsolutePath().toString());
>         System.err.println(config.value());
>     }
>     private NodeConfiguration loadConfiguration(String pathFile) {
>         ServiceLoaderModulesProvider modulesProvider = new 
> ServiceLoaderModulesProvider();
>         List<ConfigurationModule> moduleList = 
> modulesProvider.modules(getClass().getClassLoader());
>         ConfigurationModules modules =  new ConfigurationModules(moduleList);
>         ConfigurationTreeGenerator localConfigurationGenerator = new 
> ConfigurationTreeGenerator(
>                 modules.local().rootKeys(),
>                 modules.local().schemaExtensions(),
>                 modules.local().polymorphicSchemaExtensions()
>         );
>         LocalFileConfigurationStorage localFileConfigurationStorage = new 
> LocalFileConfigurationStorage(
>                 "WTF",
>                 Paths.get(pathFile),
>                 localConfigurationGenerator,
>                 modules.local()
>         );
>         ConfigurationValidator localConfigurationValidator =
>                 
> ConfigurationValidatorImpl.withDefaultValidators(localConfigurationGenerator, 
> modules.local().validators());
>         ConfigurationManager configurationManager = new ConfigurationManager(
>                 modules.local().rootKeys(),
>                 localFileConfigurationStorage,
>                 localConfigurationGenerator,
>                 localConfigurationValidator,
>                 modules.local()::migrateDeprecatedConfigurations,
>                 
> KeyIgnorer.fromDeletedPrefixes(modules.local().deletedPrefixes())
>         );
>         try {
>             configurationManager.startAsync(new ComponentContext()).get();
>         } catch (Exception e) {
>             throw new RuntimeException(e);
>         }
>         return 
> configurationManager.configurationRegistry().getConfiguration(NodeConfiguration.KEY);
>     }
> }
> {code}
> h2. Definition of Done
> # Values with default values equal to {{null}} should be validated to fail, 
> possibly on the annotation processing level;
> # {{@Value}} annotation's javadoc is updated to reflect the new changes.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to