sofa-jraft
sofa-jraft copied to clipboard
sofa-jraft依赖的grpc1.17.0版本老旧而且缺陷多,建议升级依赖版本
Describe the bug
grpc 1.17.0 以及其依赖的很多组件版本都有很多缺陷,其中比较严重的是grpc-java 1.28之前的版本所依赖的netty存在的Received DATA frame for an unknown stream缺陷。 sofa-jraft 1.3.9和修复缺陷后的grpc并不兼容,运行过程中要么提示类找不到,要么提示属性不存在,建议做一下新版本兼容性升级。
1.31 以上拿不到 netty channel,没办法绑定连接(raft log pipeline 复制需要),如果 1.30 满足需求可以升级 1.30 试试, 1.31 以上的兼容性还要再想想办法
这个nacos也用到类似的方式获取channel
private Channel getInternalChannel(ServerCall serverCall) {
ServerStream serverStream = (ServerStream) ReflectUtils.getFieldValue(serverCall, "stream");
return (Channel) ReflectUtils.getFieldValue(serverStream, "channel");
}
但低版本的有一些严重的安全问题,升级之后,NettyServerStream 里面已经没有了channel。 但可以通过对WriteQueue writeQueue进一步反射获取。 但这种解决不了根本的问题。
#672 看起来短期内应该也无法完成,是否能我这边提交一个PR, 先多进行一层反射,先取到WriteQueue中的channel,适配上新版本grpc,不然旧版本卡着也不是一个办法。 同样Nacos这边也先进性多一层反射。