MINOR: log/balance: support for the "sticky" lb algorithm

sticky algorithm always tries to send log messages to the first server in
the farm. The server will stay in front during queue and dequeue
operations (no other server can steal its place), unless it becomes
unavailable, in which case it will be replaced by another server from
the tree.
This commit is contained in:
Aurelien DARRAGON 2023-09-21 20:24:14 +02:00 committed by Christopher Faulet
parent 9a74a6cb17
commit 26f73dbcbb
3 changed files with 19 additions and 1 deletions

View File

@ -8833,6 +8833,12 @@ log-balance <algorithm> [ <arguments> ]
fairest algorithm when the server's processing time remains
equally distributed.
sticky The first server in the list of available servers receives all
the log messages. When the server goes DOWN, the next server
in the list takes its place. When a previously DOWN server
goes back UP it is added at the end of the list so that the
sticky server doesn't change until it becomes DOWN.
<arguments> is an optional list of arguments which may be needed by some
algorithms.

View File

@ -2844,8 +2844,13 @@ int backend_parse_log_balance(const char **args, char **err, struct proxy *curpr
curproxy->lbprm.algo &= ~BE_LB_ALGO;
curproxy->lbprm.algo |= BE_LB_ALGO_RR;
}
else if (strcmp(args[0], "sticky") == 0) {
curproxy->lbprm.algo &= ~BE_LB_ALGO;
/* we use ALGO_FAS as "sticky" mode in log-balance context */
curproxy->lbprm.algo |= BE_LB_ALGO_FAS;
}
else {
memprintf(err, "only supports 'roundrobin' option");
memprintf(err, "only supports 'roundrobin', 'sticky' options");
return -1;
}
return 0;

View File

@ -2109,6 +2109,13 @@ static inline void __do_send_log_backend(struct proxy *be, struct log_header hdr
*/
targetid = HA_ATOMIC_FETCH_ADD(&be->lbprm.log.lastid, 1) % nb_srv;
}
else if ((be->lbprm.algo & BE_LB_ALGO) == BE_LB_ALGO_FAS) {
/* sticky mode: use first server in the pool, which will always stay
* first during dequeuing and requeuing, unless it becomes unavailable
* and will be replaced by another one
*/
targetid = 0;
}
skip_lb: