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/lb_fas.c b/src/lb_fas.c
index 6027dac..f8e739b 100644
--- a/src/lb_fas.c
+++ b/src/lb_fas.c
@@ -80,15 +80,15 @@
if (!srv_lb_status_changed(srv))
return;
- if (srv_is_usable(srv))
+ if (srv_willbe_usable(srv))
goto out_update_state;
- if (!srv_was_usable(srv))
+ if (!srv_currently_usable(srv))
/* server was already down */
goto out_update_backend;
if (srv->flags & SRV_F_BACKUP) {
- p->lbprm.tot_wbck -= srv->prev_eweight;
+ p->lbprm.tot_wbck -= srv->cur_eweight;
p->srv_bck--;
if (srv == p->lbprm.fbck) {
@@ -100,11 +100,11 @@
srv2 = srv2->next;
} while (srv2 &&
!((srv2->flags & SRV_F_BACKUP) &&
- srv_is_usable(srv2)));
+ srv_willbe_usable(srv2)));
p->lbprm.fbck = srv2;
}
} else {
- p->lbprm.tot_wact -= srv->prev_eweight;
+ p->lbprm.tot_wact -= srv->cur_eweight;
p->srv_act--;
}
@@ -132,16 +132,16 @@
if (!srv_lb_status_changed(srv))
return;
- if (!srv_is_usable(srv))
+ if (!srv_willbe_usable(srv))
goto out_update_state;
- if (srv_was_usable(srv))
+ if (srv_currently_usable(srv))
/* server was already up */
goto out_update_backend;
if (srv->flags & SRV_F_BACKUP) {
srv->lb_tree = &p->lbprm.fas.bck;
- p->lbprm.tot_wbck += srv->eweight;
+ p->lbprm.tot_wbck += srv->next_eweight;
p->srv_bck++;
if (!(p->options & PR_O_USE_ALL_BK)) {
@@ -162,7 +162,7 @@
}
} else {
srv->lb_tree = &p->lbprm.fas.act;
- p->lbprm.tot_wact += srv->eweight;
+ p->lbprm.tot_wact += srv->next_eweight;
p->srv_act++;
}
@@ -195,8 +195,8 @@
* possibly a new tree for this server.
*/
- old_state = srv_was_usable(srv);
- new_state = srv_is_usable(srv);
+ old_state = srv_currently_usable(srv);
+ new_state = srv_willbe_usable(srv);
if (!old_state && !new_state) {
srv_lb_commit_status(srv);
@@ -215,10 +215,10 @@
fas_dequeue_srv(srv);
if (srv->flags & SRV_F_BACKUP) {
- p->lbprm.tot_wbck += srv->eweight - srv->prev_eweight;
+ p->lbprm.tot_wbck += srv->next_eweight - srv->cur_eweight;
srv->lb_tree = &p->lbprm.fas.bck;
} else {
- p->lbprm.tot_wact += srv->eweight - srv->prev_eweight;
+ p->lbprm.tot_wact += srv->next_eweight - srv->cur_eweight;
srv->lb_tree = &p->lbprm.fas.act;
}
@@ -245,7 +245,7 @@
p->lbprm.wdiv = BE_WEIGHT_SCALE;
for (srv = p->srv; srv; srv = srv->next) {
- srv->eweight = (srv->uweight * p->lbprm.wdiv + p->lbprm.wmult - 1) / p->lbprm.wmult;
+ srv->next_eweight = (srv->uweight * p->lbprm.wdiv + p->lbprm.wmult - 1) / p->lbprm.wmult;
srv_lb_commit_status(srv);
}
@@ -257,7 +257,7 @@
/* queue active and backup servers in two distinct groups */
for (srv = p->srv; srv; srv = srv->next) {
- if (!srv_is_usable(srv))
+ if (!srv_currently_usable(srv))
continue;
srv->lb_tree = (srv->flags & SRV_F_BACKUP) ? &p->lbprm.fas.bck : &p->lbprm.fas.act;
fas_queue_srv(srv);