OSDN Git Service

Set old destination for changing connection from sorry server to real server.
[ultramonkey-l7/ultramonkey-l7-v2.git] / src / lsock.c
index 23b4026..693dfae 100644 (file)
@@ -492,6 +492,7 @@ l7vs_lsock_select_service(struct l7vs_lsock *lsock,
         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
@@ -517,6 +518,7 @@ l7vs_lsock_select_service(struct l7vs_lsock *lsock,
             }
         }
         // when select_dest NG
+        // No suitable realservers exist
         if (!sorry_save2) {
             // save sorry dest to xxx_tmp2 only first time
             srv_tmp2 = srv;
@@ -528,10 +530,10 @@ l7vs_lsock_select_service(struct l7vs_lsock *lsock,
         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");
@@ -542,13 +544,15 @@ l7vs_lsock_select_service(struct l7vs_lsock *lsock,
             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");
@@ -559,6 +563,7 @@ l7vs_lsock_select_service(struct l7vs_lsock *lsock,
             return -1;
         }
         *srv_ret = srv_tmp2;
+        conn->old_dest = dest_tmp2;
         conn->cldata_len = len_tmp2;
         conn->sorry_conn_flag = 1;
         val = 1;