}
/*------ DEBUG LOG END ------*/
- //is real server connected?
if (-1 != conn->riom->fd) {
- // check sorry status of service
- // argment 0 means no connection count check
+ // Connection to real/sorry server is already ESTABLISHED
+
+ // Check force-sorry-flag and existance of real servers
sorry_state = l7vs_sched_sorry_check(conn->srv, 0);
if (sorry_state) {
- // check connect to sorry-server now
+ // force-sorry-flag is ON or no real servers
+
if (!conn->sorry_conn_flag) {
+ // Current connection is to real server,
+ // so change to connect to sorry server.
// get sorry-server destination (argment 0)
d = l7vs_sched_sorry_dest(conn->srv, conn, 0);
/*-------- DEBUG LOG --------*/
}
conn->sorry_conn_flag = 1;
}
+ else {
+ // Current connection is already changed to sorry server,
+ // so do nothing.
+ }
+
} else {
- // check connect to sorry-server now
+ // force-sorry-flag is OFF and real servers exist
+
if (conn->sorry_conn_flag) {
+ // Current connection is to sorry server,
+ // so change to connect to real server.
// get old real-server destination (argment 1)
d = l7vs_sched_sorry_dest(conn->srv, conn, 1);
/*-------- DEBUG LOG --------*/
if (ret == 0) {
// check sorry status if ret == 0
// sorry_check argument 1 means check connection count
+ // Check the connection count(--upper, maxconn)
if (l7vs_sched_sorry_check(srv, 1)) {
if (!sorry_save) {
// save sorry dest to xxx_tmp only first time
}
}
// when select_dest NG
+ // No suitable realservers exist
if (!sorry_save2) {
// save sorry dest to xxx_tmp2 only first time
srv_tmp2 = srv;
l = g_list_next(l);
}
+ // Over maximum connections
if (sorry_save) {
// saved sorry dest is exist
// set sorry-server destination
- //*dest_ret = (struct l7vs_dest *)l7vs_sched_sorry_dest(srv_tmp, NULL, 1);
*dest_ret = (struct l7vs_dest *)l7vs_sched_sorry_dest(srv_tmp, NULL, 0);
if (!*dest_ret) {
LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SORRY_SERVER,2, "sorry-server dest is NULL");
return -1;
}
*srv_ret = srv_tmp;
+ conn->old_dest = dest_tmp;
conn->cldata_len = len_tmp;
conn->sorry_conn_flag = 1;
val = 1;
+
+ // No suitable realservers exist
} else if (sorry_save2) {
// saved sorry dest2 is exist
// set sorry-server destination
- //*dest_ret = (struct l7vs_dest *)l7vs_sched_sorry_dest(srv_tmp2, NULL, 1);
*dest_ret = (struct l7vs_dest *)l7vs_sched_sorry_dest(srv_tmp2, NULL, 0);
if (!*dest_ret) {
LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SORRY_SERVER,3, "sorry-server dest is NULL");
return -1;
}
*srv_ret = srv_tmp2;
+ conn->old_dest = dest_tmp2;
conn->cldata_len = len_tmp2;
conn->sorry_conn_flag = 1;
val = 1;