}
/*------ DEBUG LOG END ------*/
conn->sorry_conn_flag = 0;
- conn->old_dest = NULL;
l7vs_iomux_add(conn->ciom, iom_read);
// connect real server immediately if all lsock services are fast schedule.
}
/*------ 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) {
- // get sorry-server destination (argment 0)
- d = l7vs_sched_sorry_dest(conn->srv, conn, 0);
+ // Current connection is to real server,
+ // so close the connection.
/*-------- DEBUG LOG --------*/
if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
- char sorry_dest_str1[DEBUG_STR_LEN] = {0};
- l7vs_dest_c_str(sorry_dest_str1, d);
- LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,116,
- "pointer_assign: d=%s",
- sorry_dest_str1);
+ LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,117,
+ "iom->status change: %d->%d",
+ iom->status, iomux_conn_disconnected);
}
/*------ DEBUG LOG END ------*/
- if (!d) {
- LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,18, "error / sorry-server dest NG");
- /*-------- DEBUG LOG --------*/
- if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
- LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,117,
- "iom->status change: %d->%d",
- iom->status, iomux_conn_rs_connect_error);
- }
- /*------ DEBUG LOG END ------*/
- iom->status = iomux_conn_rs_connect_error;
- /*-------- DEBUG LOG --------*/
- if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
- LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,118,
- "out_function: static int l7vs_conn_is_rs_connected("
- "struct l7vs_iomux *iom, struct l7vs_conn *conn, struct l7vs_service **srv, struct l7vs_dest **dest) "
- "return_value: 0");
- }
- /*------ DEBUG LOG END ------*/
- return 0;
- }
- conn->old_dest = conn->dest;
+ iom->status = iomux_conn_disconnected;
/*-------- DEBUG LOG --------*/
if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
- char old_dest_str[DEBUG_STR_LEN] = {0};
- l7vs_dest_c_str(old_dest_str, conn->old_dest);
- LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,119,
- "pointer_assign: conn->old_dest=%s",
- old_dest_str);
+ LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,118,
+ "out_function: static int l7vs_conn_is_rs_connected("
+ "struct l7vs_iomux *iom, struct l7vs_conn *conn, struct l7vs_service **srv, struct l7vs_dest **dest) "
+ "return_value: 0");
}
/*------ DEBUG LOG END ------*/
- // change connection to sorry-server
- if (!l7vs_conn_change_connect_rs(conn, d)) {
- LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,19, "error / change connection to Sorry NG");
- /*-------- DEBUG LOG --------*/
- if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
- LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,120,
- "iom->status change: %d->%d",
- iom->status, iomux_conn_rs_connect_error);
- }
- /*------ DEBUG LOG END ------*/
- iom->status = iomux_conn_rs_connect_error;
- /*-------- DEBUG LOG --------*/
- if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
- LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,121,
- "out_function: static int l7vs_conn_is_rs_connected("
- "struct l7vs_iomux *iom, struct l7vs_conn *conn, struct l7vs_service **srv, struct l7vs_dest **dest) "
- "return_value: 0");
- }
- /*------ DEBUG LOG END ------*/
- return 0;
- }
- conn->sorry_conn_flag = 1;
+ return 0;
}
- } else {
- // check connect to sorry-server now
- if (conn->sorry_conn_flag) {
- // get old real-server destination (argment 1)
- d = l7vs_sched_sorry_dest(conn->srv, conn, 1);
- /*-------- DEBUG LOG --------*/
- if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
- char sorry_dest_str2[DEBUG_STR_LEN] = {0};
- l7vs_dest_c_str(sorry_dest_str2, d);
- LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,122,
- "pointer_assign: d=%s",
- sorry_dest_str2);
- }
- /*------ DEBUG LOG END ------*/
- if (!d) {
- LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,20, "error / old real-server dest NG");
- /*-------- DEBUG LOG --------*/
- if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
- LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,123,
- "iom->status change: %d->%d",
- iom->status, iomux_conn_rs_connect_error);
- }
- /*------ DEBUG LOG END ------*/
- iom->status = iomux_conn_rs_connect_error;
- /*-------- DEBUG LOG --------*/
- if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
- LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,124,
- "out_function: static int l7vs_conn_is_rs_connected("
- "struct l7vs_iomux *iom, struct l7vs_conn *conn, struct l7vs_service **srv, struct l7vs_dest **dest) "
- "return_value: 0");
- }
- /*------ DEBUG LOG END ------*/
- return 0;
- }
- // change connection to real-server
- if (!l7vs_conn_change_connect_rs(conn, d)) {
- LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,21, "error / change connection to RS NG");
- /*-------- DEBUG LOG --------*/
- if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
- LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,125,
- "iom->status change: %d->%d",
- iom->status, iomux_conn_rs_connect_error);
- }
- /*------ DEBUG LOG END ------*/
- iom->status = iomux_conn_rs_connect_error;
- /*-------- DEBUG LOG --------*/
- if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
- LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,126,
- "out_function: static int l7vs_conn_is_rs_connected("
- "struct l7vs_iomux *iom, struct l7vs_conn *conn, struct l7vs_service **srv, struct l7vs_dest **dest) "
- "return_value: 0");
- }
- /*------ DEBUG LOG END ------*/
- return 0;
- }
- conn->sorry_conn_flag = 0;
+ else {
+ // Current connection is already changed to sorry server,
+ // so do nothing.
}
+ } else {
+ // force-sorry-flag is OFF and real servers exist,
+ // then keep the connection to real/sorry server.
}
/*-------- DEBUG LOG --------*/
if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
/*------ DEBUG LOG END ------*/
return 0;
}
- // save old destination
- conn->old_dest = conn->dest;
- /*-------- DEBUG LOG --------*/
- if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
- char old_dest_str[DEBUG_STR_LEN] = {0};
- l7vs_dest_c_str(old_dest_str, conn->old_dest);
- LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,313,
- "pointer_assign: conn->old_dest=%s",
- old_dest_str);
- }
- /*------ DEBUG LOG END ------*/
// close real-server connection
l7vs_conn_close_rsock(conn);
// connect to new destination