FengXingYuXin
FengXingYuXin
**What this PR does / why we need it**: cluster health check's threshold config not take effect. **Which issue(s) this PR fixes** *(optional, in `fixes #(, fixes #, ...)` format,...
Nginx reload过程中:[1]master进程从磁盘加载配置文件,[2]fork新的worker进程,[3]给旧worker发管道消息或信号进行关闭。如果在[1]和[3]之间有dyups请求request1更新内存,那么一定概率是被旧worker处理。 而Dyups模块对于共享内存中的消息队列&进程状态在worker init时处理方式是:重新初始化。 这就会导致新worker无法及时同步到request1的变更,最近公司生产环境遇到了这个问题。关于这块的设计,作者当时是如何思考的呢?是否有改善策略? 还请指教。
修复 https://github.com/alibaba/tengine/issues/1944 中的问题
问题描述: 升级Nginx版本到1.25.3以后,Tengine dyups模块在更新upstream数据时,如果IP比较多,比如500个+,会出现dyups失败的现象。通过gdb调试,发现是dyups模块在ngx_http_dyups_read_body中没有读到完整的body数据导致。 追查了下Nginx相关changelog,发现在1.19.2中针对chunk相关做了很多优化,可以参考 https://github.com/nginx/nginx/commit/9edc93fe0ed60bac336d11f7d20d3c2ed9db3227#diff-2cd52ff90de8e452b238fca4c59dbd36268ad306bdc8a9eb30788e9d1963bfb4,优化中调整了body数据的处理方式,影响了dyups模块读body的正确性。