Skip to content

错误处理与可观测性

HDMapSDK 使用激活状态和查询 Status 区分数据准备、无数据、授权、生命周期和持久数据问题。路线关联与交通能力还需结合导航支持信号判断,不能由静态地图服务状态推断其可用性。

服务状态

Status 含义 应用处理
OK 调用成功 继续检查返回对象、数组和缺失值
InvalidParameter 输入参数非法 修复坐标、范围、ID 或配置
DataPending 数据正在准备或下载 仅对幂等查询执行有界重试
DataNotFound 当前版本、覆盖或缓存没有数据 进入无高精数据路径
Timeout 调用超过配置阈值 检查资源和网络后,在总截止时间内有限重试
ServiceUnavailable 服务尚不可用,或句柄已经调用 shutdown() 检查生命周期;不再向已关闭句柄提交请求
InternalError SDK 内部异常 停止受影响流程并记录脱敏上下文
NotActivated 激活尚未完成或无有效激活 恢复激活后重新创建服务
PermissionDenied 当前授权不允许使用 核对产品授权、设备身份和凭据
DataError 已持久化数据损坏 停止常规查询并执行受控数据恢复

仅在成功后读取输出

多个查询接口只在成功时赋值。每次调用使用独立输出对象;返回非 OK 时忽略其中内容。

激活状态

ActivationStatusCode 产品含义 应用处理
OK 激活有效 保存有效期并创建服务
Expired 授权已过期 恢复授权;仅按已批准策略处理受限缓存连续性
Forbidden 产品或设备被禁止 阻止启动并核对授权关系
Inactivated 设备尚未激活 确认网络和配置后重新激活
AuthenticationFailure 云端认证失败 检查凭据、系统时间、证书、端点和网络
InitFailure 请求字段或本地环境不完整 修复必填字段、目录或证书
ActivationFailure 激活流程失败 记录关联 ID 和脱敏上下文,按项目策略处理
InternalError / UnknownError 激活内部或未分类异常 检查连接与服务健康,有限重试并升级处理

导航支持状态

getMapVersion(...) 成功表示服务已选中地图版本,不表示目标区域一定有数据;RunningMode::Normal 也不表示导航支持连接、车辆/路线上下文或交通数据正在更新。

信号 表示 应用处理
is_connected_to_navigation_sdk == false 通信模块不可用 停止使用沿路线结果;交通按本次查询 Status 处理
is_navigation_sdk_notify_working == false 导航系统的位置/状态消息未持续到达 将现有路线状态视为历史值,等待输入恢复
非导航、偏航或不在路 当前没有可直接消费的有效导航走廊 清除或降级路线叠加,等待新的有效状态
LinkOnRoute::link_match_status 仍在处理或未匹配 道路级路线尚未关联到高精 Lane Group 不使用对应 Lane Group 范围
queryTraffic(...)OK 交通查询或关联未完成 按返回 Status 处理,不把空输出解释为畅通
queryTraffic(...)OK 且数组为空 当前没有返回可关联的交通内容 表示无消息,不等同于明确 FreeFlow

协作链路恢复后,从新的 NavigationStatus 重建路线状态,并使用新的交通查询结果更新交通状态。

有界重试

重试只用于幂等查询,并同时受以下条件约束:

  • 单请求总截止时间和取消信号;
  • 最大尝试次数、指数退避和抖动;
  • 网络或服务故障期间的全局并发预算;
  • 只处理 DataPending、部分 Timeout 或项目明确的可恢复错误;
  • 关闭开始后取消全部重试。
调用失败后的状态分类与有限重试流程

打开有界重试原图

日志接口

日志接口包括 setLogLevel(LogLevel)setLogHandler(LogHandler)LogMessage。调试构建默认级别为 Warning,发布构建默认为 Disabled

日志级别和处理回调是进程级共享配置,不属于单个 HDMapService 实例。应用设置唯一的日志生命周期所有者并串行调整配置;与 HDMapSDK 共享日志运行时的其他组件改变配置时,也会影响 HDMapSDK。

SDK 不指定日志回调所在线程。处理器需要线程安全、快速返回,不在回调路径执行磁盘压缩、网络上传或大块格式化。setLogHandler(...) 没有单独的注销接口,处理回调及其捕获上下文在 SDK 可能写日志期间保持有效。

敏感日志

初始化阶段的 Info 级诊断可能包含应用凭据、设备标识、端点和本地路径。量产使用项目批准的日志级别,并在导出前完成脱敏。

关闭期间的调用边界

  1. 停止提交新调用、重试和定时任务;
  2. 传入空 NavigationStatus 回调并检查设置结果,停止通知后再释放回调上下文;
  3. 调用 shutdown(),等待已经进入的 SDK 调用返回;
  4. shutdown() 返回后不再调用服务,确认应用任务和回调不再引用实例后释放句柄。

重复调用 shutdown() 没有额外效果。

DataError 恢复

DataError 表示持久数据损坏,通常不能通过查询重试恢复:

  1. 停止新请求并调用 shutdown()
  2. 保存 SDK/地图版本、返回状态、磁盘健康和脱敏日志;
  3. 按项目交付说明隔离损坏的缓存数据,保留激活回执;
  4. 重新安装预置数据或允许受控下载;
  5. 重新激活并创建服务,读取地图版本后重新执行空间查询。

服务重建后重新获取所有运行时 ID,不把损坏前的 LaneGroupIdLaneIdLaneBoundaryId 用于新查询。