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());
     }

Reply via email to