状态码

IoTDB 引入了状态码这一概念。例如,因为 IoTDB 需要在写入数据之前首先注册时间序列,一种可能的解决方案是:

  1. try {
  2. writeData();
  3. } catch (SQLException e) {
  4. // the most case is that the time series does not exist
  5. if (e.getMessage().contains("exist")) {
  6. //However, using the content of the error message is not so efficient
  7. registerTimeSeries();
  8. //write data once again
  9. writeData();
  10. }
  11. }

利用状态码,我们就可以不必写诸如if (e.getErrorMessage().contains("exist"))的代码,
只需要使用e.getStatusType().getCode() == TSStatusCode.TIME_SERIES_NOT_EXIST_ERROR.getStatusCode()

这里是状态码和相对应信息的列表:

状态码状态类型状态信息
200SUCCESS_STATUS成功状态
201INCOMPATIBLE_VERSION版本不兼容
202CONFIGURATION_ERROR配置文件有错误项
203START_UP_ERROR启动错误
204SHUT_DOWN_ERROR关机错误
300UNSUPPORTED_OPERATION不支持的操作
301EXECUTE_STATEMENT_ERROR执行语句错误
302MULTIPLE_ERROR多行语句执行错误
303ILLEGAL_PARAMETER参数错误
304OVERLAP_WITH_EXISTING_TASK与正在执行的其他操作冲突
305INTERNAL_SERVER_ERROR服务器内部错误
306DISPATCH_ERROR分发错误
400REDIRECTION_RECOMMEND推荐客户端重定向
500DATABASE_NOT_EXIST数据库不存在
501DATABASE_ALREADY_EXISTS数据库已存在
502SERIES_OVERFLOW序列数量超过阈值
503TIMESERIES_ALREADY_EXIST时间序列已存在
504TIMESERIES_IN_BLACK_LIST时间序列正在删除
505ALIAS_ALREADY_EXIST路径别名已经存在
506PATH_ALREADY_EXIST路径已经存在
507METADATA_ERROR处理元数据错误
508PATH_NOT_EXIST路径不存在
509ILLEGAL_PATH路径不合法
510CREATE_TEMPLATE_ERROR创建物理量模板失败
511DUPLICATED_TEMPLATE元数据模板重复
512UNDEFINED_TEMPLATE元数据模板未定义
513TEMPLATE_NOT_SET元数据模板未设置
514DIFFERENT_TEMPLATE元数据模板不一致
515TEMPLATE_IS_IN_USE元数据模板正在使用
516TEMPLATE_INCOMPATIBLE元数据模板不兼容
517SEGMENT_NOT_FOUND未找到 Segment
518PAGE_OUT_OF_SPACEPBTreeFile 中 Page 空间不够
519RECORD_DUPLICATED记录重复
520SEGMENT_OUT_OF_SPACEPBTreeFile 中 segment 空间不够
521PBTREE_FILE_NOT_EXISTSPBTreeFile 不存在
522OVERSIZE_RECORD记录大小超过元数据文件页面大小
523PBTREE_FILE_REDO_LOG_BROKENPBTreeFile 的 redo 日志损坏
524TEMPLATE_NOT_ACTIVATED元数据模板未激活
526SCHEMA_QUOTA_EXCEEDED集群元数据超过配额上限
527MEASUREMENT_ALREADY_EXISTS_IN_TEMPLATE元数据模板中已存在物理量
600SYSTEM_READ_ONLYIoTDB 系统只读
601STORAGE_ENGINE_ERROR存储引擎相关错误
602STORAGE_ENGINE_NOT_READY存储引擎还在恢复中,还不能接受读写操作
603DATAREGION_PROCESS_ERRORDataRegion 相关错误
604TSFILE_PROCESSOR_ERRORTsFile 处理器相关错误
605WRITE_PROCESS_ERROR写入相关错误
606WRITE_PROCESS_REJECT写入拒绝错误
607OUT_OF_TTL插入时间少于 TTL 时间边界
608COMPACTION_ERROR合并错误
609ALIGNED_TIMESERIES_ERROR对齐时间序列错误
610WAL_ERRORWAL 异常
611DISK_SPACE_INSUFFICIENT磁盘空间不足
700SQL_PARSE_ERRORSQL 语句分析错误
701SEMANTIC_ERRORSQL 语义错误
702GENERATE_TIME_ZONE_ERROR生成时区错误
703SET_TIME_ZONE_ERROR设置时区错误
704QUERY_NOT_ALLOWED查询语句不允许
705LOGICAL_OPERATOR_ERROR逻辑符相关错误
706LOGICAL_OPTIMIZE_ERROR逻辑优化相关错误
707UNSUPPORTED_FILL_TYPE不支持的填充类型
708QUERY_PROCESS_ERROR查询处理相关错误
709MPP_MEMORY_NOT_ENOUGHMPP 框架中任务执行内存不足
710CLOSE_OPERATION_ERROR关闭操作错误
711TSBLOCK_SERIALIZE_ERRORTsBlock 序列化错误
712INTERNAL_REQUEST_TIME_OUTMPP 操作超时
713INTERNAL_REQUEST_RETRY_ERROR内部操作重试失败
714NO_SUCH_QUERY查询不存在
715QUERY_WAS_KILLED查询执行时被终止
800UNINITIALIZED_AUTH_ERROR授权模块未初始化
801WRONG_LOGIN_PASSWORD用户名或密码错误
802NOT_LOGIN没有登录
803NO_PERMISSION没有操作权限
804USER_NOT_EXIST用户不存在
805USER_ALREADY_EXIST用户已存在
806USER_ALREADY_HAS_ROLE用户拥有对应角色
807USER_NOT_HAS_ROLE用户未拥有对应角色
808ROLE_NOT_EXIST角色不存在
809ROLE_ALREADY_EXIST角色已存在
810ALREADY_HAS_PRIVILEGE已拥有对应权限
811NOT_HAS_PRIVILEGE未拥有对应权限
812CLEAR_PERMISSION_CACHE_ERROR清空权限缓存失败
813UNKNOWN_AUTH_PRIVILEGE未知权限
814UNSUPPORTED_AUTH_OPERATION不支持的权限操作
815AUTH_IO_EXCEPTION权限模块IO异常
900MIGRATE_REGION_ERRORRegion 迁移失败
901CREATE_REGION_ERROR创建 region 失败
902DELETE_REGION_ERROR删除 region 失败
903PARTITION_CACHE_UPDATE_ERROR更新分区缓存失败
904CONSENSUS_NOT_INITIALIZED共识层未初始化,不能提供服务
905REGION_LEADER_CHANGE_ERRORRegion leader 迁移失败
906NO_AVAILABLE_REGION_GROUP无法找到可用的 Region 副本组
907LACK_DATA_PARTITION_ALLOCATION调用创建数据分区方法的返回结果里缺少信息
1000DATANODE_ALREADY_REGISTEREDDataNode 在集群中已经注册
1001NO_ENOUGH_DATANODEDataNode 数量不足,无法移除节点或创建副本
1002ADD_CONFIGNODE_ERROR新增 ConfigNode 失败
1003REMOVE_CONFIGNODE_ERROR移除 ConfigNode 失败
1004DATANODE_NOT_EXIST此 DataNode 不存在
1005DATANODE_STOP_ERRORDataNode 关闭失败
1006REMOVE_DATANODE_ERROR移除 datanode 失败
1007REGISTER_DATANODE_WITH_WRONG_ID注册的 DataNode 中有错误的注册id
1008CAN_NOT_CONNECT_DATANODE连接 DataNode 失败
1100LOAD_FILE_ERROR加载文件错误
1101LOAD_PIECE_OF_TSFILE_ERROR加载 TsFile 片段异常
1102DESERIALIZE_PIECE_OF_TSFILE_ERROR反序列化 TsFile 片段异常
1103SYNC_CONNECTION_ERROR同步连接错误
1104SYNC_FILE_REDIRECTION_ERROR同步文件时重定向异常
1105SYNC_FILE_ERROR同步文件异常
1106CREATE_PIPE_SINK_ERROR创建 PIPE Sink 失败
1107PIPE_ERRORPIPE 异常
1108PIPESERVER_ERRORPIPE server 异常
1109VERIFY_METADATA_ERROR校验元数据失败
1200UDF_LOAD_CLASS_ERRORUDF 加载类异常
1201UDF_DOWNLOAD_ERROR无法从 ConfigNode 下载 UDF
1202CREATE_UDF_ON_DATANODE_ERROR在 DataNode 创建 UDF 失败
1203DROP_UDF_ON_DATANODE_ERROR在 DataNode 卸载 UDF 失败
1300CREATE_TRIGGER_ERRORConfigNode 创建 Trigger 失败
1301DROP_TRIGGER_ERRORConfigNode 删除 Trigger 失败
1302TRIGGER_FIRE_ERROR触发器执行错误
1303TRIGGER_LOAD_CLASS_ERROR触发器加载类异常
1304TRIGGER_DOWNLOAD_ERROR从 ConfigNode 下载触发器异常
1305CREATE_TRIGGER_INSTANCE_ERROR创建触发器实例异常
1306ACTIVE_TRIGGER_INSTANCE_ERROR激活触发器实例异常
1307DROP_TRIGGER_INSTANCE_ERROR删除触发器实例异常
1308UPDATE_TRIGGER_LOCATION_ERROR更新有状态的触发器所在 DataNode 异常
1400NO_SUCH_CQCQ 任务不存在
1401CQ_ALREADY_ACTIVECQ 任务已激活
1402CQ_AlREADY_EXISTCQ 任务已存在
1403CQ_UPDATE_LAST_EXEC_TIME_ERRORCQ 更新上一次执行时间失败

在最新版本中,我们重构了 IoTDB 的异常类。通过将错误信息统一提取到异常类中,并为所有异常添加不同的错误代码,从而当捕获到异常并引发更高级别的异常时,错误代码将保留并传递,以便用户了解详细的错误原因。
除此之外,我们添加了一个基础异常类“ProcessException”,由所有异常扩展。