MEDIUM: check: server states and weight propagation re-work
The server state and weight was reworked to handle
"pending" values updated by checks/CLI/LUA/agent.
These values are commited to be propagated to the
LB stack.
In further dev related to multi-thread, the commit
will be handled into a sync point.
Pending values are named using the prefix 'next_'
Current values used by the LB stack are named 'cur_'
diff --git a/src/stream.c b/src/stream.c
index d6c1229..a2c83b0 100644
--- a/src/stream.c
+++ b/src/stream.c
@@ -696,7 +696,7 @@
*/
if (objt_server(s->target) &&
(s->be->options & PR_O_REDISP) && !(s->flags & SF_FORCE_PRST) &&
- ((__objt_server(s->target)->state < SRV_ST_RUNNING) ||
+ ((__objt_server(s->target)->cur_state < SRV_ST_RUNNING) ||
(((s->be->redispatch_after > 0) &&
((s->be->conn_retries - si->conn_retries) %
s->be->redispatch_after == 0)) ||
@@ -1297,7 +1297,7 @@
if (ret) {
struct server *srv = rule->srv.ptr;
- if ((srv->state != SRV_ST_STOPPED) ||
+ if ((srv->cur_state != SRV_ST_STOPPED) ||
(px->options & PR_O_PERSIST) ||
(s->flags & SF_FORCE_PRST)) {
s->flags |= SF_DIRECT | SF_ASSIGNED;
@@ -1383,7 +1383,7 @@
struct server *srv;
srv = container_of(node, struct server, conf.id);
- if ((srv->state != SRV_ST_STOPPED) ||
+ if ((srv->cur_state != SRV_ST_STOPPED) ||
(px->options & PR_O_PERSIST) ||
(s->flags & SF_FORCE_PRST)) {
s->flags |= SF_DIRECT | SF_ASSIGNED;