Repository navigation
3.0: local proxies and contract-aware call admission (#775) - #802
SunSi12138 wants to merge 1 commit into
Conversation
… for 3.0 (#775) Pure local proxy construction; bounded deadline-aware waits; immutable session and registration validation across all RPC shapes; protocol5 fail-closed identity envelopes; server pre-decode admission and collectible lifecycle regression coverage. Reviewed source tree identical to local 8a9bae36094e23213165ced6fd2e961a0a665c09. Canonical CI validation pending.
|
已验证远端 production head 精确 source 验证使用单独 workflow-only 分支,definition commit 为 运行中:
OneWay 是保留原始测量的性能证据,不是新增或放宽的 regression budget;空报告/零执行不会被当作成功。PR 保持 Draft,待最终结果。 |
|
正常 PR 的 6 个 workflow 已全部通过。第一轮 exact-source Quick/Extended 的主 job 也通过,包含完整 tests、NativeAOT transport/topology、packages、load 和 Chaos;但整体验证尚未完成:新增 provenance 检查在 macOS 缺少 sha256sum、Windows CRLF checkout 上失败,现已改为 Python 校验 canonical Git blob bytes,保留 exact HEAD / clean tree / 4 个 SHA256 断言。 另一个验证 wrapper 问题是 OneWay 使用 65536 invocation override,超过 benchmark 原有 4096,导致 base/head 都达到既有 8MiB send queue 上限、无有效结果。失败原始证据保留,严格 validator 正确拒绝;没有提高 queue budget。现恢复 canonical 4096,其他参数不变。该 benchmark 仅反映 sender-side queued completion,不证明逐条服务端接收/派发吞吐;继承的两个 PayloadSize 行不是两个不同 OneWay payload。 独立 review 后发布 workflow-only definition 首轮 exact-source allocation 的 4 项既有预算与 spread 检查均通过;+512 B/op negative control 按预期失败。PR 继续保持 Draft。 |
|
最新验证补充(production 仍为
证据:
所有对照固定 base |
|
设计方向已调整。现以 Issue #775 的新设计 为后续实现基线;本 PR 不再推进,也不合并。 新边界:
关闭原因是架构方案需要重新划分职责,不是宣称已经证明 OneWay 回退由 ContractManifest 检查造成。 本 PR 已完成的功能/CI/真实 transport 证据保留;其 OneWay sender-side 对照中 head/base ~1.88–1.91 的耗时信号仍是后续实现的性能回归参考。该指标不等于服务端接收吞吐,尚未证明具体根因。 后续实现从当时最新 |
关联
Refs #775。此 PR 在完整验证前保持 Draft,不将已写实现或测试等同于验收完成。
实现
CreateProxy<T>(options)/Get<T>()仅进行本地构造;代理冻结本地契约与注册代次,调用时才选择远端。FailFast返回结构化观察;WaitForCompatible事件驱动等待,1024 个共享等待槽覆盖调用和显式 readiness waiter。等待、重试、背压及响应共享原始逻辑 deadline。GetContractReadiness/WaitForContractAsync显式区分缺失、尚未观察、不兼容、兼容、不可用与停止;多集群 API 保持指定 cluster 的边界。重要兼容边界
版本目标为 3.0.0。生成代理工厂签名和 RpcMethodDescriptor 的 32-byte unmanaged 布局保持不变,requirement 通过内部 bound-channel 重载传递。直接把 client 转为未绑定 IRpcChannel 后以任意 codec/ID 调用会被拒绝,避免旧 codec 偷换为当前注册的 hash;请使用 CreateProxy/Get。
当前验证状态
基线:
eb99fe887cf2129d9b88441245ca0a4a6406b6c2。git diff --check。4f9295ffb37ce68985051c11bfd9afc0e23166f3);未修改版本递增策略。最终本地 Unit 2065/2093、Integration 408/458 通过;其余分别 28/50 项均受本地 Unix socket/named-pipe 限制。完整运行发现的 3 项兼容行为/fixture 问题已修复,5 项针对性回归及完整 suite 的对应测试均通过。NativeAOT 原生发布与规范 formatter 同受该执行环境 IPC 限制;managed TCP admission smoke 通过不替代 NativeAOT 证据。以上未勾选阶段仍未完成,等待最终精确 head 的 CI。
已写回归包含五种调用形状、延迟广播下不发 payload、混合 endpoint、同 hash/不同 registration、独立 registry timeline、容量、取消/停止/deadline、真实 TCP stale-wire 预激活拒绝、stream pinning、retry re-admission 与本地 retirement/ALC。
远端 production head:
3aedcfc71e85a43fa71a266b7fd0e6d18939d4ff;tree 与独立 review 的本地8a9bae36完全一致。最终 CI 链接将在验证运行后补齐。