diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBSimpleQueryIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBSimpleQueryIT.java index 677128d0bd8c6..599f2cb86113a 100644 --- a/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBSimpleQueryIT.java +++ b/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBSimpleQueryIT.java @@ -111,7 +111,7 @@ public void testFailedToCreateTimeseriesSDTProperties() { } catch (Exception e) { assertEquals( TSStatusCode.ILLEGAL_PARAMETER.getStatusCode() - + ": SDT compression deviation cannot be negative. Failed to create timeseries for path root.sg1.d0.s1", + + ": SDT property compdev must be non-negative, but was [-2]. Failed to create timeseries for path root.sg1.d0.s1", e.getMessage()); } diff --git a/iotdb-core/datanode/src/main/i18n/en/org/apache/iotdb/db/i18n/DataNodeSchemaMessages.java b/iotdb-core/datanode/src/main/i18n/en/org/apache/iotdb/db/i18n/DataNodeSchemaMessages.java index c0e0d67346b63..06b0080d7a761 100644 --- a/iotdb-core/datanode/src/main/i18n/en/org/apache/iotdb/db/i18n/DataNodeSchemaMessages.java +++ b/iotdb-core/datanode/src/main/i18n/en/org/apache/iotdb/db/i18n/DataNodeSchemaMessages.java @@ -171,7 +171,7 @@ public final class DataNodeSchemaMessages { public static final String ERROR_DURING_INIT_SCHEMA_REGION = "Error occurred during initializing schemaRegion {}"; public static final String FAILED_TO_RECOVER_TAG_INDEX = - "Failed to recover tagIndex for {} in schemaRegion {}."; + "Failed to recover tag index for measurement [{}] in database [{}], SchemaRegion [{}], tag offset [{}]."; public static final String FAILED_TO_READ_TAG_ATTRIBUTE = "Failed to read tag and attribute info because {}"; @@ -213,19 +213,19 @@ public final class DataNodeSchemaMessages { public static final String DATABASE_NAME_ILLEGAL_CHARS = "The database name can only contain english or chinese characters, numbers, backticks and underscores. %s"; public static final String SDT_COMPRESSION_DEVIATION_REQUIRED = - "SDT compression deviation is required"; + "SDT compression requires the compdev property"; public static final String SDT_COMPRESSION_DEVIATION_NEGATIVE = - "SDT compression deviation cannot be negative"; + "SDT property compdev must be non-negative, but was [%s]"; public static final String SDT_COMPRESSION_DEVIATION_FORMAT_ERROR = - "SDT compression deviation formatting error"; + "SDT property compdev must be a number, but was [%s]"; public static final String SDT_COMPRESSION_MAX_GREATER_THAN_MIN = - "SDT compression maximum time needs to be greater than compression minimum time"; + "SDT property compmaxtime [%s] must be greater than compmintime [%s]"; public static final String SDT_COMPRESSION_TIME_NEGATIVE = - "SDT compression %s time cannot be negative"; + "SDT property %s must be non-negative, but was [%s]"; public static final String SDT_COMPRESSION_TIME_FORMAT_ERROR = - "SDT compression %s time formatting error"; + "SDT property %s must be a 64-bit integer, but was [%s]"; public static final String SDT_ENABLED_NO_COMPRESSION_TIME = - "{} enabled SDT but did not set compression {} time"; + "Timeseries [{}] uses SDT without property [{}]; using default [{}]."; // ======================== Tag/Attribute ======================== @@ -489,9 +489,12 @@ public final class DataNodeSchemaMessages { public static final String FAILED_TO_CREATE_TEMPLATE = "Failed to execute create device template {} in config node, status is {}."; public static final String CREATE_TEMPLATE_ERROR_PREFIX = "create template error -"; - public static final String CREATE_TEMPLATE_ERROR = "create template error."; - public static final String GET_ALL_TEMPLATE_ERROR = "get all template error."; - public static final String GET_TEMPLATE_INFO_ERROR = "get template info error."; + public static final String CREATE_TEMPLATE_ERROR = + "Failed to create schema template [%s] on ConfigNode: %s"; + public static final String GET_ALL_TEMPLATE_ERROR = + "Failed to get schema templates from ConfigNode: %s"; + public static final String GET_TEMPLATE_INFO_ERROR = + "Failed to get schema template [%s] from ConfigNode: %s"; public static final String FAILED_TO_SET_TEMPLATE = "Failed to execute set device template {} on path {} in config node, status is {}."; 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 417f547573a01..a932bc061cdbb 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 @@ -164,7 +164,7 @@ public final class DataNodeSchemaMessages { public static final String ERROR_DURING_INIT_SCHEMA_REGION = "初始化 schemaRegion {} 过程中发生错误"; public static final String FAILED_TO_RECOVER_TAG_INDEX = - "恢复 {} 的 tagIndex 失败,schemaRegion 为 {}。"; + "恢复测点 [{}] 的 tag 索引失败,数据库为 [{}],SchemaRegion 为 [{}],tag 偏移量为 [{}]。"; public static final String FAILED_TO_READ_TAG_ATTRIBUTE = "读取 tag 和 attribute 信息失败:{}"; @@ -206,19 +206,19 @@ public final class DataNodeSchemaMessages { public static final String DATABASE_NAME_ILLEGAL_CHARS = "数据库名称只能包含中英文字符、数字、反引号和下划线。%s"; public static final String SDT_COMPRESSION_DEVIATION_REQUIRED = - "SDT 压缩偏差为必填项"; + "SDT 压缩必须设置 compdev 属性"; public static final String SDT_COMPRESSION_DEVIATION_NEGATIVE = - "SDT 压缩偏差不能为负数"; + "SDT 属性 compdev 必须为非负数,实际值为 [%s]"; public static final String SDT_COMPRESSION_DEVIATION_FORMAT_ERROR = - "SDT 压缩偏差格式错误"; + "SDT 属性 compdev 必须为数字,实际值为 [%s]"; public static final String SDT_COMPRESSION_MAX_GREATER_THAN_MIN = - "SDT 压缩最大时间必须大于最小时间"; + "SDT 属性 compmaxtime [%s] 必须大于 compmintime [%s]"; public static final String SDT_COMPRESSION_TIME_NEGATIVE = - "SDT 压缩 %s 时间不能为负数"; + "SDT 属性 %s 必须为非负数,实际值为 [%s]"; public static final String SDT_COMPRESSION_TIME_FORMAT_ERROR = - "SDT 压缩 %s 时间格式错误"; + "SDT 属性 %s 必须为 64 位整数,实际值为 [%s]"; public static final String SDT_ENABLED_NO_COMPRESSION_TIME = - "{} 已启用 SDT 但未设置压缩 {} 时间"; + "时间序列 [{}] 已启用 SDT 但未设置属性 [{}],使用默认值 [{}]。"; // ======================== Tag/Attribute 相关消息 ======================== @@ -480,9 +480,12 @@ public final class DataNodeSchemaMessages { public static final String FAILED_TO_CREATE_TEMPLATE = "在 ConfigNode 中执行创建设备模板 {} 失败,状态为 {}。"; public static final String CREATE_TEMPLATE_ERROR_PREFIX = "创建模板出错 - "; - public static final String CREATE_TEMPLATE_ERROR = "创建模板出错。"; - public static final String GET_ALL_TEMPLATE_ERROR = "获取所有模板出错。"; - public static final String GET_TEMPLATE_INFO_ERROR = "获取模板信息出错。"; + public static final String CREATE_TEMPLATE_ERROR = + "在 ConfigNode 上创建元数据模板 [%s] 失败:%s"; + public static final String GET_ALL_TEMPLATE_ERROR = + "从 ConfigNode 获取元数据模板列表失败:%s"; + public static final String GET_TEMPLATE_INFO_ERROR = + "从 ConfigNode 获取元数据模板 [%s] 失败:%s"; public static final String FAILED_TO_SET_TEMPLATE = "在 ConfigNode 中执行设置设备模板 {} 到路径 {} 失败,状态为 {}。"; diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/SchemaEngine.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/SchemaEngine.java index ce8ba551a4019..87410d51c992c 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/SchemaEngine.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/SchemaEngine.java @@ -346,12 +346,12 @@ private Callable recoverSchemaRegionTask( timeRecord); return schemaRegion; } catch (final MetadataException e) { - logger.error( + throw new RuntimeException( String.format( DataNodeSchemaMessages.SCHEMA_REGION_FAILED_TO_RECOVER, schemaRegionId.getId(), - storageGroup)); - throw new RuntimeException(e); + storageGroup), + e); } }; } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionMemoryImpl.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionMemoryImpl.java index e15e7e132c84a..dfc305656ae0c 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionMemoryImpl.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionMemoryImpl.java @@ -166,7 +166,6 @@ import static org.apache.iotdb.calc.plan.planner.TableOperatorGenerator.makeLayout; import static org.apache.iotdb.db.queryengine.plan.relational.metadata.fetcher.TableDeviceSchemaFetcher.convertTagValuesToDeviceID; -import static org.apache.tsfile.common.constant.TsFileConstant.PATH_SEPARATOR; /** * This class takes the responsibility of serialization of all the metadata info of one certain @@ -625,10 +624,14 @@ public boolean loadSnapshot(final File latestSnapshotRootDir) { try { tagManager.recoverIndex(measurementMNode.getOffset(), measurementMNode); } catch (final IOException e) { + // Snapshot callbacks run before the measurement is attached to its parent. logger.error( DataNodeSchemaMessages.FAILED_TO_RECOVER_TAG_INDEX, - databaseFullPath + PATH_SEPARATOR + measurementMNode.getFullPath(), - schemaRegionId); + measurementMNode.getName(), + databaseFullPath, + schemaRegionId, + measurementMNode.getOffset(), + e); } }, deviceMNode -> { diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/utils/MetaFormatUtils.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/utils/MetaFormatUtils.java index c28a918e451f3..8b0ae04b65893 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/utils/MetaFormatUtils.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/utils/MetaFormatUtils.java @@ -153,11 +153,16 @@ private static void checkSDTFormat(String path, Map props) double d = Double.parseDouble(props.get(SDT_COMP_DEV)); if (d < 0) { throw new IllegalParameterOfPathException( - DataNodeSchemaMessages.SDT_COMPRESSION_DEVIATION_NEGATIVE, path); + String.format( + DataNodeSchemaMessages.SDT_COMPRESSION_DEVIATION_NEGATIVE, props.get(SDT_COMP_DEV)), + path); } } catch (NumberFormatException e) { throw new IllegalParameterOfPathException( - DataNodeSchemaMessages.SDT_COMPRESSION_DEVIATION_FORMAT_ERROR, path); + String.format( + DataNodeSchemaMessages.SDT_COMPRESSION_DEVIATION_FORMAT_ERROR, + props.get(SDT_COMP_DEV)), + path); } long compMinTime = sdtCompressionTimeFormat(SDT_COMP_MIN_TIME, props, path); @@ -165,7 +170,11 @@ private static void checkSDTFormat(String path, Map props) if (compMaxTime <= compMinTime) { throw new IllegalParameterOfPathException( - DataNodeSchemaMessages.SDT_COMPRESSION_MAX_GREATER_THAN_MIN, path); + String.format( + DataNodeSchemaMessages.SDT_COMPRESSION_MAX_GREATER_THAN_MIN, + compMaxTime, + compMinTime), + path); } } @@ -174,20 +183,23 @@ private static long sdtCompressionTimeFormat( throws IllegalParameterOfPathException { boolean isCompMaxTime = compTime.equals(SDT_COMP_MAX_TIME); long time = isCompMaxTime ? Long.MAX_VALUE : 0; - String s = isCompMaxTime ? "maximum" : "minimum"; if (props.containsKey(compTime)) { + String value = props.get(compTime); try { - time = Long.parseLong(props.get(compTime)); - if (time < 0) { - throw new IllegalParameterOfPathException( - String.format(DataNodeSchemaMessages.SDT_COMPRESSION_TIME_NEGATIVE, s), path); - } - } catch (IllegalParameterOfPathException e) { + time = Long.parseLong(value); + } catch (NumberFormatException e) { throw new IllegalParameterOfPathException( - String.format(DataNodeSchemaMessages.SDT_COMPRESSION_TIME_FORMAT_ERROR, s), path); + String.format( + DataNodeSchemaMessages.SDT_COMPRESSION_TIME_FORMAT_ERROR, compTime, value), + path); + } + if (time < 0) { + throw new IllegalParameterOfPathException( + String.format(DataNodeSchemaMessages.SDT_COMPRESSION_TIME_NEGATIVE, compTime, value), + path); } } else { - logger.info(DataNodeSchemaMessages.SDT_ENABLED_NO_COMPRESSION_TIME, path, s); + logger.debug(DataNodeSchemaMessages.SDT_ENABLED_NO_COMPRESSION_TIME, path, compTime, time); } return time; } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/template/ClusterTemplateManager.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/template/ClusterTemplateManager.java index 825ea757a7771..816effce32985 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/template/ClusterTemplateManager.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/template/ClusterTemplateManager.java @@ -130,11 +130,11 @@ public TSStatus createSchemaTemplate(CreateSchemaTemplateStatement statement) { e, TSStatusCode.CREATE_TEMPLATE_ERROR.getStatusCode())); } catch (ClientManagerException | TException e) { - throw new RuntimeException( - new IoTDBException( - DataNodeSchemaMessages.CREATE_TEMPLATE_ERROR, - e, - TSStatusCode.CREATE_TEMPLATE_ERROR.getStatusCode())); + throw wrapTemplateRpcException( + String.format( + DataNodeSchemaMessages.CREATE_TEMPLATE_ERROR, statement.getName(), e.getMessage()), + e, + TSStatusCode.CREATE_TEMPLATE_ERROR); } } @@ -177,10 +177,10 @@ public List