This is an automated email from the ASF dual-hosted git repository. apkhmv pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push: new 14eecd4953 IGNITE-21088 Fix node restart with json config (#3376) 14eecd4953 is described below commit 14eecd4953da9a19d3e9170e9bfcf64d526b8e1d Author: Vadim Pakhnushev <8614891+valep...@users.noreply.github.com> AuthorDate: Thu Mar 14 17:50:52 2024 +0300 IGNITE-21088 Fix node restart with json config (#3376) --- .../storage/LocalFileConfigurationStorage.java | 4 ++- .../storage/LocalFileConfigurationStorageTest.java | 34 ++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/modules/runner/src/main/java/org/apache/ignite/internal/configuration/storage/LocalFileConfigurationStorage.java b/modules/runner/src/main/java/org/apache/ignite/internal/configuration/storage/LocalFileConfigurationStorage.java index f021322c04..dbf0c61eaf 100644 --- a/modules/runner/src/main/java/org/apache/ignite/internal/configuration/storage/LocalFileConfigurationStorage.java +++ b/modules/runner/src/main/java/org/apache/ignite/internal/configuration/storage/LocalFileConfigurationStorage.java @@ -30,6 +30,7 @@ import com.typesafe.config.ConfigFactory; import com.typesafe.config.ConfigObject; import com.typesafe.config.ConfigParseOptions; import com.typesafe.config.ConfigRenderOptions; +import com.typesafe.config.ConfigSyntax; import com.typesafe.config.ConfigValue; import com.typesafe.config.impl.ConfigImpl; import java.io.IOException; @@ -153,7 +154,8 @@ public class LocalFileConfigurationStorage implements ConfigurationStorage { checkAndRestoreConfigFile(); try { - return ConfigFactory.parseFile(configPath.toFile(), ConfigParseOptions.defaults().setAllowMissing(false)); + ConfigParseOptions parseOptions = ConfigParseOptions.defaults().setSyntax(ConfigSyntax.CONF).setAllowMissing(false); + return ConfigFactory.parseFile(configPath.toFile(), parseOptions); } catch (ConfigException.Parse e) { throw new NodeConfigParseException("Failed to parse config content from file " + configPath, e); } diff --git a/modules/runner/src/test/java/org/apache/ignite/internal/configuration/storage/LocalFileConfigurationStorageTest.java b/modules/runner/src/test/java/org/apache/ignite/internal/configuration/storage/LocalFileConfigurationStorageTest.java index a529eacda8..aca7fa140a 100644 --- a/modules/runner/src/test/java/org/apache/ignite/internal/configuration/storage/LocalFileConfigurationStorageTest.java +++ b/modules/runner/src/test/java/org/apache/ignite/internal/configuration/storage/LocalFileConfigurationStorageTest.java @@ -27,7 +27,11 @@ import static org.hamcrest.Matchers.equalToCompressingWhiteSpace; import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.hasValue; import static org.hamcrest.Matchers.is; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import com.typesafe.config.ConfigFactory; +import com.typesafe.config.ConfigParseOptions; +import com.typesafe.config.ConfigSyntax; import java.io.IOException; import java.io.Serializable; import java.nio.charset.StandardCharsets; @@ -507,6 +511,36 @@ public class LocalFileConfigurationStorageTest { assertThat(storage.readDataOnRecovery().get().values(), aMapWithSize(1)); } + /** File content is parsed using HOCON format regardless of the file extension. */ + @Test + void hoconContentInJsonFile() throws IOException { + // Given config in JSON format + String fileContent + = "{\n" + + " \"top\" : {\n" + + " \"namedList\" : [\n" + + " {\n" + + " \"intVal\" : -1,\n" + + " \"name\" : \"name1\"\n" + + " }\n" + + " ]\n" + + " }\n" + + "}\n"; + + Path configFile = tmpDir.resolve("ignite-config.json"); + + Files.write(configFile, fileContent.getBytes(StandardCharsets.UTF_8)); + + // Then check that the JSON is valid + ConfigParseOptions parseOptions = ConfigParseOptions.defaults().setSyntax(ConfigSyntax.JSON).setAllowMissing(false); + assertDoesNotThrow(() -> ConfigFactory.parseFile(configFile.toFile(), parseOptions)); + + LocalFileConfigurationStorage storage = new LocalFileConfigurationStorage(configFile, treeGenerator); + + // And storage reads the file successfully + assertDoesNotThrow(storage::readDataOnRecovery); + } + private String configFileContent() throws IOException { return Files.readString(getConfigFile()); }