From: Willy Tarreau Date: Tue, 20 May 2014 18:56:30 +0000 (+0200) Subject: MINOR: checks: support a neutral check result X-Git-Tag: v1.5-dev26~12 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=23964187aeee40af3733e86eaa17654fc77c9b6f;p=thirdparty%2Fhaproxy.git MINOR: checks: support a neutral check result Agent will have the ability to return a weight without indicating an up/down status. Currently this is not possible, so let's add a 5th result CHK_RES_NEUTRAL for this purpose. It has been mapped to the unused HCHK_STATUS_CHECKED which already serves as a neutral delimitor between initiated checks and those returning a result. --- diff --git a/include/types/checks.h b/include/types/checks.h index 83ea2b510f..d5038ebc81 100644 --- a/include/types/checks.h +++ b/include/types/checks.h @@ -29,6 +29,7 @@ */ enum chk_result { CHK_RES_UNKNOWN = 0, /* initialized to this by default */ + CHK_RES_NEUTRAL, /* valid check but no status information */ CHK_RES_FAILED, /* check failed */ CHK_RES_PASSED, /* check succeeded and server is fully up again */ CHK_RES_CONDPASS, /* check reports the server doesn't want new sessions */ diff --git a/src/checks.c b/src/checks.c index d5216dd1db..fc7e776375 100644 --- a/src/checks.c +++ b/src/checks.c @@ -66,6 +66,8 @@ static const struct check_status check_statuses[HCHK_STATUS_SIZE] = { [HCHK_STATUS_INI] = { CHK_RES_UNKNOWN, "INI", "Initializing" }, [HCHK_STATUS_START] = { /* SPECIAL STATUS*/ }, + /* Below we have finished checks */ + [HCHK_STATUS_CHECKED] = { CHK_RES_NEUTRAL, "CHECKED", "No status change" }, [HCHK_STATUS_HANA] = { CHK_RES_FAILED, "HANA", "Health analyze" }, [HCHK_STATUS_SOCKERR] = { CHK_RES_FAILED, "SOCKERR", "Socket error" }, @@ -232,6 +234,10 @@ static void set_server_check_status(struct check *check, short status, const cha tv_zero(&check->start); } + /* no change is expected if no state change occurred */ + if (check->result == CHK_RES_NEUTRAL) + return; + report = 0; switch (check->result) {