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 <[email protected]>
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());
}