diff --git a/qdevices/corosync-qnetd.c b/qdevices/corosync-qnetd.c index 32a19e1b..c38d83cf 100644 --- a/qdevices/corosync-qnetd.c +++ b/qdevices/corosync-qnetd.c @@ -1395,21 +1395,31 @@ signal_handlers_register(void) static void usage(void) { - printf("usage: %s [-h listen_addr] [-p listen_port]\n", QNETD_PROGRAM_NAME); + + printf("usage: %s [-df] [-l listen_addr] [-p listen_port]\n", QNETD_PROGRAM_NAME); } static void -cli_parse(int argc, char * const argv[], char **host_addr, uint16_t *host_port) +cli_parse(int argc, char * const argv[], char **host_addr, uint16_t *host_port, int *foreground, + int *debug_log) { int ch; char *ep; *host_addr = NULL; *host_port = QNETD_DEFAULT_HOST_PORT; + *foreground = 0; + *debug_log = 0; - while ((ch = getopt(argc, argv, "h:p:")) != -1) { + while ((ch = getopt(argc, argv, "fdl:p:")) != -1) { switch (ch) { - case 'h': + case 'f': + *foreground = 1; + break; + case 'd': + *debug_log = 1; + break; + case 'l': *host_addr = strdup(optarg); break; case 'p': @@ -1432,12 +1442,18 @@ main(int argc, char *argv[]) struct qnetd_instance instance; char *host_addr; uint16_t host_port; + int foreground; + int debug_log; - /* - * INIT - */ - qnetd_log_init(QNETD_LOG_TARGET_STDERR); - qnetd_log_set_debug(1); + cli_parse(argc, argv, &host_addr, &host_port, &foreground, &debug_log); + + if (foreground) { + qnetd_log_init(QNETD_LOG_TARGET_STDERR); + } else { + qnetd_log_init(QNETD_LOG_TARGET_SYSLOG); + } + + qnetd_log_set_debug(debug_log); if (nss_sock_init_nss((char *)QNETD_NSS_DB_DIR) != 0) { qnetd_err_nss(); @@ -1447,7 +1463,6 @@ main(int argc, char *argv[]) qnetd_err_nss(); } - cli_parse(argc, argv, &host_addr, &host_port); if (qnetd_instance_init(&instance, QNETD_MAX_CLIENT_RECEIVE_SIZE, QNETD_MAX_CLIENT_SEND_BUFFERS, QNETD_MAX_CLIENT_SEND_SIZE, diff --git a/qdevices/qdevice-net-cast-vote-timer.c b/qdevices/qdevice-net-cast-vote-timer.c index 2867dee1..3b05c04f 100644 --- a/qdevices/qdevice-net-cast-vote-timer.c +++ b/qdevices/qdevice-net-cast-vote-timer.c @@ -67,10 +67,14 @@ qdevice_net_cast_vote_timer_callback(void *data1, void *data2) instance->last_received_votequorum_ring_id); if (res != CS_OK && res != CS_ERR_TRY_AGAIN) { - qdevice_net_log(LOG_CRIT, "Can't call votequorum_qdevice_poll. Error %u", res); + if (res == CS_ERR_MESSAGE_ERROR) { + qdevice_net_log(LOG_INFO, "votequorum_qdevice_poll called with old ring id, rescheduling timer"); + } else { + qdevice_net_log(LOG_CRIT, "Can't call votequorum_qdevice_poll. Error %u", res); - instance->schedule_disconnect = 1; - return (0); + instance->schedule_disconnect = 1; + return (0); + } } /* diff --git a/qdevices/qdevice-net-votequorum.c b/qdevices/qdevice-net-votequorum.c index 02b9d633..ee489448 100644 --- a/qdevices/qdevice-net-votequorum.c +++ b/qdevices/qdevice-net-votequorum.c @@ -74,48 +74,48 @@ qdevice_net_votequorum_ring_id_to_tlv(struct tlv_ring_id *tlv_rid, tlv_rid->seq = votequorum_rid->seq; } -static void -qdevice_net_votequorum_notify_callback(votequorum_handle_t votequorum_handle, - uint64_t context, uint32_t quorate, - votequorum_ring_id_t votequorum_ring_id, - uint32_t node_list_entries, votequorum_node_t node_list[]) -{ - struct qdevice_net_instance *instance; - struct tlv_ring_id tlv_rid; - uint32_t u32; - - if (votequorum_context_get(votequorum_handle, (void **)&instance) != CS_OK) { - errx(1, "Fatal error. Can't get votequorum context"); - } - - qdevice_net_votequorum_ring_id_to_tlv(&tlv_rid, &votequorum_ring_id); - - if (qdevice_net_send_membership_node_list(instance, - (quorate ? TLV_QUORATE_QUORATE : TLV_QUORATE_INQUORATE), - &tlv_rid, node_list_entries, node_list) != 0) { - /* - * Fatal error -> schedule disconnect - */ - instance->schedule_disconnect = 1; - } - - memcpy(&instance->last_received_votequorum_ring_id, &votequorum_ring_id, sizeof(votequorum_ring_id)); - - if (qdevice_net_cast_vote_timer_update(instance, TLV_VOTE_WAIT_FOR_REPLY) != 0) { - errx(1, "qdevice_net_votequorum_notify_callback fatal error. " - "Can't update cast vote timer vote"); - } - - qdevice_net_log(LOG_DEBUG, "Votequorum notify callback:"); - qdevice_net_log(LOG_DEBUG, " Quorate = %u, ring_id = (%"PRIx32".%"PRIx64")", - quorate, votequorum_ring_id.nodeid, votequorum_ring_id.seq); - - qdevice_net_log(LOG_DEBUG, " Node list (size = %"PRIu32"):", node_list_entries); - for (u32 = 0; u32 < node_list_entries; u32++) { - qdevice_net_log(LOG_DEBUG, " %"PRIu32" nodeid = %"PRIu32", state = %"PRIu32, - u32, node_list[u32].nodeid, node_list[u32].state); - } -} +//static void +//qdevice_net_votequorum_notify_callback(votequorum_handle_t votequorum_handle, +// uint64_t context, uint32_t quorate, +// votequorum_ring_id_t votequorum_ring_id, +// uint32_t node_list_entries, votequorum_node_t node_list[]) +//{ +// struct qdevice_net_instance *instance; +// struct tlv_ring_id tlv_rid; +// uint32_t u32; +// +// if (votequorum_context_get(votequorum_handle, (void **)&instance) != CS_OK) { +// errx(1, "Fatal error. Can't get votequorum context"); +// } +// +// qdevice_net_votequorum_ring_id_to_tlv(&tlv_rid, &votequorum_ring_id); +// +// if (qdevice_net_send_membership_node_list(instance, +// (quorate ? TLV_QUORATE_QUORATE : TLV_QUORATE_INQUORATE), +// &tlv_rid, node_list_entries, node_list) != 0) { +// /* +// * Fatal error -> schedule disconnect +// */ +// instance->schedule_disconnect = 1; +// } +// +// memcpy(&instance->last_received_votequorum_ring_id, &votequorum_ring_id, sizeof(votequorum_ring_id)); +// +// if (qdevice_net_cast_vote_timer_update(instance, TLV_VOTE_WAIT_FOR_REPLY) != 0) { +// errx(1, "qdevice_net_votequorum_notify_callback fatal error. " +// "Can't update cast vote timer vote"); +// } +// +// qdevice_net_log(LOG_DEBUG, "Votequorum notify callback:"); +// qdevice_net_log(LOG_DEBUG, " Quorate = %u, ring_id = (%"PRIx32".%"PRIx64")", +// quorate, votequorum_ring_id.nodeid, votequorum_ring_id.seq); +// +// qdevice_net_log(LOG_DEBUG, " Node list (size = %"PRIu32"):", node_list_entries); +// for (u32 = 0; u32 < node_list_entries; u32++) { +// qdevice_net_log(LOG_DEBUG, " %"PRIu32" nodeid = %"PRIu32", state = %"PRIu32, +// u32, node_list[u32].nodeid, node_list[u32].state); +// } +//} void qdevice_net_votequorum_init(struct qdevice_net_instance *instance) @@ -127,7 +127,10 @@ qdevice_net_votequorum_init(struct qdevice_net_instance *instance) int fd; memset(&votequorum_callbacks, 0, sizeof(votequorum_callbacks)); - votequorum_callbacks.votequorum_notify_fn = qdevice_net_votequorum_notify_callback; +/* + * TODO: + * votequorum_callbacks.votequorum_notify_fn = qdevice_net_votequorum_notify_callback; + */ no_retries = 0; diff --git a/qdevices/qnetd-log.c b/qdevices/qnetd-log.c index b232c3e5..95e6d36f 100644 --- a/qdevices/qnetd-log.c +++ b/qdevices/qnetd-log.c @@ -35,6 +35,7 @@ #include #include #include +#include #include "qnet-config.h" #include "qnetd-log.h" @@ -42,6 +43,27 @@ static int qnetd_log_config_target = 0; static int qnetd_log_config_debug = 0; +static const char qnetd_log_month_str[][4] = { + "Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" +}; + +struct qnetd_log_syslog_prio_to_str_item { + int priority; + const char *priority_str; +}; + +static struct qnetd_log_syslog_prio_to_str_item qnetd_syslog_prio_to_str_array[] = { + {LOG_EMERG, "emerg"}, + {LOG_ALERT, "alert"}, + {LOG_CRIT, "crit"}, + {LOG_ERR, "error"}, + {LOG_WARNING, "warning"}, + {LOG_NOTICE, "notice"}, + {LOG_INFO, "info"}, + {LOG_DEBUG, "debug"}, + {-1, NULL}}; + void qnetd_log_init(int target) { @@ -53,13 +75,35 @@ qnetd_log_init(int target) } } +static const char * +qnetd_log_syslog_prio_to_str(int priority) +{ + + if (priority >= LOG_EMERG && priority <= LOG_DEBUG) { + return (qnetd_syslog_prio_to_str_array[priority].priority_str); + } else { + return ("none"); + } +} + void qnetd_log_printf(int priority, const char *format, ...) { va_list ap; + time_t current_time; + struct tm tm_res; if (priority != LOG_DEBUG || (qnetd_log_config_debug)) { if (qnetd_log_config_target & QNETD_LOG_TARGET_STDERR) { + current_time = time(NULL); + localtime_r(¤t_time, &tm_res); + + fprintf(stderr, "%s %02d %02d:%02d:%02d ", + qnetd_log_month_str[tm_res.tm_mon], tm_res.tm_mday, tm_res.tm_hour, + tm_res.tm_min, tm_res.tm_sec); + + fprintf(stderr, "%-7s ", qnetd_log_syslog_prio_to_str(priority)); + va_start(ap, format); vfprintf(stderr, format, ap); fprintf(stderr, "\n");