@@ -37,8 +37,8 @@ static proxy_worker *internal_find_best_byrequests(request_rec *r, const proxy_b
3737 int i ;
3838
3939 for (i = 0 ; i < balancer -> workers -> nelts ; i ++ ) {
40- const nodeinfo_t * node ;
41- int id ;
40+ const nodeinfo_t * node , * node1 ;
41+ int id , id1 ;
4242 proxy_worker * worker = * ((proxy_worker * * )(ptr + i * sizew ));
4343
4444 if (!PROXY_WORKER_IS_USABLE (worker )) {
@@ -54,18 +54,22 @@ static proxy_worker *internal_find_best_byrequests(request_rec *r, const proxy_b
5454 }
5555 if (!mycandidate ) {
5656 mycandidate = worker ;
57- } else {
58- const nodeinfo_t * node1 ;
59- int id1 ;
60- node1 = table_get_node_route (node_table , mycandidate -> s -> route , & id1 );
61- if (node1 ) {
62- int lbstatus , lbstatus1 ;
63- lbstatus1 = ((mycandidate -> s -> elected - node1 -> mess .oldelected ) * 1000 ) / mycandidate -> s -> lbfactor ;
64- lbstatus = ((worker -> s -> elected - node -> mess .oldelected ) * 1000 ) / worker -> s -> lbfactor ;
65- if (lbstatus1 > lbstatus ) {
66- mycandidate = worker ;
67- }
57+ continue ;
58+ }
59+
60+ node1 = table_get_node_route (node_table , mycandidate -> s -> route , & id1 );
61+ if (node1 && mycandidate -> s -> lbfactor > 0 && worker -> s -> lbfactor > 0 ) {
62+ int lbstatus , lbstatus1 ;
63+ lbstatus1 = ((mycandidate -> s -> elected - node1 -> mess .oldelected ) * 1000 ) / mycandidate -> s -> lbfactor ;
64+ lbstatus = ((worker -> s -> elected - node -> mess .oldelected ) * 1000 ) / worker -> s -> lbfactor ;
65+ if (lbstatus1 > lbstatus ) {
66+ mycandidate = worker ;
6867 }
68+ } else {
69+ ap_log_error (
70+ APLOG_MARK , APLOG_DEBUG , 0 , r -> server ,
71+ "internal_find_best_byrequests: skipping node %d mycandidate->s->lbfactor %d worker->s->lbfactor %d" ,
72+ id1 , mycandidate -> s -> lbfactor , worker -> s -> lbfactor );
6973 }
7074 }
7175
0 commit comments