- add health check fix



git-svn-id: svn://svn.openwrt.org/openwrt/packages@36551 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
heil 2013-05-05 20:53:50 +00:00
parent 5c2fd6461b
commit c4ee8b1e3e
2 changed files with 46 additions and 1 deletions

View File

@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=haproxy
PKG_VERSION:=1.4.23
PKG_RELEASE:=03
PKG_RELEASE:=04
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://haproxy.1wt.eu/download/1.4/src

View File

@ -0,0 +1,45 @@
From 1181ad3ea9d73908b0238702032eccaeb8834a1a Mon Sep 17 00:00:00 2001
From: Willy Tarreau <w@1wt.eu>
Date: Fri, 26 Apr 2013 11:43:56 +0200
Subject: [PATCH 2/2] BUG/MEDIUM: checks: disable TCP quickack when pure TCP
checks are used
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cyril Bonté reported an issue with some services when pure port probes are
used since 1.4.23, because of the RST which is sent and sometimes caught by
the checked service. The result is that the service detects an error and may
sometimes log this error or complain about it. This issue does not appear
when "option tcp-smart-connect" is set.
So we now perform exactly like 1.5 with port probes, which means that we set
the TCP quickack mode on the socket before connecting, so that the final ACK
is never sent. So the sequence is now a clean SYN-SYN/ACK-RST which never
wakes the application up and that only checks that the port is open.
---
src/checks.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/src/checks.c b/src/checks.c
index e586e4c..9813914 100644
--- a/src/checks.c
+++ b/src/checks.c
@@ -1388,8 +1388,13 @@ struct task *process_chk(struct task *t)
/* disabling tcp quick ack now allows
* the request to leave the machine with
* the first ACK.
+ * We also want to do this to perform a
+ * SYN-SYN/ACK-RST sequence when raw TCP
+ * checks are configured.
*/
- if (s->proxy->options2 & PR_O2_SMARTCON)
+ if ((s->proxy->options2 & PR_O2_SMARTCON) ||
+ (!(s->proxy->options & (PR_O_HTTP_CHK|PR_O_SMTP_CHK)) &&
+ !(s->proxy->options2 & (PR_O2_SSL3_CHK|PR_O2_MYSQL_CHK|PR_O2_LDAP_CHK))))
setsockopt(fd, IPPROTO_TCP, TCP_QUICKACK, (char *) &zero, sizeof(zero));
#endif
if ((connect(fd, (struct sockaddr *)&sa, sizeof(sa)) != -1) || (errno == EINPROGRESS)) {
--
1.8.1.5