OSDN Git Service

Persist sorry server connection.
[ultramonkey-l7/ultramonkey-l7-v2.git] / src / conn.c
index fa184f2..77eb8cb 100644 (file)
@@ -403,7 +403,6 @@ l7vs_conn_create(int lfd, struct l7vs_lsock *lsock)
     }
     /*------ 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.
@@ -1060,135 +1059,42 @@ l7vs_conn_is_rs_connected(struct l7vs_iomux *iom, struct l7vs_conn *conn, struct
     }
     /*------ 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)) {
@@ -3507,17 +3413,6 @@ static int l7vs_conn_change_connect_rs(struct l7vs_conn *conn, struct l7vs_dest
         /*------ 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