状态码
2023年7月10日大约 5 分钟
状态码
IoTDB 引入了状态码这一概念。例如,因为 IoTDB 需要在写入数据之前首先注册时间序列,一种可能的解决方案是:
try {
writeData();
} catch (SQLException e) {
// the most case is that the time series does not exist
if (e.getMessage().contains("exist")) {
//However, using the content of the error message is not so efficient
registerTimeSeries();
//write data once again
writeData();
}
}利用状态码,我们就可以不必写诸如if (e.getErrorMessage().contains("exist"))的代码,
只需要使用e.getStatusType().getCode() == TSStatusCode.TIME_SERIES_NOT_EXIST_ERROR.getStatusCode()。
这里是状态码和相对应信息的列表:
| 状态码 | 状态类型 | 状态信息 |
|---|---|---|
| 200 | SUCCESS_STATUS | 成功状态 |
| 201 | INCOMPATIBLE_VERSION | 版本不兼容 |
| 202 | CONFIGURATION_ERROR | 配置文件有错误项 |
| 203 | START_UP_ERROR | 启动错误 |
| 204 | SHUT_DOWN_ERROR | 关机错误 |
| 300 | UNSUPPORTED_OPERATION | 不支持的操作 |
| 301 | EXECUTE_STATEMENT_ERROR | 执行语句错误 |
| 302 | MULTIPLE_ERROR | 多行语句执行错误 |
| 303 | ILLEGAL_PARAMETER | 参数错误 |
| 304 | OVERLAP_WITH_EXISTING_TASK | 与正在执行的其他操作冲突 |
| 305 | INTERNAL_SERVER_ERROR | 服务器内部错误 |
| 306 | DISPATCH_ERROR | 分发错误 |
| 400 | REDIRECTION_RECOMMEND | 推荐客户端重定向 |
| 500 | DATABASE_NOT_EXIST | 数据库不存在 |
| 501 | DATABASE_ALREADY_EXISTS | 数据库已存在 |
| 502 | SERIES_OVERFLOW | 序列数量超过阈值 |
| 503 | TIMESERIES_ALREADY_EXIST | 时间序列已存在 |
| 504 | TIMESERIES_IN_BLACK_LIST | 时间序列正在删除 |
| 505 | ALIAS_ALREADY_EXIST | 路径别名已经存在 |
| 506 | PATH_ALREADY_EXIST | 路径已经存在 |
| 507 | METADATA_ERROR | 处理元数据错误 |
| 508 | PATH_NOT_EXIST | 路径不存在 |
| 509 | ILLEGAL_PATH | 路径不合法 |
| 510 | CREATE_TEMPLATE_ERROR | 创建物理量模板失败 |
| 511 | DUPLICATED_TEMPLATE | 元数据模板重复 |
| 512 | UNDEFINED_TEMPLATE | 元数据模板未定义 |
| 513 | TEMPLATE_NOT_SET | 元数据模板未设置 |
| 514 | DIFFERENT_TEMPLATE | 元数据模板不一致 |
| 515 | TEMPLATE_IS_IN_USE | 元数据模板正在使用 |
| 516 | TEMPLATE_INCOMPATIBLE | 元数据模板不兼容 |
| 517 | SEGMENT_NOT_FOUND | 未找到 Segment |
| 518 | PAGE_OUT_OF_SPACE | PBTreeFile 中 Page 空间不够 |
| 519 | RECORD_DUPLICATED | 记录重复 |
| 520 | SEGMENT_OUT_OF_SPACE | PBTreeFile 中 segment 空间不够 |
| 521 | PBTREE_FILE_NOT_EXISTS | PBTreeFile 不存在 |
| 522 | OVERSIZE_RECORD | 记录大小超过元数据文件页面大小 |
| 523 | PBTREE_FILE_REDO_LOG_BROKEN | PBTreeFile 的 redo 日志损坏 |
| 524 | TEMPLATE_NOT_ACTIVATED | 元数据模板未激活 |
| 526 | SCHEMA_QUOTA_EXCEEDED | 集群元数据超过配额上限 |
| 527 | MEASUREMENT_ALREADY_EXISTS_IN_TEMPLATE | 元数据模板中已存在物理量 |
| 600 | SYSTEM_READ_ONLY | IoTDB 系统只读 |
| 601 | STORAGE_ENGINE_ERROR | 存储引擎相关错误 |
| 602 | STORAGE_ENGINE_NOT_READY | 存储引擎还在恢复中,还不能接受读写操作 |
| 603 | DATAREGION_PROCESS_ERROR | DataRegion 相关错误 |
| 604 | TSFILE_PROCESSOR_ERROR | TsFile 处理器相关错误 |
| 605 | WRITE_PROCESS_ERROR | 写入相关错误 |
| 606 | WRITE_PROCESS_REJECT | 写入拒绝错误 |
| 607 | OUT_OF_TTL | 插入时间少于 TTL 时间边界 |
| 608 | COMPACTION_ERROR | 合并错误 |
| 609 | ALIGNED_TIMESERIES_ERROR | 对齐时间序列错误 |
| 610 | WAL_ERROR | WAL 异常 |
| 611 | DISK_SPACE_INSUFFICIENT | 磁盘空间不足 |
| 700 | SQL_PARSE_ERROR | SQL 语句分析错误 |
| 701 | SEMANTIC_ERROR | SQL 语义错误 |
| 702 | GENERATE_TIME_ZONE_ERROR | 生成时区错误 |
| 703 | SET_TIME_ZONE_ERROR | 设置时区错误 |
| 704 | QUERY_NOT_ALLOWED | 查询语句不允许 |
| 705 | LOGICAL_OPERATOR_ERROR | 逻辑符相关错误 |
| 706 | LOGICAL_OPTIMIZE_ERROR | 逻辑优化相关错误 |
| 707 | UNSUPPORTED_FILL_TYPE | 不支持的填充类型 |
| 708 | QUERY_PROCESS_ERROR | 查询处理相关错误 |
| 709 | MPP_MEMORY_NOT_ENOUGH | MPP 框架中任务执行内存不足 |
| 710 | CLOSE_OPERATION_ERROR | 关闭操作错误 |
| 711 | TSBLOCK_SERIALIZE_ERROR | TsBlock 序列化错误 |
| 712 | INTERNAL_REQUEST_TIME_OUT | MPP 操作超时 |
| 713 | INTERNAL_REQUEST_RETRY_ERROR | 内部操作重试失败 |
| 714 | NO_SUCH_QUERY | 查询不存在 |
| 715 | QUERY_WAS_KILLED | 查询执行时被终止 |
| 800 | UNINITIALIZED_AUTH_ERROR | 授权模块未初始化 |
| 801 | WRONG_LOGIN_PASSWORD | 用户名或密码错误 |
| 802 | NOT_LOGIN | 没有登录 |
| 803 | NO_PERMISSION | 没有操作权限 |
| 804 | USER_NOT_EXIST | 用户不存在 |
| 805 | USER_ALREADY_EXIST | 用户已存在 |
| 806 | USER_ALREADY_HAS_ROLE | 用户拥有对应角色 |
| 807 | USER_NOT_HAS_ROLE | 用户未拥有对应角色 |
| 808 | ROLE_NOT_EXIST | 角色不存在 |
| 809 | ROLE_ALREADY_EXIST | 角色已存在 |
| 810 | ALREADY_HAS_PRIVILEGE | 已拥有对应权限 |
| 811 | NOT_HAS_PRIVILEGE | 未拥有对应权限 |
| 812 | CLEAR_PERMISSION_CACHE_ERROR | 清空权限缓存失败 |
| 813 | UNKNOWN_AUTH_PRIVILEGE | 未知权限 |
| 814 | UNSUPPORTED_AUTH_OPERATION | 不支持的权限操作 |
| 815 | AUTH_IO_EXCEPTION | 权限模块IO异常 |
| 900 | MIGRATE_REGION_ERROR | Region 迁移失败 |
| 901 | CREATE_REGION_ERROR | 创建 region 失败 |
| 902 | DELETE_REGION_ERROR | 删除 region 失败 |
| 903 | PARTITION_CACHE_UPDATE_ERROR | 更新分区缓存失败 |
| 904 | CONSENSUS_NOT_INITIALIZED | 共识层未初始化,不能提供服务 |
| 905 | REGION_LEADER_CHANGE_ERROR | Region leader 迁移失败 |
| 906 | NO_AVAILABLE_REGION_GROUP | 无法找到可用的 Region 副本组 |
| 907 | LACK_DATA_PARTITION_ALLOCATION | 调用创建数据分区方法的返回结果里缺少信息 |
| 1000 | DATANODE_ALREADY_REGISTERED | DataNode 在集群中已经注册 |
| 1001 | NO_ENOUGH_DATANODE | DataNode 数量不足,无法移除节点或创建副本 |
| 1002 | ADD_CONFIGNODE_ERROR | 新增 ConfigNode 失败 |
| 1003 | REMOVE_CONFIGNODE_ERROR | 移除 ConfigNode 失败 |
| 1004 | DATANODE_NOT_EXIST | 此 DataNode 不存在 |
| 1005 | DATANODE_STOP_ERROR | DataNode 关闭失败 |
| 1006 | REMOVE_DATANODE_ERROR | 移除 datanode 失败 |
| 1007 | REGISTER_DATANODE_WITH_WRONG_ID | 注册的 DataNode 中有错误的注册id |
| 1008 | CAN_NOT_CONNECT_DATANODE | 连接 DataNode 失败 |
| 1100 | LOAD_FILE_ERROR | 加载文件错误 |
| 1101 | LOAD_PIECE_OF_TSFILE_ERROR | 加载 TsFile 片段异常 |
| 1102 | DESERIALIZE_PIECE_OF_TSFILE_ERROR | 反序列化 TsFile 片段异常 |
| 1103 | SYNC_CONNECTION_ERROR | 同步连接错误 |
| 1104 | SYNC_FILE_REDIRECTION_ERROR | 同步文件时重定向异常 |
| 1105 | SYNC_FILE_ERROR | 同步文件异常 |
| 1106 | CREATE_PIPE_SINK_ERROR | 创建 PIPE Sink 失败 |
| 1107 | PIPE_ERROR | PIPE 异常 |
| 1108 | PIPESERVER_ERROR | PIPE server 异常 |
| 1109 | VERIFY_METADATA_ERROR | 校验元数据失败 |
| 1200 | UDF_LOAD_CLASS_ERROR | UDF 加载类异常 |
| 1201 | UDF_DOWNLOAD_ERROR | 无法从 ConfigNode 下载 UDF |
| 1202 | CREATE_UDF_ON_DATANODE_ERROR | 在 DataNode 创建 UDF 失败 |
| 1203 | DROP_UDF_ON_DATANODE_ERROR | 在 DataNode 卸载 UDF 失败 |
| 1300 | CREATE_TRIGGER_ERROR | ConfigNode 创建 Trigger 失败 |
| 1301 | DROP_TRIGGER_ERROR | ConfigNode 删除 Trigger 失败 |
| 1302 | TRIGGER_FIRE_ERROR | 触发器执行错误 |
| 1303 | TRIGGER_LOAD_CLASS_ERROR | 触发器加载类异常 |
| 1304 | TRIGGER_DOWNLOAD_ERROR | 从 ConfigNode 下载触发器异常 |
| 1305 | CREATE_TRIGGER_INSTANCE_ERROR | 创建触发器实例异常 |
| 1306 | ACTIVE_TRIGGER_INSTANCE_ERROR | 激活触发器实例异常 |
| 1307 | DROP_TRIGGER_INSTANCE_ERROR | 删除触发器实例异常 |
| 1308 | UPDATE_TRIGGER_LOCATION_ERROR | 更新有状态的触发器所在 DataNode 异常 |
| 1400 | NO_SUCH_CQ | CQ 任务不存在 |
| 1401 | CQ_ALREADY_ACTIVE | CQ 任务已激活 |
| 1402 | CQ_AlREADY_EXIST | CQ 任务已存在 |
| 1403 | CQ_UPDATE_LAST_EXEC_TIME_ERROR | CQ 更新上一次执行时间失败 |
在最新版本中,我们重构了 IoTDB 的异常类。通过将错误信息统一提取到异常类中,并为所有异常添加不同的错误代码,从而当捕获到异常并引发更高级别的异常时,错误代码将保留并传递,以便用户了解详细的错误原因。
除此之外,我们添加了一个基础异常类“ProcessException”,由所有异常扩展。
