SundayT1998/milvus-client/errors does not have a README file

    MerError

    pub suberror MerError {
    RpcError(code~ : Int, legacy_code~ :
    ErrorCode
    , message~ : String, detail~ : String, retriable~ : Bool, input~ : Bool)
    }

    Milvus RPC 错误的客户端模型。

    与上游 merr.RPCError 一一对应:同一个 Milvus code 视为同一个错误, 双轨错误码(modern code + legacy ErrorCode)整体保留,不简化。

    构造用带标签的语法;典型路径是 from_status,需要手工造错时用 预定义值加 wrap_*:

    let err = @errors.wrap_err_collection_not_found("demo")
    raise err

    也可以直接构造:

    raise RpcError(
    code=100,
    legacy_code=@common.ErrorCode::CollectionNotExists,
    message="collection not found",
    detail="collection not found",
    retriable=false,
    input=false,
    )
    impl Show for MerError

    MerError::code

    fn MerError::code(self : MerError?) -> Int

    取错误码。与上游 merr.Code 一致;None 等价于上游的 err == nil。

    MerError::detail

    fn MerError::detail(self : MerError?) -> String

    取服务端下发的详细错误信息。

    MerError::is_input_error

    fn MerError::is_input_error(self : MerError?) -> Bool

    服务端是否把该错误归类为输入错误。

    MerError::is_retryable

    fn MerError::is_retryable(self : MerError?) -> Bool

    服务端是否标记该错误可重试。这正是上游 IsRetryableErr 的语义: 只看 Status.retriable,不做本地猜测。

    MerError::legacy_code

    取 legacy 错误码。None 视为 Success。

    MerError::same_code

    fn MerError::same_code(self : MerError, other : MerError) -> Bool

    依据 Milvus code 判断两个错误是否同类,对应上游 RPCError.Is (errors.Is 靠 code 匹配,而不是靠错误文本)。

    canceled_code

    let canceled_code : Int

    Milvus 客户端错误码常量。

    code 是 modern 数值码(Status.code),canceled / timeout 是上游 merr 为 Go context 错误保留的本地码,不属于 Milvus 服务端。

    err_collection_not_found

    fn err_collection_not_found() -> MerError

    err_collection_schema_mismatch

    fn err_collection_schema_mismatch() -> MerError

    err_index_not_found

    fn err_index_not_found() -> MerError

    err_parameter_invalid

    fn err_parameter_invalid() -> MerError

    err_parameter_missing

    fn err_parameter_missing() -> MerError

    err_service_internal

    fn err_service_internal() -> MerError

    err_service_not_ready

    fn err_service_not_ready() -> MerError

    预定义错误值,与上游 merr 的命名变量一一对应。

    这些值用于 same_code 比对与包装(wrap_*), 语义与 Go 版的 ErrCollectionNotFound 等完全一致。

    err_service_unimplemented

    fn err_service_unimplemented() -> MerError

    err_unexpected

    fn err_unexpected() -> MerError

    未知错误的兜底值,对应上游 errUnexpected(码 65535)。

    error_code

    fn error_code(err : MerError?) -> Int

    取错误码。与上游 merr.Code 一致;None 等价于上游的 err == nil。

    error_detail

    fn error_detail(err : MerError?) -> String

    取服务端下发的详细错误信息。

    error_legacy_code

    取 legacy 错误码。None 视为 Success。

    from_status

    Milvus Status → MerError,对应上游 merr.Error。

    双轨码的补齐规则与上游完全一致:
    • code == 0 时用 legacy 推导 modern 码
    • legacy 为 Success 时用 modern 码反推 legacy

    成功状态返回 None(上游返回 nil)。reason 与 detail 都过一遍脱敏。

    input_error_flag_key

    let input_error_flag_key : String

    Status.extra_info 中标记「输入错误」的键,与上游 inputErrorFlagKey 一致。

    is_input_error

    fn is_input_error(err : MerError?) -> Bool

    服务端是否把该错误归类为输入错误。

    is_ok

    Status 是否代表成功,对应上游 merr.Ok。

    两个字段都要满足:error_code == Success 且 code == 0。 None 视为成功(上游对 nil Status 返回 true)。

    is_retryable_err

    fn is_retryable_err(err : MerError?) -> Bool

    服务端是否标记该错误可重试。这正是上游 IsRetryableErr 的语义: 只看 Status.retriable,不做本地猜测。

    这是给 retry 中间件看的唯一判据,等价于上游 merr.IsRetryableErr。

    legacy_code_from_modern

    modern 数值码 → legacy ErrorCode,逐条照搬上游 legacyCodeFromModern。

    未命中的数值码落到 UnexpectedError。

    modern_code_from_legacy

    legacy ErrorCode → modern 数值码,逐条照搬上游 modernCodeFromLegacy。

    未命中的 legacy 码落到 unexpected_code。

    redact

    fn redact(input : String) -> String

    错误信息脱敏。

    验收要求「错误信息中不泄露 token 等敏感 metadata」。Milvus 的 Status.detail 与 reason 由服务端拼装,可能回显请求侧的认证头或连接串。上游 Go 版没有这层, 这里补上,且是纯函数,不影响任何判定语义。

    规则:
    • Authorization: Bearer xxx / 裸 Bearer xxx → Bearer ***
    • token=xxx / password=xxx / api_key=xxx 等 key<分隔符>value → 值打码
    • URL userinfo(scheme://user:pass@host)里的口令段 → ***

    非敏感内容(主机名、端口、库名、字段名)原样保留,保证可调试。

    success

    成功状态,对应上游 merr.Success。

    timeout_code

    let timeout_code : Int

    to_status

    把 MerError? 还原成 Status,对应上游 merr.Status。

    主要给 mock 与测试用;None 返回成功 Status。

    unexpected_code

    let unexpected_code : Int

    上游 unexpectedCode:(1 << 16) - 1,未知错误统一落到这里。

    wrap_err_collection_not_found

    fn wrap_err_collection_not_found(collection : String, messages? : Array[String]) -> MerError

    wrap_err_collection_schema_mismatch

    fn wrap_err_collection_schema_mismatch(collection : String, messages? : Array[String]) -> MerError

    wrap_err_index_not_found

    fn wrap_err_index_not_found(index_name : String, messages? : Array[String]) -> MerError

    wrap_err_parameter_invalid

    fn wrap_err_parameter_invalid(expected : String, actual : String, messages? : Array[String]) -> MerError

    ErrParameterInvalid 带 expected / actual 的包装。

    wrap_err_parameter_invalid_err

    fn wrap_err_parameter_invalid_err(err : String, message : String) -> MerError

    把任意错误文本重新归为 ErrParameterInvalid,只保留文本、不保留原 code (上游 WrapErrParameterInvalidErr)。

    wrap_err_parameter_invalid_msg

    fn wrap_err_parameter_invalid_msg(message : String) -> MerError

    ErrParameterInvalid 的自由文本包装(上游 WrapErrParameterInvalidMsg)。

    wrap_err_parameter_missing_msg

    fn wrap_err_parameter_missing_msg(message : String) -> MerError

    wrap_err_service_internal

    fn wrap_err_service_internal(reason : String, messages? : Array[String]) -> MerError

    ErrServiceInternal 带 reason 的包装。

    wrap_err_service_not_ready

    fn wrap_err_service_not_ready(role : String, session_id : Int64, state : String, messages? : Array[String]) -> MerError

    ErrServiceNotReady 带 role / sessionID / state 的包装。