Bläddra i källkod

Qdevice: Enhance delay before reconnect

Signed-off-by: Jan Friesse <jfriesse@redhat.com>
Jan Friesse 9 år sedan
förälder
incheckning
c9584c965f

+ 0 - 8
qdevices/qdevice-advanced-settings.c

@@ -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);

+ 0 - 1
qdevices/qdevice-advanced-settings.h

@@ -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;
 };
 

+ 11 - 5
qdevices/qdevice-model-net.c

@@ -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);

+ 1 - 1
qdevices/qdevice-net-instance.c

@@ -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;

+ 0 - 3
qdevices/qnet-config.h

@@ -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
  */