You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ta...@apache.org on 2024/04/03 10:18:42 UTC

(iotdb) branch master updated: Use UTF-8 to load and store properties file (#12291)

This is an automated email from the ASF dual-hosted git repository.

tanxinyu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 5394aa47fa9 Use UTF-8 to load and store properties file (#12291)
5394aa47fa9 is described below

commit 5394aa47fa9fc5deb5f707bf0787b4262052e062
Author: Li Yu Heng <li...@126.com>
AuthorDate: Wed Apr 3 18:18:37 2024 +0800

    Use UTF-8 to load and store properties file (#12291)
---
 .../iotdb/it/env/cluster/config/MppBaseConfig.java      |  4 +++-
 .../iotdb/confignode/conf/ConfigNodeDescriptor.java     |  6 ++++--
 .../iotdb/confignode/conf/ConfigNodeRemoveCheck.java    |  4 +++-
 .../iotdb/confignode/conf/SystemPropertiesUtils.java    |  7 +++++--
 .../java/org/apache/iotdb/db/conf/IoTDBDescriptor.java  | 10 ++++++----
 .../java/org/apache/iotdb/db/conf/IoTDBStartCheck.java  | 17 ++++++++++++-----
 .../iotdb/db/conf/rest/IoTDBRestServiceDescriptor.java  |  4 +++-
 .../apache/iotdb/db/protocol/client/ConfigNodeInfo.java |  9 ++++++---
 .../org/apache/iotdb/commons/conf/IoTDBConstant.java    |  8 +++++++-
 .../iotdb/tsfile/common/conf/TSFileDescriptor.java      |  4 +++-
 10 files changed, 52 insertions(+), 21 deletions(-)

diff --git a/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/config/MppBaseConfig.java b/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/config/MppBaseConfig.java
index 035c5371cc9..04e5dae8872 100644
--- a/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/config/MppBaseConfig.java
+++ b/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/config/MppBaseConfig.java
@@ -25,6 +25,8 @@ import javax.validation.constraints.NotNull;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.util.Properties;
@@ -84,7 +86,7 @@ public abstract class MppBaseConfig {
       return;
     }
     try (InputStream confInput = Files.newInputStream(Paths.get(filePath))) {
-      properties.load(confInput);
+      properties.load(new InputStreamReader(confInput, StandardCharsets.UTF_8));
     }
   }
 
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeDescriptor.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeDescriptor.java
index e59f8d22343..1bad7b48c5c 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeDescriptor.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeDescriptor.java
@@ -39,9 +39,11 @@ import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.UnknownHostException;
+import java.nio.charset.StandardCharsets;
 import java.util.Collections;
 import java.util.Properties;
 
@@ -105,7 +107,7 @@ public class ConfigNodeDescriptor {
       try (InputStream inputStream = url.openStream()) {
 
         LOGGER.info("Start to read config file {}", url);
-        commonProperties.load(inputStream);
+        commonProperties.load(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
 
       } catch (FileNotFoundException e) {
         LOGGER.error("Fail to find config file {}, reject ConfigNode startup.", url, e);
@@ -128,7 +130,7 @@ public class ConfigNodeDescriptor {
       try (InputStream inputStream = url.openStream()) {
         LOGGER.info("start reading ConfigNode conf file: {}", url);
         Properties properties = new Properties();
-        properties.load(inputStream);
+        properties.load(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
         commonProperties.putAll(properties);
         loadProperties(commonProperties);
       } catch (IOException | BadNodeUrlException e) {
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeRemoveCheck.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeRemoveCheck.java
index 62c94bee1f1..331a2a69542 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeRemoveCheck.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeRemoveCheck.java
@@ -35,6 +35,8 @@ import org.slf4j.LoggerFactory;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
+import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
 import java.util.Comparator;
 import java.util.List;
 import java.util.Properties;
@@ -64,7 +66,7 @@ public class ConfigNodeRemoveCheck {
       return nodeLocation;
     }
     try (FileInputStream inputStream = new FileInputStream(systemPropertiesFile)) {
-      systemProperties.load(inputStream);
+      systemProperties.load(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
       if (isNumeric(args)) {
         int id = Integer.parseInt(args);
         nodeLocation =
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/SystemPropertiesUtils.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/SystemPropertiesUtils.java
index b9839a37f07..ca7bcb3e9e5 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/SystemPropertiesUtils.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/SystemPropertiesUtils.java
@@ -33,6 +33,9 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
@@ -414,7 +417,7 @@ public class SystemPropertiesUtils {
 
     Properties systemProperties = new Properties();
     try (FileInputStream inputStream = new FileInputStream(systemPropertiesFile)) {
-      systemProperties.load(inputStream);
+      systemProperties.load(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
     }
     return systemProperties;
   }
@@ -423,7 +426,7 @@ public class SystemPropertiesUtils {
       throws IOException {
     try (FileOutputStream fileOutputStream = new FileOutputStream(systemPropertiesFile)) {
       systemProperties.store(
-          fileOutputStream,
+          new OutputStreamWriter(fileOutputStream, StandardCharsets.UTF_8),
           " THIS FILE IS AUTOMATICALLY GENERATED. PLEASE DO NOT MODIFY THIS FILE !!!");
       fileOutputStream.getFD().sync();
     }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
index 75ebb34540b..048afadc585 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
@@ -68,8 +68,10 @@ import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -163,7 +165,7 @@ public class IoTDBDescriptor {
     if (url != null) {
       try (InputStream inputStream = url.openStream()) {
         LOGGER.info("Start to read config file {}", url);
-        commonProperties.load(inputStream);
+        commonProperties.load(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
       } catch (FileNotFoundException e) {
         LOGGER.error("Fail to find config file {}, reject DataNode startup.", url, e);
         System.exit(-1);
@@ -184,7 +186,7 @@ public class IoTDBDescriptor {
       try (InputStream inputStream = url.openStream()) {
         LOGGER.info("Start to read config file {}", url);
         Properties properties = new Properties();
-        properties.load(inputStream);
+        properties.load(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
         commonProperties.putAll(properties);
         loadProperties(commonProperties);
       } catch (FileNotFoundException e) {
@@ -1640,7 +1642,7 @@ public class IoTDBDescriptor {
     Properties commonProperties = new Properties();
     try (InputStream inputStream = url.openStream()) {
       LOGGER.info("Start to reload config file {}", url);
-      commonProperties.load(inputStream);
+      commonProperties.load(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
     } catch (Exception e) {
       LOGGER.warn("Fail to reload config file {}", url, e);
       throw new QueryProcessException(
@@ -1655,7 +1657,7 @@ public class IoTDBDescriptor {
     try (InputStream inputStream = url.openStream()) {
       LOGGER.info("Start to reload config file {}", url);
       Properties properties = new Properties();
-      properties.load(inputStream);
+      properties.load(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
       commonProperties.putAll(properties);
       loadHotModifiedProps(commonProperties);
     } catch (Exception e) {
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBStartCheck.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBStartCheck.java
index e37df2a3d66..e366ae8c987 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBStartCheck.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBStartCheck.java
@@ -38,6 +38,8 @@ import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.util.HashMap;
 import java.util.Map;
@@ -176,7 +178,8 @@ public class IoTDBStartCheck {
       // write properties to system.properties
       try (FileOutputStream outputStream = new FileOutputStream(propertiesFile)) {
         systemProperties.forEach((k, v) -> properties.setProperty(k, v.get()));
-        properties.store(outputStream, SYSTEM_PROPERTIES_STRING);
+        properties.store(
+            new OutputStreamWriter(outputStream, StandardCharsets.UTF_8), SYSTEM_PROPERTIES_STRING);
       }
       isFirstStart = true;
       return true;
@@ -266,7 +269,8 @@ public class IoTDBStartCheck {
       // overwrite system.properties when first start
       try (FileOutputStream outputStream = new FileOutputStream(propertiesFile)) {
         systemProperties.forEach((k, v) -> properties.setProperty(k, v.get()));
-        properties.store(outputStream, SYSTEM_PROPERTIES_STRING);
+        properties.store(
+            new OutputStreamWriter(outputStream, StandardCharsets.UTF_8), SYSTEM_PROPERTIES_STRING);
       }
       if (config.getDataRegionConsensusProtocolClass().equals(ConsensusFactory.IOT_CONSENSUS)
           && config.getWalMode().equals(WALMode.DISABLE)) {
@@ -309,7 +313,8 @@ public class IoTDBStartCheck {
           });
       properties.setProperty(IOTDB_VERSION_STRING, IoTDBConstant.VERSION);
       properties.setProperty(COMMIT_ID_STRING, IoTDBConstant.BUILD_INFO);
-      properties.store(tmpFOS, SYSTEM_PROPERTIES_STRING);
+      properties.store(
+          new OutputStreamWriter(tmpFOS, StandardCharsets.UTF_8), SYSTEM_PROPERTIES_STRING);
       // upgrade finished, delete old system.properties file
       if (propertiesFile.exists()) {
         Files.delete(propertiesFile.toPath());
@@ -380,7 +385,8 @@ public class IoTDBStartCheck {
     try {
       properties.setProperty(IoTDBConstant.CLUSTER_NAME, clusterName);
       properties.setProperty(DATA_NODE_ID, String.valueOf(dataNodeId));
-      properties.store(tmpFOS, SYSTEM_PROPERTIES_STRING);
+      properties.store(
+          new OutputStreamWriter(tmpFOS, StandardCharsets.UTF_8), SYSTEM_PROPERTIES_STRING);
       // serialize finished, delete old system.properties file
       if (propertiesFile.exists()) {
         Files.delete(propertiesFile.toPath());
@@ -417,7 +423,8 @@ public class IoTDBStartCheck {
     if (needsSerialize) {
       try (FileOutputStream outputStream = new FileOutputStream(propertiesFile)) {
         systemProperties.forEach((k, v) -> properties.setProperty(k, v.get()));
-        properties.store(outputStream, SYSTEM_PROPERTIES_STRING);
+        properties.store(
+            new OutputStreamWriter(outputStream, StandardCharsets.UTF_8), SYSTEM_PROPERTIES_STRING);
       }
     }
     long endTime = System.currentTimeMillis();
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/rest/IoTDBRestServiceDescriptor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/rest/IoTDBRestServiceDescriptor.java
index aada9813035..f84f6809f74 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/rest/IoTDBRestServiceDescriptor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/rest/IoTDBRestServiceDescriptor.java
@@ -28,8 +28,10 @@ import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.nio.charset.StandardCharsets;
 import java.util.Properties;
 
 public class IoTDBRestServiceDescriptor {
@@ -64,7 +66,7 @@ public class IoTDBRestServiceDescriptor {
     try (InputStream inputStream = url.openStream()) {
       logger.info("Start to read config file {}", url);
       Properties properties = new Properties();
-      properties.load(inputStream);
+      properties.load(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
       return properties;
     } catch (FileNotFoundException e) {
       logger.warn("REST service fail to find config file {}", url, e);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/client/ConfigNodeInfo.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/client/ConfigNodeInfo.java
index 91050bc73b8..4726366fd27 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/client/ConfigNodeInfo.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/client/ConfigNodeInfo.java
@@ -34,6 +34,9 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
@@ -124,12 +127,12 @@ public class ConfigNodeInfo {
   private void storeConfigNode() throws IOException {
     Properties properties = new Properties();
     try (FileInputStream inputStream = new FileInputStream(propertiesFile)) {
-      properties.load(inputStream);
+      properties.load(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
     }
     properties.setProperty(
         CONFIG_NODE_LIST, NodeUrlUtils.convertTEndPointUrls(new ArrayList<>(onlineConfigNodes)));
     try (FileOutputStream fileOutputStream = new FileOutputStream(propertiesFileTmp)) {
-      properties.store(fileOutputStream, "");
+      properties.store(new OutputStreamWriter(fileOutputStream, StandardCharsets.UTF_8), "");
     }
     updatePropertiesFile();
   }
@@ -151,7 +154,7 @@ public class ConfigNodeInfo {
       configNodeInfoReadWriteLock.writeLock().lock();
       Properties properties = new Properties();
       try (FileInputStream inputStream = new FileInputStream(propertiesFile)) {
-        properties.load(inputStream);
+        properties.load(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
       } catch (IOException e) {
         throw new RuntimeException(e);
       }
diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/conf/IoTDBConstant.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/conf/IoTDBConstant.java
index b6697483f9f..88df1615a58 100644
--- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/conf/IoTDBConstant.java
+++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/conf/IoTDBConstant.java
@@ -20,8 +20,11 @@
 package org.apache.iotdb.commons.conf;
 
 import java.io.File;
+import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
 import java.util.HashSet;
+import java.util.Objects;
 import java.util.Properties;
 import java.util.Set;
 import java.util.regex.Pattern;
@@ -34,7 +37,10 @@ public class IoTDBConstant {
     Properties prop = new Properties();
     String finalBuildInfo = "UNKNOWN";
     try {
-      prop.load(IoTDBConstant.class.getResourceAsStream("/git.properties"));
+      prop.load(
+          new InputStreamReader(
+              Objects.requireNonNull(IoTDBConstant.class.getResourceAsStream("/git.properties")),
+              StandardCharsets.UTF_8));
       finalBuildInfo = prop.getProperty("git.commit.id.abbrev", "UNKNOWN");
       String isDirty = prop.getProperty("git.dirty", "false");
       if (isDirty.equalsIgnoreCase("true")) {
diff --git a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/common/conf/TSFileDescriptor.java b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/common/conf/TSFileDescriptor.java
index 3b060507d07..09db06c0fe0 100644
--- a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/common/conf/TSFileDescriptor.java
+++ b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/common/conf/TSFileDescriptor.java
@@ -28,9 +28,11 @@ import org.slf4j.LoggerFactory;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.io.InputStreamReader;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URL;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.Paths;
 import java.util.Optional;
 import java.util.Properties;
@@ -134,7 +136,7 @@ public class TSFileDescriptor {
   private Optional<Properties> loadPropertiesFromFile(String filePath) {
     try (FileInputStream fileInputStream = new FileInputStream(filePath)) {
       Properties properties = new Properties();
-      properties.load(fileInputStream);
+      properties.load(new InputStreamReader(fileInputStream, StandardCharsets.UTF_8));
       return Optional.of(properties);
     } catch (FileNotFoundException e) {
       logger.warn("Fail to find config file {}", filePath);