Просмотр исходного кода

votequorum: Make qdev timeout in sync configurable

Configuration option quorum.device.sync_timeout is available for setting
qdevice poll timeout for synchronization phase. Default value is 30
sec.

Signed-off-by: Jan Friesse <jfriesse@redhat.com>
Reviewed-by: Christine Caulfield <ccaulfie@redhat.com>
Jan Friesse 11 лет назад
Родитель
Сommit
17488909d4
4 измененных файлов с 13 добавлено и 4 удалено
  1. 1 0
      exec/coroparse.c
  2. 6 2
      exec/votequorum.c
  3. 1 0
      include/corosync/votequorum.h
  4. 5 2
      man/votequorum_qdevice_poll.3.in

+ 1 - 0
exec/coroparse.c

@@ -557,6 +557,7 @@ static int main_config_parser_cb(const char *path,
 			break;
 		case MAIN_CP_CB_DATA_STATE_QDEVICE:
 			if ((strcmp(path, "quorum.device.timeout") == 0) ||
+			    (strcmp(path, "quorum.device.sync_timeout") == 0) ||
 			    (strcmp(path, "quorum.device.votes") == 0)) {
 				val_type = ICMAP_VALUETYPE_UINT32;
 				if (safe_atoq(value, &val, val_type) != 0) {

+ 6 - 2
exec/votequorum.c

@@ -71,6 +71,7 @@ static struct corosync_api_v1 *corosync_api;
 static char qdevice_name[VOTEQUORUM_QDEVICE_MAX_NAME_LEN];
 static struct cluster_node *qdevice = NULL;
 static unsigned int qdevice_timeout = VOTEQUORUM_QDEVICE_DEFAULT_TIMEOUT;
+static unsigned int qdevice_sync_timeout = VOTEQUORUM_QDEVICE_DEFAULT_SYNC_TIMEOUT;
 static uint8_t qdevice_can_operate = 1;
 static void *qdevice_reg_conn = NULL;
 static uint8_t qdevice_master_wins = 0;
@@ -1197,6 +1198,9 @@ static int votequorum_qdevice_is_configured(uint32_t *qdevice_votes)
 			if (icmap_get_uint32("quorum.device.timeout", &qdevice_timeout) != CS_OK) {
 				qdevice_timeout = VOTEQUORUM_QDEVICE_DEFAULT_TIMEOUT;
 			}
+			if (icmap_get_uint32("quorum.device.sync_timeout", &qdevice_sync_timeout) != CS_OK) {
+				qdevice_sync_timeout = VOTEQUORUM_QDEVICE_DEFAULT_SYNC_TIMEOUT;
+			}
 			update_qdevice_can_operate(1);
 			ret = 1;
 		}
@@ -2244,13 +2248,13 @@ static void votequorum_sync_init (
 		if (qdevice_timer_set) {
 			corosync_api->timer_delete(qdevice_timer);
 		}
-		corosync_api->timer_add_duration((unsigned long long)qdevice_timeout*1000000, qdevice,
+		corosync_api->timer_add_duration((unsigned long long)qdevice_sync_timeout*1000000, qdevice,
 						 qdevice_timer_fn, &qdevice_timer);
 		qdevice_timer_set = 1;
 		sync_wait_for_poll_or_timeout = 1;
 
 		log_printf(LOGSYS_LEVEL_INFO, "waiting for quorum device %s poll (but maximum for %u ms)",
-			qdevice_name, qdevice_timeout);
+			qdevice_name, qdevice_sync_timeout);
 	}
 
 	LEAVE();

+ 1 - 0
include/corosync/votequorum.h

@@ -56,6 +56,7 @@ typedef uint64_t votequorum_handle_t;
 #define VOTEQUORUM_QDEVICE_NODEID               0
 #define VOTEQUORUM_QDEVICE_MAX_NAME_LEN       255
 #define VOTEQUORUM_QDEVICE_DEFAULT_TIMEOUT  10000
+#define VOTEQUORUM_QDEVICE_DEFAULT_SYNC_TIMEOUT  30000
 
 #define VOTEQUORUM_NODESTATE_MEMBER             1
 #define VOTEQUORUM_NODESTATE_DEAD               2

+ 5 - 2
man/votequorum_qdevice_poll.3.in

@@ -51,10 +51,13 @@ must be set (one get in votequorum_notification_fn callback) otherwise poll is i
 This routine should be called at regular intervals to ensure that the device status
 is always known to votequorum. If
 .B votequorum_qdevice_poll
-is not called for (default) 10 seconds then the device will be deemed to be dead and
+is not called for (default) 10 seconds (or 30 seconds for sync phase) then the device will be deemed to be dead and
 its votes removed from the cluster. This does not unregister the device.
 The default poll time can be changed by setting the cmap variable
-quorum.quorumdev_poll.
+.B quorum.device.timeout
+for normal operation or
+.B quorum.device.sync_timeout
+for synchronization phase.
 .SH RETURN VALUE
 This call returns the CS_OK value if successful, otherwise an error is returned.
 .PP