From 23964187aeee40af3733e86eaa17654fc77c9b6f Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Tue, 20 May 2014 20:56:30 +0200 Subject: [PATCH] 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. --- include/types/checks.h | 1 + src/checks.c | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/include/types/checks.h b/include/types/checks.h index 83ea2b510..d5038ebc8 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 d5216dd1d..fc7e77637 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) {