]> git.proxmox.com Git - mirror_corosync.git/commitdiff
Qdevice: Enhance delay before reconnect
authorJan Friesse <jfriesse@redhat.com>
Tue, 28 Jun 2016 10:40:29 +0000 (12:40 +0200)
committerJan Friesse <jfriesse@redhat.com>
Tue, 28 Jun 2016 11:58:43 +0000 (13:58 +0200)
Signed-off-by: Jan Friesse <jfriesse@redhat.com>
qdevices/qdevice-advanced-settings.c
qdevices/qdevice-advanced-settings.h
qdevices/qdevice-model-net.c
qdevices/qdevice-net-instance.c
qdevices/qnet-config.h

index 60ee9cc93f17c8fdd383ff329d79dab08c994855..d1931f8cc29f80b743bcecbebd42fa69e18f4c2c 100644 (file)
@@ -82,7 +82,6 @@ qdevice_advanced_settings_init(struct qdevice_advanced_settings *settings)
        settings->net_heartbeat_interval_max = QDEVICE_NET_DEFAULT_HEARTBEAT_INTERVAL_MAX;
        settings->net_min_connect_timeout = QDEVICE_NET_DEFAULT_MIN_CONNECT_TIMEOUT;
        settings->net_max_connect_timeout = QDEVICE_NET_DEFAULT_MAX_CONNECT_TIMEOUT;
-       settings->net_delay_before_reconnect = QDEVICE_NET_DEFAULT_DELAY_BEFORE_RECONNECT;
        settings->net_test_algorithm_enabled = QDEVICE_NET_DEFAULT_TEST_ALGORITHM_ENABLED;
 
        settings->master_wins = QDEVICE_ADVANCED_SETTINGS_MASTER_WINS_MODEL;
@@ -248,13 +247,6 @@ qdevice_advanced_settings_set(struct qdevice_advanced_settings *settings,
                }
 
                settings->net_max_connect_timeout = (uint32_t)tmpll;
-       } else if (strcasecmp(option, "net_delay_before_reconnect") == 0) {
-               tmpll = strtoll(value, &ep, 10);
-               if (tmpll < QDEVICE_NET_MIN_DELAY_BEFORE_RECONNECT || errno != 0 || *ep != '\0') {
-                       return (-2);
-               }
-
-               settings->net_delay_before_reconnect = (int)tmpll;
        } else if (strcasecmp(option, "net_test_algorithm_enabled") == 0) {
                if ((tmpll = utils_parse_bool_str(value)) == -1) {
                        return (-2);
index bcdbb7bb300fe11fad41a525735494d079c8ec1a..eb3206b4320dee1df51bf39549926ca8e8035221 100644 (file)
@@ -71,7 +71,6 @@ struct qdevice_advanced_settings {
        uint32_t net_heartbeat_interval_max;
        uint32_t net_min_connect_timeout;
        uint32_t net_max_connect_timeout;
-       int net_delay_before_reconnect;
        uint8_t net_test_algorithm_enabled;
 };
 
index 2f2fa592ab35e6a9989afadd018c896bec37204d..857ed401db4d810e110bd50d85afa276614b58ed 100644 (file)
@@ -155,6 +155,7 @@ qdevice_model_net_run(struct qdevice_instance *instance)
        int try_connect;
        int res;
        enum tlv_vote vote;
+       int delay_before_reconnect;
 
        net_instance = instance->model_data;
 
@@ -245,15 +246,20 @@ qdevice_model_net_run(struct qdevice_instance *instance)
                        net_instance->non_blocking_client.socket = NULL;
                }
 
-               qdevice_net_instance_clean(net_instance);
-
-               if (try_connect) {
+               if (try_connect &&
+                   net_instance->state != QDEVICE_NET_INSTANCE_STATE_WAITING_CONNECT) {
                        /*
                         * Give qnetd server a little time before reconnect
                         */
-                       (void)poll(NULL, 0,
-                           random() % instance->advanced_settings->net_delay_before_reconnect);
+                       delay_before_reconnect = random() %
+                           (int)(net_instance->cast_vote_timer_interval * 0.9);
+
+                       qdevice_log(LOG_DEBUG, "Sleeping for %u ms before reconnect",
+                           delay_before_reconnect);
+                       (void)poll(NULL, 0, delay_before_reconnect);
                }
+
+               qdevice_net_instance_clean(net_instance);
        }
 
        return (0);
index 13ff458174d770e596d7c116ed525dd0cc1114ec..e807d1dae3f5e8f445ccfda107750a6d767a450b 100644 (file)
@@ -116,10 +116,10 @@ qdevice_net_instance_clean(struct qdevice_net_instance *instance)
 
        instance->skipping_msg = 0;
        instance->msg_already_received_bytes = 0;
-       instance->state = QDEVICE_NET_INSTANCE_STATE_WAITING_PREINIT_REPLY;
        instance->echo_request_expected_msg_seq_num = instance->echo_reply_received_msg_seq_num;
        instance->using_tls = 0;
        instance->tls_client_cert_sent = 0;
+       instance->state = QDEVICE_NET_INSTANCE_STATE_WAITING_CONNECT;
 
        instance->schedule_disconnect = 0;
        instance->disconnect_reason = QDEVICE_NET_DISCONNECT_REASON_UNDEFINED;
index 1e5768729a9cbfcb5fddfa9d12a8ea6dbc9a33f2..8435b53f3a06df12685fba19a256887ff71daabf 100644 (file)
@@ -122,9 +122,6 @@ extern "C" {
 #define QDEVICE_NET_DEFAULT_TEST_ALGORITHM_ENABLED     0
 #endif
 
-#define QDEVICE_NET_DEFAULT_DELAY_BEFORE_RECONNECT     (1000)
-#define QDEVICE_NET_MIN_DELAY_BEFORE_RECONNECT         1
-
 /*
  * Decision algorithms supported by qnetd
  */