pub fn derive_grpc_conn_id(
bearer: Option<&str>,
session_id: Option<&str>,
) -> u64Expand description
派生 gRPC stable conn_id。
参数:
bearer:Bearer token(已经parse_bearer_scheme解出的纯 token,不含Bearer前缀)。None表示 legacy mode(无鉴权配置),此时全部 caller 共享同一 fallback id。session_id:可选grpc-session-idmetadata 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 行为一致)
算法:
- 用
DefaultHasher顺序 feed(domain_tag, bearer_or_legacy, session_or_empty) - 取低 62 bit
- OR 上
GRPC_STABLE_CONN_NAMESPACE(bit 62)
domain_tag 防止和其他 hash 用途碰撞(pitfall #25 idempotency 派生原则)。
不依赖项:不依赖 KeyStore 是否配置(caller 已做完 auth 才到这里);
不依赖 RPC proto_id(request() / subscribe_push() 共用同一身份,
这是 stateful sub 的目的)。