This is an automated email from the ASF dual-hosted git repository.
Caideyipi pushed a commit to branch schema-fix
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/schema-fix by this push:
new adfaa2ce717 sf
adfaa2ce717 is described below
commit adfaa2ce717faaa2b43662468c34120a5fb85a90
Author: Caideyipi <[email protected]>
AuthorDate: Tue May 19 17:39:24 2026 +0800
sf
---
.../iotdb/db/i18n/DataNodeSchemaMessages.java | 10 +--
.../i18n/DataNodeSchemaMessagesZhFormatTest.java | 87 ++++++++++++++++++++++
2 files changed, 92 insertions(+), 5 deletions(-)
diff --git
a/iotdb-core/datanode/src/main/i18n/zh/org/apache/iotdb/db/i18n/DataNodeSchemaMessages.java
b/iotdb-core/datanode/src/main/i18n/zh/org/apache/iotdb/db/i18n/DataNodeSchemaMessages.java
index 6d1d7c190ac..77370266409 100644
---
a/iotdb-core/datanode/src/main/i18n/zh/org/apache/iotdb/db/i18n/DataNodeSchemaMessages.java
+++
b/iotdb-core/datanode/src/main/i18n/zh/org/apache/iotdb/db/i18n/DataNodeSchemaMessages.java
@@ -30,7 +30,7 @@ public final class DataNodeSchemaMessages {
"更新模板 {} 在 schemaRegion {} 中的子树测点计数失败";
public static final String RECOVER_SPEND = "恢复 [{}] 耗时:{} ms";
public static final String SCHEMA_REGION_FAILED_TO_RECOVER =
- "StorageGroup [%s] 中的 SchemaRegion [%d] 恢复失败。";
+ "SchemaRegion [%d] 在 StorageGroup [%s] 中恢复失败。";
public static final String SCHEMA_REGION_ALREADY_DELETED =
"SchemaRegion(id = {}) 已被删除,已跳过";
public static final String FAILED_TO_GET_TABLE_FOR_TIMESERIES_COUNT =
@@ -104,7 +104,7 @@ public final class DataNodeSchemaMessages {
public static final String CANNOT_FORCE_MLOG = "无法将 {} 的 mlog 强制写入 schema
region";
public static final String SPEND_TIME_DESERIALIZE_MTREE =
- "从 mlog.bin 反序列化 {} 的 mtree 耗时 {} ms";
+ "从 mlog.bin 反序列化 MTree 耗时 {} ms,对应路径 {}";
public static final String FAILED_TO_PARSE_MLOG = "解析 ";
public static final String MLOG_BIN_SUFFIX = " mlog.bin 失败";
public static final String PARSE_MLOG_ERROR = "在行号 {} 处解析 mlog 出错:";
@@ -116,7 +116,7 @@ public final class DataNodeSchemaMessages {
public static final String MLOG_RECOVERY_CHECK_POINT = "MLog 恢复检查点:{}";
public static final String CANNOT_GET_MLOG_CHECKPOINT =
"无法从 MLogDescription 文件获取检查点,原因:{},使用默认值 0。";
- public static final String FAILED_TO_SKIP_MLOG = "从 {} 跳过 {} 失败";
+ public static final String FAILED_TO_SKIP_MLOG = "跳过 {} 失败,schemaRegion 目录为
{}";
public static final String UPDATE_MLOG_DESCRIPTION_FAILED = "更新 {} 失败,原因:{}";
public static final String DIRECT_BUFFER_MEMORY_EXCEEDED =
"直接缓冲区的总分配内存将达到 ";
@@ -162,7 +162,7 @@ public final class DataNodeSchemaMessages {
public static final String ERROR_DURING_INIT_SCHEMA_REGION =
"初始化 schemaRegion {} 过程中发生错误";
public static final String FAILED_TO_RECOVER_TAG_INDEX =
- "在 schemaRegion {} 中恢复 {} 的 tagIndex 失败。";
+ "恢复 {} 的 tagIndex 失败,schemaRegion 为 {}。";
public static final String FAILED_TO_READ_TAG_ATTRIBUTE =
"读取 tag 和 attribute 信息失败:{}";
@@ -556,7 +556,7 @@ public final class DataNodeSchemaMessages {
// ======================== CachedMTreeStore / Scheduler 相关消息
========================
public static final String MTREE_FLUSH_COST =
- "在 SchemaRegion {} 中刷写 MTree 耗时 {}ms";
+ "MTree 刷写耗时 {}ms,SchemaRegion 为 {}";
// ======================== DataNodeTableCache 相关消息 ========================
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/i18n/DataNodeSchemaMessagesZhFormatTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/i18n/DataNodeSchemaMessagesZhFormatTest.java
new file mode 100644
index 00000000000..01f2351318a
--- /dev/null
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/i18n/DataNodeSchemaMessagesZhFormatTest.java
@@ -0,0 +1,87 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.iotdb.db.i18n;
+
+import org.slf4j.helpers.MessageFormatter;
+import org.junit.Assert;
+import org.junit.Test;
+
+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.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class DataNodeSchemaMessagesZhFormatTest {
+
+ private static final String ZH_MESSAGES_RELATIVE_PATH =
+ "src/main/i18n/zh/org/apache/iotdb/db/i18n/DataNodeSchemaMessages.java";
+
+ @Test
+ public void testZhSlf4jTemplatesPreserveLoggerArgumentOrder() throws
IOException {
+ Assert.assertEquals(
+ "从 mlog.bin 反序列化 MTree 耗时 12 ms,对应路径 root.sg",
+ formatSlf4j(readZhMessage("SPEND_TIME_DESERIALIZE_MTREE"), 12,
"root.sg"));
+ Assert.assertEquals(
+ "跳过 128 失败,schemaRegion 目录为 C:/schema",
+ formatSlf4j(readZhMessage("FAILED_TO_SKIP_MLOG"), 128, "C:/schema"));
+ Assert.assertEquals(
+ "恢复 root.sg.d.s 的 tagIndex 失败,schemaRegion 为 SchemaRegionId{1}。",
+ formatSlf4j(
+ readZhMessage("FAILED_TO_RECOVER_TAG_INDEX"),
+ "root.sg.d.s",
+ "SchemaRegionId{1}"));
+ Assert.assertEquals(
+ "MTree 刷写耗时 321ms,SchemaRegion 为 SchemaRegionId{1}",
+ formatSlf4j(readZhMessage("MTREE_FLUSH_COST"), 321,
"SchemaRegionId{1}"));
+ }
+
+ @Test
+ public void testZhStringFormatTemplatePreservesArgumentTypesAndOrder()
throws IOException {
+ Assert.assertEquals(
+ "SchemaRegion [7] 在 StorageGroup [root.sg] 中恢复失败。",
+ String.format(readZhMessage("SCHEMA_REGION_FAILED_TO_RECOVER"), 7,
"root.sg"));
+ }
+
+ private static String formatSlf4j(String template, Object... arguments) {
+ return MessageFormatter.arrayFormat(template, arguments).getMessage();
+ }
+
+ private static String readZhMessage(String constantName) throws IOException {
+ Path basePath = Paths.get(ZH_MESSAGES_RELATIVE_PATH);
+ if (!Files.exists(basePath)) {
+ basePath = Paths.get("iotdb-core", "datanode",
ZH_MESSAGES_RELATIVE_PATH);
+ }
+ Assert.assertTrue("Missing zh messages file: " + basePath,
Files.exists(basePath));
+
+ String content = new String(Files.readAllBytes(basePath),
StandardCharsets.UTF_8);
+ Matcher matcher =
+ Pattern.compile(
+ "public static final String\\s+"
+ + Pattern.quote(constantName)
+ + "\\s*=\\s*\"([^\"]*)\";",
+ Pattern.DOTALL)
+ .matcher(content);
+ Assert.assertTrue("Missing zh message constant: " + constantName,
matcher.find());
+ return matcher.group(1);
+ }
+}