Apache bRPC 1.17.0 版本已发布。这是一次包含重要功能更新的版本,在兼容性、性能与功能方面均有显著改进。
本次发布引入了 SingleIOBuf,用于实现高效的 FlatBuffers 序列化与反序列化,同时扩展了协议与传输能力,新增原生 Redis 集群通道、通信协议扩展传输层及 RDMA ECE 支持等重要能力,并进行了稳定性与模糊测试增强。
新功能
- 支持 RDMA ECE
- 支持使用 Protobuf v34+ 进行构建
- 为 TCP 传输事件分发器添加非调度标志,并修复 RDMA 事件分发器的非调度标志
- 支持原生 Redis ClusterChannel
- 新增限速backup request策略
- 新增错误率阈值用于惩罚衰减
- 支持自定义修改子控制器
- 添加传输层以支持更多通信协议扩展
- 支持为 SelectiveChannel 转移所属权
- 支持 bthread ConditionVariable 的断言等待
- 为 bthread 优先级队列添加标志开关,默认为关闭
- 新增 SingleIOBuf,用于高效的 flatbuffers 序列化与反序列化
Bug 修复
- 修复主任务 ASan 栈范围注册问题
- 修复备份请求响应隔离问题,并添加竞态回归测试
- 修复 Protobuf 低版本 (< 3.4.0) 下 ByteSizeLong() 和 SpaceUsedLong() 的兼容性
- 修复 AgentCombiner 析构中的堆释放后使用问题
- 修复客户端 RPC 路径中的时钟源不匹配问题
- 修复静态初始化期间 read_proc_status 导致的 SIGSEGV 错误
- 修复切换到 cpuwide_time_ns 后的 bvar 采样间隔问题
- 修正 process_util.h 注释中的错别字
- 修复 RDMA 资源相关问题
- 修复 EventDispatcher LatencyRecorder 的堆释放后使用问题
- 修复 aarch64 架构下 GNU-stack 注释后添加 .previous 的问题
- 修复 DoRead() 返回错误 errno 的问题
- 修复触发 backup request 时 attachment 被覆盖的问题
- 修复 CI 安装错误
- 移除 FreeBSD 平台文件中不存在的 tracked_objects.h 引用
- 修复流式创建批次期间,流在收到响应前关闭的问题
- 修复 Protobuf 版本对 descriptor->extension_range 的检查
- 修复传输层的一些问题
- 修复 async RPC 回调中使用智能指针管理 Span 生命周期,以防堆释放后使用
- 修复 CMAKE_CXX_FLAGS 导致的构建错误
- 修复扩展块池运行时问题
功能增强
- 为默认分支和发布分支设置默认规则集
- 在 steal 循环中使用 compare_exchange_weak 以潜在提升性能
- 移除未使用的 comp channel
- 在 bthread_join 中为 ARM 架构添加 acquire 内存屏障,保障内存可见性
- 全面使用单调时间替代墙上时间
- 为 config_brpc.sh 添加进度输出
- 修复 fuzz 测试套件阻塞问题,并扩展 fuzz 测试
- 优化 IOBuf Profiler
- 当到达流末尾时,跳过返回 true
- 为 Protobuf v22+ 显式链接 utf8_validity
- 通过检查 last_active_time 防止无限期延迟关闭
- 使批量创建流的 SendFeedback 线程安全
其他