[alibaba/tengine]健康检查模块:修复对正常mysql检查偶尔失败

2024-07-10 943 views
9

1.设备能通,但服务端口不通时,立即检测到失败,不用在等超时失败 2.mysql通过greeting信息检查,连接后read->handler可能早于write->handler,此时因为peer->state==NGX_HTTP_CHECK_CONNECT_DONE而read handler会不做事情,确保write handler后能再read

625

回答

7

有一个非常常见的认知错误,就是ngx_handle_read_event和ngx_handle_write_event一定会添加某个事件。这个理解是不对的。事实上,在epoll的条件下,这两个函数只会在没有添加过事件的条件下添加一次。之所以不会触发是因为工作在ET模式,已经触发过一次。

我觉得正确的改法是在send_handler里面判断r->ready==1以后直接调用read_handler,可以测试是不是工作正常。