Skip to main content

derive_grpc_conn_id

Function derive_grpc_conn_id 

Source
pub fn derive_grpc_conn_id(
    bearer: Option<&str>,
    session_id: Option<&str>,
) -> u64
Expand description

派生 gRPC stable conn_id。

参数

  • bearer:Bearer token(已经 parse_bearer_scheme 解出的纯 token,不含 Bearer 前缀)。None 表示 legacy mode(无鉴权配置),此时全部 caller 共享同一 fallback id。
  • session_id:可选 grpc-session-id metadata header 值;用于同一 caller 想运行多个独立 stream / sub-state 时区分。空 "" 视同 None

返回:u64 stable conn_id,bit 62 必置位(在 GRPC_STABLE_CONN_NAMESPACE 内)。同输入 → 同输出(process-stable,单 daemon 进程内幂等;不依赖跨 Rust 版本 / 跨 process hash 稳定性,这对 conn_id 用途已足够)。

隔离语义

  • 同 bearer + 同 session → 同 conn_id(连续 RPC 命中同一 sub state)
  • 同 bearer + 不同 session → 不同 conn_id(独立 sub state)
  • 不同 bearer → 不同 conn_id(caller 之间天然隔离)
  • bearer=None + session=任意 → 仍 deterministic(legacy 同 caller 行为一致)

算法

  1. DefaultHasher 顺序 feed (domain_tag, bearer_or_legacy, session_or_empty)
  2. 取低 62 bit
  3. OR 上 GRPC_STABLE_CONN_NAMESPACE(bit 62)

domain_tag 防止和其他 hash 用途碰撞(pitfall #25 idempotency 派生原则)。

不依赖项:不依赖 KeyStore 是否配置(caller 已做完 auth 才到这里); 不依赖 RPC proto_id(request() / subscribe_push() 共用同一身份, 这是 stateful sub 的目的)。