baidu / sofa-pbrpc

A light-weight RPC implement of google protobuf RPC framework.
Other
2.13k stars 655 forks source link

sofa-pbrpc去boost依赖 #140

Open zd-double opened 7 years ago

zd-double commented 7 years ago

背景

当前一些依赖sofa-pbrpc的应用程序同时也依赖了boost,rpc依赖的boots如果和应用程序依赖的boost没有版本打平会造成一些不可预期的结果,之前出现过此类问题,而且问题追查也十分困难。

方案

从boost中抠出一个rpc依赖的最小子集放在src下的单独目录,之后的rpc不再依赖外部的boost库。

排期

11.7 -11.11: 完成开发自测,提交pr; 11.11-11.18: pr完善和修改,合入;

qinzuoyan commented 7 years ago

避免这个问题有两个办法:

zd-double commented 7 years ago

@qinzuoyan 谢谢左言,剥离出来的boost的namespace也会修改为rpc的namespace。

qinzuoyan commented 7 years ago

赞,不过这也有一个弊端,就是没法跟进boost的更新,譬如bug-fix等,除非定期同步升级代码。 有个建议,开两个branch:

cyshi commented 7 years ago

赞同 可以搞两个分支

另外 @zd-double 明确下准备使用哪个版本的boost?

bluebore commented 7 years ago

赞~ 完全不依赖boost的版本,需要讲boost代码合入我们的主干,所以建议慎重选个稳定的boost版本。

zd-double commented 7 years ago

rpc去boost方案

选用boost版本:1.58.0

  1. rpc对boost的主要依赖模块为asio、date_time、multi_index等,boost1.58对asio中c++11和clong编译的一些问题进行修复,且在1.58之后的版本中这些模块没有新的修改,可以看出比较稳定。
  2. 当前最新版本1.62在今年9月份发布,过新的版本存在隐藏问题的可能性更大,1.58版本在15年4月发布。

执行方案 分两个分支: 完全不依赖boost:抽出的boost在src目录下,使用sofa::pbrpc的namespace。

  1. 采用boost工具bcp,自动将rpc依赖的头文件及依赖的代码抽取出来得到初步的依赖子集,大小20M左右。
  2. 对抽出的boost代码进一步精简,去除windows平台相关的文件和代码。
  3. 使用脚本对精简后的boost 替换namespace为sofa::pbrpc。
  4. boost放在src下和 rapidjson 、sofa同级。

完全依赖boost:将之前抽出的smart_ptr和system_error的内容去掉,仍旧依赖boost的实现。

维护方案: 将依赖boost的版本设为master,不依赖boost的作为另一个分支。

  1. 已有的master用户已经依赖boost。
  2. 默认情况下自己配置boost版本。

之后维护两个分支,功能升级需要更新到两个分支上去。

@cyshi @bluebore @qinzuoyan 大家看看有什么意见?

cyshi commented 7 years ago

我觉得将不依赖boost的版本作为master是不是更好,因为长期看倾向于让用户选择不依赖的版本,我们应该也不会长时间的维护两个分支

另外对于之后boost升级或者bug fix这部分是怎么打算的?

cyshi commented 7 years ago

gitter 这也可以讨论问题 github账户登录 而且实时性更好 github上的动态也会同步到上面 讨论也可以长久保留

qinzuoyan commented 7 years ago

@zd-double ,我觉得挺好。有一点小建议:既然抽出来的boost代码放在sofa::pbrpc的namespace,那么相应的源代码应当放在src/sofa/pbrpc下面吧,而不应当与sofa同级,可以参考现有的smart_ptr怎么做的。

cyshi commented 7 years ago

使用脚本对精简后的boost 替换namespace为sofa::pbrpc。

最好不要直接修改boost的命名空间 统一在boost之外包裹一层sofa::pbrpc

zd-double commented 7 years ago

sofa-pbrpc去boost版本的暂时放在这里,大家review一下给点意见。 实现上主要有几点:

  1. rpc依赖的boost代码位于 src/sofa/pbrpc/boost下,采用sofa::pbrpc::boost的命名空间
  2. src/sofa/pbrpc/boost下代码中防止重复编译的ifndef宏采用SOFA_PBRPC作为前缀。
  3. 由于rpc暴露给用户的头文件中存在shared_ptr,如rpc_channel.h、 rpc_client.h等,暂时将高度精简的boost下的smart_ptr也最终拷到output下,目录层级为sofa/pbrpc/boost/smart_ptr。
cyshi commented 7 years ago

可以先放分支下

00k commented 7 years ago

no-boost分支可以发布一个release吗?

cyshi commented 7 years ago

@zd-double 测试如何了