| <!-- |
| |
| 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. |
| |
| --> |
| |
| # 状态码 |
| |
| 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|服务器内部错误| |
| |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|SchemaFile 中 Page 空间不够| |
| |519|RECORD_DUPLICATED|记录重复| |
| |520|SEGMENT_OUT_OF_SPACE|SchemaFile 中 segment 空间不够| |
| |521|SCHEMA_FILE_NOT_EXISTS|SchemaFile 不存在| |
| |522|OVERSIZE_RECORD|记录大小超过元数据文件页面大小| |
| |523|SCHEMA_FILE_REDO_LOG_BROKEN|SchemaFile 的 redo 日志损坏| |
| |524|TEMPLATE_NOT_ACTIVATED|元数据模板未激活| |
| |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|内部操作重试失败| |
| |800|AUTHENTICATION_ERROR|权限认证失败| |
| |801|WRONG_LOGIN_PASSWORD|用户名或密码错误| |
| |802|NOT_LOGIN|没有登录| |
| |803|NO_PERMISSION|没有操作权限| |
| |804|UNINITIALIZED_AUTH_ERROR|授权人未初始化| |
| |805|USER_NOT_EXIST|用户不存在| |
| |806|ROLE_NOT_EXIST|角色不存在| |
| |807|CLEAR_PERMISSION_CACHE_ERROR|清空权限缓存失败| |
| |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 副本组| |
| |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”,由所有异常扩展。 |