sofastack / sofa-bolt

SOFABolt is a lightweight, easy to use and high performance remoting framework based on Netty.
https://www.sofastack.tech/projects/sofa-bolt/
Apache License 2.0
2.44k stars 860 forks source link

RpcClient发送大size的请求会返回CLIENT_SEND_ERROR #327

Closed ReycoLi closed 8 months ago

ReycoLi commented 1 year ago

场景: 我们在使用SofaJRaft(使用sofa bolt进行通信),因为开始时设计不当,导致在中间有一些size很大的raftLog, 大概每条Log的size在100MB左右,所以AppendEntriesRequest的payload会超过100MB, leader sofa bolt client发这条大request给新点的时候会返回 CLIENT_SEND_ERROR(rpcClient.invokeWithCallback),而且除此之外没有其他的error log. 这导致复制过程就会一直卡在这里

我看了一下sofa bolt好像没有关于request最大大小的配置,请问有什么建议吗?新手求教,万分感谢。

OrezzerO commented 1 year ago

理论上 body 最大4G (2^32 bytes),header 最大 64k (2^16 bytes) 没有其他限制. 可以考虑如下思路:

  1. 用一个简单的 DEMO 复现你的问题, 然后DEBUG ,或者找社区同学求助.
  2. 用 Wireshark 抓包, 分析抓包结果. (bolt 报文格式可以参考 com.alipay.remoting.rpc.protocol.RpcProtocol 类 )
  3. 看看是不是 header 达到了64k导致的