Ticket #1103: mod_proxy.random.patch
| File mod_proxy.random.patch, 2.1 kB (added by llevesque, 18 months ago) |
|---|
-
src/mod_proxy.c
57 57 typedef enum { 58 58 PROXY_BALANCE_UNSET, 59 59 PROXY_BALANCE_FAIR, 60 PROXY_BALANCE_RANDOM, 60 61 PROXY_BALANCE_HASH, 61 62 PROXY_BALANCE_RR 62 63 } proxy_balance_t; … … 221 222 s->balance = PROXY_BALANCE_FAIR; 222 223 } else if (buffer_is_equal_string(p->balance_buf, CONST_STR_LEN("fair"))) { 223 224 s->balance = PROXY_BALANCE_FAIR; 225 } else if (buffer_is_equal_string(p->balance_buf, CONST_STR_LEN("random"))) { 226 s->balance = PROXY_BALANCE_RANDOM; 224 227 } else if (buffer_is_equal_string(p->balance_buf, CONST_STR_LEN("round-robin"))) { 225 228 s->balance = PROXY_BALANCE_RR; 226 229 } else if (buffer_is_equal_string(p->balance_buf, CONST_STR_LEN("hash"))) { 227 230 s->balance = PROXY_BALANCE_HASH; 228 231 } else { 229 232 log_error_write(srv, __FILE__, __LINE__, "sb", 230 "proxy.balance has to be one of: fair, r ound-robin, hash, but not:", p->balance_buf);233 "proxy.balance has to be one of: fair, random, round-robin, hash, but not:", p->balance_buf); 231 234 return HANDLER_ERROR; 232 235 } 233 236 … … 1055 1058 unsigned long last_max = ULONG_MAX; 1056 1059 int max_usage = INT_MAX; 1057 1060 int ndx = -1; 1061 int rand_ndx, active_hosts; 1058 1062 size_t k; 1059 1063 buffer *fn; 1060 1064 data_array *extension = NULL; … … 1173 1177 } 1174 1178 1175 1179 break; 1180 case PROXY_BALANCE_RANDOM: 1181 /* random balancing */ 1182 if (p->conf.debug) { 1183 log_error_write(srv, __FILE__, __LINE__, "s", 1184 "proxy - used random balancing"); 1185 } 1186 1187 active_hosts = 0; 1188 1189 for (k = 0; k < extension->value->used; k++) { 1190 data_proxy *host = (data_proxy *)extension->value->data[k]; 1191 1192 if (host->is_disabled) continue; 1193 1194 active_hosts++; 1195 } 1196 1197 rand_ndx = (int) (1.0 * active_hosts * rand()/(RAND_MAX)); 1198 1199 active_hosts = 0; 1200 for (k = 0, ndx = -1; k < extension->value->used; k++) { 1201 data_proxy *host = (data_proxy *)extension->value->data[k]; 1202 1203 if (host->is_disabled) continue; 1204 1205 if (rand_ndx == active_hosts++) { 1206 ndx = k; 1207 break; 1208 } 1209 } 1210 1211 break; 1176 1212 case PROXY_BALANCE_RR: 1177 1213 /* round robin */ 1178 1214 if (p->conf.debug) {

