Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {}";

Expand Down Expand Up @@ -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 ========================

Expand Down Expand Up @@ -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 {}.";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 信息失败:{}";

Expand Down Expand Up @@ -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 相关消息 ========================

Expand Down Expand Up @@ -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 中执行设置设备模板 {} 到路径 {} 失败,状态为 {}。";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -346,12 +346,12 @@ private Callable<ISchemaRegion> 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);
}
};
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -153,19 +153,28 @@ private static void checkSDTFormat(String path, Map<String, String> 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);
long compMaxTime = sdtCompressionTimeFormat(SDT_COMP_MAX_TIME, props, path);

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

Expand All @@ -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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}

Expand Down Expand Up @@ -177,10 +177,10 @@ public List<Template> getAllTemplates() {
throw new IoTDBRuntimeException(resp.getStatus());
}
} catch (ClientManagerException | TException e) {
throw new RuntimeException(
new IoTDBException(
DataNodeSchemaMessages.GET_ALL_TEMPLATE_ERROR,
TSStatusCode.UNDEFINED_TEMPLATE.getStatusCode()));
throw wrapTemplateRpcException(
String.format(DataNodeSchemaMessages.GET_ALL_TEMPLATE_ERROR, e.getMessage()),
e,
TSStatusCode.UNDEFINED_TEMPLATE);
}
return templatesList;
}
Expand All @@ -199,13 +199,21 @@ public Template getTemplate(String name) throws IoTDBException {
throw new IoTDBException(resp.status);
}
} catch (ClientManagerException | TException e) {
throw new RuntimeException(
new IoTDBException(
DataNodeSchemaMessages.GET_TEMPLATE_INFO_ERROR,
TSStatusCode.UNDEFINED_TEMPLATE.getStatusCode()));
throw wrapTemplateRpcException(
String.format(DataNodeSchemaMessages.GET_TEMPLATE_INFO_ERROR, name, e.getMessage()),
e,
TSStatusCode.UNDEFINED_TEMPLATE);
}
}

private static RuntimeException wrapTemplateRpcException(
String message, Exception cause, TSStatusCode statusCode) {
IoTDBException exception = new IoTDBException(message, statusCode.getStatusCode());
// Query error handling uses the deepest cause to determine the status and message.
exception.addSuppressed(cause);
return new RuntimeException(exception);
}

@Override
public void setSchemaTemplate(String queryId, String name, PartialPath path) {
try (ConfigNodeClient configNodeClient =
Expand Down Expand Up @@ -256,7 +264,7 @@ public List<PartialPath> getPathsSetTemplate(String name, PathPatternTree scope)
try {
listPath.add(new PartialPath(item));
} catch (IllegalPathException e) {
LOGGER.error(DataNodeSchemaMessages.ILLEGAL_PATH_LOG, item);
LOGGER.error(DataNodeSchemaMessages.ILLEGAL_PATH_LOG, item, e);
}
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,13 @@ public void testZhSlf4jTemplatesPreserveLoggerArgumentOrder() throws IOException
"跳过 128 失败,schemaRegion 目录为 C:/schema",
formatSlf4j(readZhMessage("FAILED_TO_SKIP_MLOG"), 128, "C:/schema"));
Assert.assertEquals(
"恢复 root.sg.d.s 的 tagIndex 失败,schemaRegion 为 SchemaRegionId{1}。",
"恢复测点 [s] 的 tag 索引失败,数据库为 [root.sg],SchemaRegion 为 [SchemaRegionId{1}],tag 偏移量为 [128]。",
formatSlf4j(
readZhMessage("FAILED_TO_RECOVER_TAG_INDEX"), "root.sg.d.s", "SchemaRegionId{1}"));
readZhMessage("FAILED_TO_RECOVER_TAG_INDEX"),
"s",
"root.sg",
"SchemaRegionId{1}",
128));
Assert.assertEquals(
"MTree 刷写耗时 321ms,SchemaRegion 为 SchemaRegionId{1}",
formatSlf4j(readZhMessage("MTREE_FLUSH_COST"), 321, "SchemaRegionId{1}"));
Expand Down
Loading
Loading