Hello community, here is the log from the commit of package corosync for openSUSE:Factory checked in at 2014-01-07 16:15:29 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/corosync (Old) and /work/SRC/openSUSE:Factory/.corosync.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "corosync" Changes: -------- --- /work/SRC/openSUSE:Factory/corosync/corosync.changes 2013-12-05 06:51:13.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.corosync.new/corosync.changes 2014-01-07 16:15:31.000000000 +0100 @@ -1,0 +2,14 @@ +Thu Dec 12 06:35:17 UTC 2013 - xli@suse.com + +- Update to corosync 2.3.2 +- cfgtool: return error on reload failure +- man pages: Note that votequorum's allow_downscale is unsupported +- logsys: Make logging of totem work again +- totemsrp: Show English message when memb_state_gather_enter is called +- totemiba: Check if configured MTU is allowed by HW +- totemiba: Fix parameters position for poll_add +- totemiba: Del channel fd from poll before destroy +- totemiba: Properly allocate RDMA buffers +- Upsteam version cs: 7014f10123a634cf026491edc9a09d6044106116 + +------------------------------------------------------------------- Old: ---- corosync-2.3.1.tar.gz New: ---- corosync-2.3.2.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ corosync.spec ++++++ --- /var/tmp/diff_new_pack.8BjKbf/_old 2014-01-07 16:15:31.000000000 +0100 +++ /var/tmp/diff_new_pack.8BjKbf/_new 2014-01-07 16:15:32.000000000 +0100 @@ -44,7 +44,7 @@ Summary: The Corosync Cluster Engine and Application Programming Interfaces License: BSD-3-Clause Group: Productivity/Clustering/HA -Version: 2.3.1 +Version: 2.3.2 Release: 0 Url: http://www.corosync.org Source0: %{name}-%{version}.tar.gz ++++++ corosync-2.3.1.tar.gz -> corosync-2.3.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/corosync-2.3.1/exec/logsys.c new/corosync-2.3.2/exec/logsys.c --- old/corosync-2.3.1/exec/logsys.c 2013-09-12 17:10:35.000000000 +0200 +++ new/corosync-2.3.2/exec/logsys.c 2013-11-26 15:39:34.000000000 +0100 @@ -301,39 +301,20 @@ (strlen(mainsystem) >= LOGSYS_MAX_SUBSYS_NAMELEN)) { return -1; } + /* * Setup libqb as a subsys */ - i = _logsys_subsys_create ("QB", "array.c"); + i = _logsys_subsys_create ("QB", "array.c,log.c,log_syslog.c,log_blackbox.c,log_format.c," + "log_file.c,log_dcs.c,log_thread.c,ipc_shm.c,ipcs.c,ipc_us.c,loop.c," + "loop_poll_epoll.c,loop_job.c,loop_poll_poll.c,loop_poll_kqueue.c," + "loop_timerlist.c,loop_poll.c,ringbuffer.c,ringbuffer_helper.c,trie.c," + "map.c,skiplist.c,rpl_sem.c,hdb.c,unix.c,hashtable.c,strlcpy.c,ipc_socket.c," + "strchrnul.c,ipc_setup.c,strlcat.c"); if (i < 0) { return -1; } - _logsys_subsys_filename_add (i, "log.c"); - _logsys_subsys_filename_add (i, "log_syslog.c"); - _logsys_subsys_filename_add (i, "log_blackbox.c"); - _logsys_subsys_filename_add (i, "log_format.c"); - _logsys_subsys_filename_add (i, "log_file.c"); - _logsys_subsys_filename_add (i, "log_dcs.c"); - _logsys_subsys_filename_add (i, "log_thread.c"); - _logsys_subsys_filename_add (i, "ipc_shm.c"); - _logsys_subsys_filename_add (i, "ipcs.c"); - _logsys_subsys_filename_add (i, "ipc_us.c"); - _logsys_subsys_filename_add (i, "loop.c"); - _logsys_subsys_filename_add (i, "loop_poll_epoll.c"); - _logsys_subsys_filename_add (i, "loop_job.c"); - _logsys_subsys_filename_add (i, "loop_poll_poll.c"); - _logsys_subsys_filename_add (i, "loop_poll_kqueue.c"); - _logsys_subsys_filename_add (i, "loop_timerlist.c"); - _logsys_subsys_filename_add (i, "loop_poll.c"); - _logsys_subsys_filename_add (i, "ringbuffer.c"); - _logsys_subsys_filename_add (i, "ringbuffer_helper.c"); - _logsys_subsys_filename_add (i, "trie.c"); - _logsys_subsys_filename_add (i, "map.c"); - _logsys_subsys_filename_add (i, "skiplist.c"); - _logsys_subsys_filename_add (i, "rpl_sem.c"); - _logsys_subsys_filename_add (i, "hdb.c"); - _logsys_subsys_filename_add (i, "unix.c"); /* * name clash * _logsys_subsys_filename_add (i, "util.c"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/corosync-2.3.1/exec/main.c new/corosync-2.3.2/exec/main.c --- old/corosync-2.3.1/exec/main.c 2013-09-12 17:10:35.000000000 +0200 +++ new/corosync-2.3.2/exec/main.c 2013-11-26 15:39:34.000000000 +0100 @@ -1218,7 +1218,10 @@ ip_version = totem_config.ip_version; totem_config.totem_logging_configuration = totem_logging_configuration; - totem_config.totem_logging_configuration.log_subsys_id = _logsys_subsys_create("TOTEM", "totem"); + totem_config.totem_logging_configuration.log_subsys_id = _logsys_subsys_create("TOTEM", "totem," + "totemmrp.c,totemrrp.c,totemip.c,totemconfig.c,totemcrypto.c,totemsrp.c," + "totempg.c,totemiba.c,totemudp.c,totemudpu.c,totemnet.c"); + totem_config.totem_logging_configuration.log_level_security = LOGSYS_LEVEL_WARNING; totem_config.totem_logging_configuration.log_level_error = LOGSYS_LEVEL_ERROR; totem_config.totem_logging_configuration.log_level_warning = LOGSYS_LEVEL_WARNING; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/corosync-2.3.1/exec/totemiba.c new/corosync-2.3.2/exec/totemiba.c --- old/corosync-2.3.1/exec/totemiba.c 2013-09-12 17:10:35.000000000 +0200 +++ new/corosync-2.3.2/exec/totemiba.c 2013-11-26 15:39:34.000000000 +0100 @@ -229,7 +229,7 @@ struct ibv_recv_wr recv_wr; struct ibv_sge sge; struct ibv_mr *mr; - char buffer[MAX_MTU_SIZE]; + char buffer[MAX_MTU_SIZE + sizeof (struct ibv_grh)]; }; struct send_buf { @@ -272,7 +272,7 @@ } send_buf->mr = ibv_reg_mr (instance->mcast_pd, send_buf->buffer, - 2048, IBV_ACCESS_LOCAL_WRITE); + MAX_MTU_SIZE, IBV_ACCESS_LOCAL_WRITE); if (send_buf->mr == NULL) { log_printf (LOGSYS_LEVEL_ERROR, "couldn't register memory range"); free (send_buf); @@ -309,7 +309,7 @@ } send_buf->mr = ibv_reg_mr (instance->send_token_pd, send_buf->buffer, - 2048, IBV_ACCESS_LOCAL_WRITE); + MAX_MTU_SIZE, IBV_ACCESS_LOCAL_WRITE); if (send_buf->mr == NULL) { log_printf (LOGSYS_LEVEL_ERROR, "couldn't register memory range"); free (send_buf); @@ -356,7 +356,7 @@ } recv_buf->mr = ibv_reg_mr (instance->recv_token_pd, &recv_buf->buffer, - 2048, + MAX_MTU_SIZE + sizeof (struct ibv_grh), IBV_ACCESS_LOCAL_WRITE); recv_buf->recv_wr.next = NULL; @@ -364,7 +364,7 @@ recv_buf->recv_wr.num_sge = 1; recv_buf->recv_wr.wr_id = (uintptr_t)recv_buf; - recv_buf->sge.length = 2048; + recv_buf->sge.length = MAX_MTU_SIZE + sizeof (struct ibv_grh); recv_buf->sge.lkey = recv_buf->mr->lkey; recv_buf->sge.addr = (uintptr_t)recv_buf->buffer; @@ -423,7 +423,7 @@ } mr = ibv_reg_mr (instance->mcast_pd, &recv_buf->buffer, - 2048, + MAX_MTU_SIZE + sizeof (struct ibv_grh), IBV_ACCESS_LOCAL_WRITE); recv_buf->recv_wr.next = NULL; @@ -431,7 +431,7 @@ recv_buf->recv_wr.num_sge = 1; recv_buf->recv_wr.wr_id = (uintptr_t)recv_buf; - recv_buf->sge.length = 2048; + recv_buf->sge.length = MAX_MTU_SIZE + sizeof (struct ibv_grh); recv_buf->sge.lkey = mr->lkey; recv_buf->sge.addr = (uintptr_t)recv_buf->buffer; @@ -468,10 +468,11 @@ recv_buf = wrid2void(wr_id); addr = &recv_buf->buffer[sizeof (struct ibv_grh)]; + bytes -= sizeof (struct ibv_grh); instance->totemiba_deliver_fn (instance->rrp_context, addr, bytes); } -static int mcast_cq_send_event_fn (int events, int suck, void *context) +static int mcast_cq_send_event_fn (int fd, int events, void *context) { struct totemiba_instance *instance = (struct totemiba_instance *)context; struct ibv_wc wc[32]; @@ -494,7 +495,7 @@ return (0); } -static int mcast_cq_recv_event_fn (int events, int suck, void *context) +static int mcast_cq_recv_event_fn (int fd, int events, void *context) { struct totemiba_instance *instance = (struct totemiba_instance *)context; struct ibv_wc wc[64]; @@ -518,7 +519,7 @@ return (0); } -static int mcast_rdma_event_fn (int events, int suck, void *context) +static int mcast_rdma_event_fn (int fd, int events, void *context) { struct totemiba_instance *instance = (struct totemiba_instance *)context; struct rdma_cm_event *event; @@ -591,7 +592,7 @@ return (0); } -static int recv_token_cq_recv_event_fn (int events, int suck, void *context) +static int recv_token_cq_recv_event_fn (int fd, int events, void *context) { struct totemiba_instance *instance = (struct totemiba_instance *)context; struct ibv_wc wc[32]; @@ -621,6 +622,14 @@ return (0); } + qb_loop_poll_del ( + instance->totemiba_poll_handle, + instance->recv_token_recv_completion_channel->fd); + + qb_loop_poll_del ( + instance->totemiba_poll_handle, + instance->recv_token_send_completion_channel->fd); + rdma_destroy_qp (instance->recv_token_cma_id); recv_token_recv_buf_post_destroy (instance); @@ -637,14 +646,6 @@ rdma_destroy_id (instance->recv_token_cma_id); - qb_loop_poll_del ( - instance->totemiba_poll_handle, - instance->recv_token_recv_completion_channel->fd); - - qb_loop_poll_del ( - instance->totemiba_poll_handle, - instance->recv_token_send_completion_channel->fd); - return (0); } @@ -743,7 +744,7 @@ return (res); }; -static int recv_token_rdma_event_fn (int events, int suck, void *context) +static int recv_token_rdma_event_fn (int fd, int events, void *context) { struct totemiba_instance *instance = (struct totemiba_instance *)context; struct rdma_cm_event *event; @@ -775,7 +776,7 @@ return (0); } -static int send_token_cq_send_event_fn (int events, int suck, void *context) +static int send_token_cq_send_event_fn (int fd, int events, void *context) { struct totemiba_instance *instance = (struct totemiba_instance *)context; struct ibv_wc wc[32]; @@ -798,7 +799,7 @@ return (0); } -static int send_token_cq_recv_event_fn (int events, int suck, void *context) +static int send_token_cq_recv_event_fn (int fd, int events, void *context) { struct totemiba_instance *instance = (struct totemiba_instance *)context; struct ibv_wc wc[32]; @@ -821,7 +822,7 @@ return (0); } -static int send_token_rdma_event_fn (int events, int suck, void *context) +static int send_token_rdma_event_fn (int fd, int events, void *context) { struct totemiba_instance *instance = (struct totemiba_instance *)context; struct rdma_cm_event *event; @@ -1051,6 +1052,7 @@ static int recv_token_bind (struct totemiba_instance *instance) { int res; + struct ibv_port_attr port_attr; instance->listen_recv_token_channel = rdma_create_event_channel(); if (instance->listen_recv_token_channel == NULL) { @@ -1072,6 +1074,20 @@ return (-1); } + /* + * Determine active_mtu of port and compare it with the configured one (160 is aproximation of all totem + * structures. + * + * TODO: Implement MTU discovery also for IP and handle MTU correctly for all structures inside totemsrp, + * crypto, ... + */ + res = ibv_query_port (instance->listen_recv_token_cma_id->verbs, instance->listen_recv_token_cma_id->port_num, &port_attr); + if ( (1 << (port_attr.active_mtu + 7)) < instance->totem_config->net_mtu + 160) { + log_printf (LOGSYS_LEVEL_ERROR, "requested net_mtu is %d and is larger than the active port mtu %d\n",\ + instance->totem_config->net_mtu + 160, (1 << (port_attr.active_mtu + 7))); + return (-1); + } + /* * Resolve the recv_token address into a GUID */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/corosync-2.3.1/exec/totemsrp.c new/corosync-2.3.2/exec/totemsrp.c --- old/corosync-2.3.1/exec/totemsrp.c 2013-09-12 17:10:35.000000000 +0200 +++ new/corosync-2.3.2/exec/totemsrp.c 2013-11-26 15:39:34.000000000 +0100 @@ -524,6 +524,45 @@ int endian_conversion_needed); }; +enum gather_state_from { + TOTEMSRP_GSFROM_CONSENSUS_TIMEOUT = 0, + TOTEMSRP_GSFROM_GATHER_MISSING1 = 1, + TOTEMSRP_GSFROM_THE_TOKEN_WAS_LOST_IN_THE_OPERATIONAL_STATE = 2, + TOTEMSRP_GSFROM_THE_CONSENSUS_TIMEOUT_EXPIRED = 3, + TOTEMSRP_GSFROM_THE_TOKEN_WAS_LOST_IN_THE_COMMIT_STATE = 4, + TOTEMSRP_GSFROM_THE_TOKEN_WAS_LOST_IN_THE_RECOVERY_STATE = 5, + TOTEMSRP_GSFROM_FAILED_TO_RECEIVE = 6, + TOTEMSRP_GSFROM_FOREIGN_MESSAGE_IN_OPERATIONAL_STATE = 7, + TOTEMSRP_GSFROM_FOREIGN_MESSAGE_IN_GATHER_STATE = 8, + TOTEMSRP_GSFROM_MERGE_DURING_OPERATIONAL_STATE = 9, + TOTEMSRP_GSFROM_MERGE_DURING_GATHER_STATE = 10, + TOTEMSRP_GSFROM_MERGE_DURING_JOIN = 11, + TOTEMSRP_GSFROM_JOIN_DURING_OPERATIONAL_STATE = 12, + TOTEMSRP_GSFROM_JOIN_DURING_COMMIT_STATE = 13, + TOTEMSRP_GSFROM_JOIN_DURING_RECOVERY = 14, + TOTEMSRP_GSFROM_INTERFACE_CHANGE = 15, + TOTEMSRP_GSFROM_MAX = TOTEMSRP_GSFROM_INTERFACE_CHANGE, +}; + +const char* gather_state_from_desc [] = { + [TOTEMSRP_GSFROM_CONSENSUS_TIMEOUT] = "consensus timeout", + [TOTEMSRP_GSFROM_GATHER_MISSING1] = "MISSING", + [TOTEMSRP_GSFROM_THE_TOKEN_WAS_LOST_IN_THE_OPERATIONAL_STATE] = "The token was lost in the OPERATIONAL state.", + [TOTEMSRP_GSFROM_THE_CONSENSUS_TIMEOUT_EXPIRED] = "The consensus timeout expired.", + [TOTEMSRP_GSFROM_THE_TOKEN_WAS_LOST_IN_THE_COMMIT_STATE] = "The token was lost in the COMMIT state.", + [TOTEMSRP_GSFROM_THE_TOKEN_WAS_LOST_IN_THE_RECOVERY_STATE] = "The token was lost in the RECOVERY state.", + [TOTEMSRP_GSFROM_FAILED_TO_RECEIVE] = "failed to receive", + [TOTEMSRP_GSFROM_FOREIGN_MESSAGE_IN_OPERATIONAL_STATE] = "foreign message in operational state", + [TOTEMSRP_GSFROM_FOREIGN_MESSAGE_IN_GATHER_STATE] = "foreign message in gather state", + [TOTEMSRP_GSFROM_MERGE_DURING_OPERATIONAL_STATE] = "merge during operational state", + [TOTEMSRP_GSFROM_MERGE_DURING_GATHER_STATE] = "merge during gather state", + [TOTEMSRP_GSFROM_MERGE_DURING_JOIN] = "merge during join", + [TOTEMSRP_GSFROM_JOIN_DURING_OPERATIONAL_STATE] = "join during operational state", + [TOTEMSRP_GSFROM_JOIN_DURING_COMMIT_STATE] = "join during commit state", + [TOTEMSRP_GSFROM_JOIN_DURING_RECOVERY] = "join during recovery", + [TOTEMSRP_GSFROM_INTERFACE_CHANGE] = "interface change", +}; + /* * forward decls */ @@ -586,7 +625,7 @@ static void memb_ring_id_create_or_load (struct totemsrp_instance *, struct memb_ring_id *); static void token_callbacks_execute (struct totemsrp_instance *instance, enum totem_callback_token_type type); -static void memb_state_gather_enter (struct totemsrp_instance *instance, int gather_from); +static void memb_state_gather_enter (struct totemsrp_instance *instance, enum gather_state_from gather_from); static void messages_deliver_to_app (struct totemsrp_instance *instance, int skip, unsigned int end_point); static int orf_token_mcast (struct totemsrp_instance *instance, struct orf_token *oken, int fcc_mcasts_allowed); @@ -617,6 +656,7 @@ static void timer_function_merge_detect_timeout (void *data); static void *totemsrp_buffer_alloc (struct totemsrp_instance *instance); static void totemsrp_buffer_release (struct totemsrp_instance *instance, void *ptr); +static const char* gsfrom_to_msg(enum gather_state_from gsfrom); void main_deliver_fn ( void *context, @@ -659,6 +699,16 @@ fmt ": %s (%d)\n", ##args, _error_ptr, err_num); \ } while(0) +static const char* gsfrom_to_msg(enum gather_state_from gsfrom) +{ + if (0 <= gsfrom && gsfrom <= TOTEMSRP_GSFROM_MAX) { + return gather_state_from_desc[gsfrom]; + } + else { + return "UNKNOWN"; + } +} + static void totemsrp_instance_initialize (struct totemsrp_instance *instance) { memset (instance, 0, sizeof (struct totemsrp_instance)); @@ -1601,7 +1651,7 @@ memb_set_merge (no_consensus_list, no_consensus_list_entries, instance->my_failed_list, &instance->my_failed_list_entries); - memb_state_gather_enter (instance, 0); + memb_state_gather_enter (instance, TOTEMSRP_GSFROM_CONSENSUS_TIMEOUT); } } @@ -1623,7 +1673,7 @@ static void memb_recovery_state_token_loss (struct totemsrp_instance *instance) { old_ring_state_restore (instance); - memb_state_gather_enter (instance, 5); + memb_state_gather_enter (instance, TOTEMSRP_GSFROM_THE_TOKEN_WAS_LOST_IN_THE_RECOVERY_STATE); instance->stats.recovery_token_lost++; } @@ -1638,7 +1688,7 @@ log_printf (instance->totemsrp_log_level_notice, "A processor failed, forming new configuration."); totemrrp_iface_check (instance->totemrrp_context); - memb_state_gather_enter (instance, 2); + memb_state_gather_enter (instance, TOTEMSRP_GSFROM_THE_TOKEN_WAS_LOST_IN_THE_OPERATIONAL_STATE); instance->stats.operational_token_lost++; break; @@ -1646,14 +1696,14 @@ log_printf (instance->totemsrp_log_level_debug, "The consensus timeout expired."); memb_state_consensus_timeout_expired (instance); - memb_state_gather_enter (instance, 3); + memb_state_gather_enter (instance, TOTEMSRP_GSFROM_THE_CONSENSUS_TIMEOUT_EXPIRED); instance->stats.gather_token_lost++; break; case MEMB_STATE_COMMIT: log_printf (instance->totemsrp_log_level_debug, "The token was lost in the COMMIT state."); - memb_state_gather_enter (instance, 4); + memb_state_gather_enter (instance, TOTEMSRP_GSFROM_THE_TOKEN_WAS_LOST_IN_THE_COMMIT_STATE); instance->stats.commit_token_lost++; break; @@ -1986,7 +2036,7 @@ static void memb_state_gather_enter ( struct totemsrp_instance *instance, - int gather_from) + enum gather_state_from gather_from) { instance->orf_token_discard = 1; @@ -2033,12 +2083,13 @@ memb_consensus_set (instance, &instance->my_id); log_printf (instance->totemsrp_log_level_debug, - "entering GATHER state from %d.", gather_from); + "entering GATHER state from %d(%s).", + gather_from, gsfrom_to_msg(gather_from)); instance->memb_state = MEMB_STATE_GATHER; instance->stats.gather_entered++; - if (gather_from == 3) { + if (TOTEMSRP_GSFROM_THE_CONSENSUS_TIMEOUT_EXPIRED == 3) { /* * State 3 means gather, so we are continuously gathering. */ @@ -3719,7 +3770,7 @@ instance->my_failed_list, &instance->my_failed_list_entries); - memb_state_gather_enter (instance, 6); + memb_state_gather_enter (instance, TOTEMSRP_GSFROM_FAILED_TO_RECEIVE); } else { instance->my_token_seq = token->token_seq; token->token_seq += 1; @@ -3974,7 +4025,7 @@ memb_set_merge ( &mcast_header.system_from, 1, instance->my_proc_list, &instance->my_proc_list_entries); - memb_state_gather_enter (instance, 7); + memb_state_gather_enter (instance, TOTEMSRP_GSFROM_FOREIGN_MESSAGE_IN_OPERATIONAL_STATE); break; case MEMB_STATE_GATHER: @@ -3986,7 +4037,7 @@ memb_set_merge (&mcast_header.system_from, 1, instance->my_proc_list, &instance->my_proc_list_entries); - memb_state_gather_enter (instance, 8); + memb_state_gather_enter (instance, TOTEMSRP_GSFROM_FOREIGN_MESSAGE_IN_GATHER_STATE); return (0); } break; @@ -4078,7 +4129,7 @@ case MEMB_STATE_OPERATIONAL: memb_set_merge (&memb_merge_detect.system_from, 1, instance->my_proc_list, &instance->my_proc_list_entries); - memb_state_gather_enter (instance, 9); + memb_state_gather_enter (instance, TOTEMSRP_GSFROM_MERGE_DURING_OPERATIONAL_STATE); break; case MEMB_STATE_GATHER: @@ -4090,7 +4141,7 @@ memb_set_merge (&memb_merge_detect.system_from, 1, instance->my_proc_list, &instance->my_proc_list_entries); - memb_state_gather_enter (instance, 10); + memb_state_gather_enter (instance, TOTEMSRP_GSFROM_MERGE_DURING_GATHER_STATE); return (0); } break; @@ -4217,7 +4268,7 @@ } } } - memb_state_gather_enter (instance, 11); + memb_state_gather_enter (instance, TOTEMSRP_GSFROM_MERGE_DURING_JOIN); gather_entered = 1; } @@ -4225,7 +4276,7 @@ if (gather_entered == 0 && instance->memb_state == MEMB_STATE_OPERATIONAL) { - memb_state_gather_enter (instance, 12); + memb_state_gather_enter (instance, TOTEMSRP_GSFROM_JOIN_DURING_OPERATIONAL_STATE); } } @@ -4395,7 +4446,7 @@ memb_join->ring_seq >= instance->my_ring_id.seq) { memb_join_process (instance, memb_join); - memb_state_gather_enter (instance, 13); + memb_state_gather_enter (instance, TOTEMSRP_GSFROM_JOIN_DURING_COMMIT_STATE); } break; @@ -4409,7 +4460,7 @@ memb_join_process (instance, memb_join); memb_recovery_state_token_loss (instance); - memb_state_gather_enter (instance, 14); + memb_state_gather_enter (instance, TOTEMSRP_GSFROM_JOIN_DURING_RECOVERY); } break; } @@ -4598,7 +4649,7 @@ } if (instance->iface_changes >= instance->totem_config->interface_count) { - memb_state_gather_enter (instance, 15); + memb_state_gather_enter (instance, TOTEMSRP_GSFROM_INTERFACE_CHANGE); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/corosync-2.3.1/man/votequorum.5 new/corosync-2.3.2/man/votequorum.5 --- old/corosync-2.3.1/man/votequorum.5 2013-09-12 17:10:35.000000000 +0200 +++ new/corosync-2.3.2/man/votequorum.5 2013-11-26 15:39:34.000000000 +0100 @@ -275,6 +275,8 @@ .PP Enables allow downscale (AD) feature (default: 0). .PP +THIS FEATURE IS INCOMPLETE AND CURRENTLY UNSUPPORTED. +.PP The general behaviour of votequorum is to never decrease expected votes or quorum. .PP When AD is enabled, both expected votes and quorum are recalculated when diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/corosync-2.3.1/tools/corosync-cfgtool.c new/corosync-2.3.2/tools/corosync-cfgtool.c --- old/corosync-2.3.1/tools/corosync-cfgtool.c 2013-09-12 17:10:35.000000000 +0200 +++ new/corosync-2.3.2/tools/corosync-cfgtool.c 2013-11-26 15:39:34.000000000 +0100 @@ -137,27 +137,33 @@ (void)corosync_cfg_finalize (handle); } -static void reload_config_do (void) +static int reload_config_do (void) { cs_error_t result; corosync_cfg_handle_t handle; + int rc; + + rc = 0; printf ("Reloading corosync.conf...\n"); result = corosync_cfg_initialize (&handle, NULL); if (result != CS_OK) { - printf ("Could not initialize corosync configuration API error %d\n", result); + printf ("Could not initialize corosync configuration API error %s\n", cs_strerror(result)); exit (1); } result = corosync_cfg_reload_config (handle); if (result != CS_OK) { - printf ("Could not reload configuration %d\n", result); + printf ("Could not reload configuration. Error %s\n", cs_strerror(result)); + rc = (int)result; } else { printf ("Done\n"); } (void)corosync_cfg_finalize (handle); + + return (rc); } static void shutdown_do(void) @@ -278,7 +284,7 @@ rc = ringstatusget_do (interface_name); break; case 'R': - reload_config_do (); + rc = reload_config_do (); break; case 'r': ringreenable_do (); -- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org