diff --git a/.corosync.metadata b/.corosync.metadata index 7f2fe27..8d3dc4a 100644 --- a/.corosync.metadata +++ b/.corosync.metadata @@ -1 +1 @@ -0f1d2624715a9b8bc9657e23ab002ed332c8ac5c SOURCES/corosync-2.3.3.tar.gz +7c93022516960e96be6823cd17c8300964641036 SOURCES/corosync-2.3.4.tar.gz diff --git a/.gitignore b/.gitignore index 0bc5454..a5a4ad7 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/corosync-2.3.3.tar.gz +SOURCES/corosync-2.3.4.tar.gz diff --git a/SOURCES/bz1067028-1-cpg-Refactor-mh_req_exec_cpg_procleave.patch b/SOURCES/bz1067028-1-cpg-Refactor-mh_req_exec_cpg_procleave.patch deleted file mode 100644 index 30436f5..0000000 --- a/SOURCES/bz1067028-1-cpg-Refactor-mh_req_exec_cpg_procleave.patch +++ /dev/null @@ -1,111 +0,0 @@ -From fcf26e03036b6ae5a8ef762ea0b5691a4f790c92 Mon Sep 17 00:00:00 2001 -From: Jan Friesse -Date: Tue, 11 Feb 2014 15:27:31 +0100 -Subject: [PATCH] cpg: Refactor mh_req_exec_cpg_procleave - -Most of functionality is moved to do_proc_leave function to make it -reusable. - -Signed-off-by: Jan Friesse -Reviewed-by: Christine Caulfield ---- - exec/cpg.c | 67 +++++++++++++++++++++++++++++++++++++++-------------------- - 1 files changed, 44 insertions(+), 23 deletions(-) - -diff --git a/exec/cpg.c b/exec/cpg.c -index bc5feb6..9981440 100644 ---- a/exec/cpg.c -+++ b/exec/cpg.c -@@ -313,6 +313,12 @@ static void do_proc_join( - unsigned int nodeid, - int reason); - -+static void do_proc_leave( -+ const mar_cpg_name_t *name, -+ uint32_t pid, -+ unsigned int nodeid, -+ int reason); -+ - static int notify_lib_totem_membership ( - void *conn, - int member_list_entries, -@@ -1195,6 +1201,37 @@ static void do_proc_join( - MESSAGE_RES_CPG_CONFCHG_CALLBACK); - } - -+static void do_proc_leave( -+ const mar_cpg_name_t *name, -+ uint32_t pid, -+ unsigned int nodeid, -+ int reason) -+{ -+ struct process_info *pi; -+ struct list_head *iter; -+ mar_cpg_address_t notify_info; -+ -+ notify_info.pid = pid; -+ notify_info.nodeid = nodeid; -+ notify_info.reason = reason; -+ -+ notify_lib_joinlist(name, NULL, -+ 0, NULL, -+ 1, ¬ify_info, -+ MESSAGE_RES_CPG_CONFCHG_CALLBACK); -+ -+ for (iter = process_info_list_head.next; iter != &process_info_list_head; ) { -+ pi = list_entry(iter, struct process_info, list); -+ iter = iter->next; -+ -+ if (pi->pid == pid && pi->nodeid == nodeid && -+ mar_name_compare (&pi->group, name)==0) { -+ list_del (&pi->list); -+ free (pi); -+ } -+ } -+} -+ - static void message_handler_req_exec_cpg_downlist_old ( - const void *message, - unsigned int nodeid) -@@ -1269,31 +1306,15 @@ static void message_handler_req_exec_cpg_procleave ( - unsigned int nodeid) - { - const struct req_exec_cpg_procjoin *req_exec_cpg_procjoin = message; -- struct process_info *pi; -- struct list_head *iter; -- mar_cpg_address_t notify_info; -- -- log_printf(LOGSYS_LEVEL_DEBUG, "got procleave message from cluster node %d", nodeid); -- -- notify_info.pid = req_exec_cpg_procjoin->pid; -- notify_info.nodeid = nodeid; -- notify_info.reason = req_exec_cpg_procjoin->reason; -- -- notify_lib_joinlist(&req_exec_cpg_procjoin->group_name, NULL, -- 0, NULL, -- 1, ¬ify_info, -- MESSAGE_RES_CPG_CONFCHG_CALLBACK); - -- for (iter = process_info_list_head.next; iter != &process_info_list_head; ) { -- pi = list_entry(iter, struct process_info, list); -- iter = iter->next; -+ log_printf(LOGSYS_LEVEL_DEBUG, "got procleave message from cluster node %x (%s) for pid %u", -+ nodeid, -+ api->totem_ifaces_print(nodeid), -+ (unsigned int)req_exec_cpg_procjoin->pid); - -- if (pi->pid == req_exec_cpg_procjoin->pid && pi->nodeid == nodeid && -- mar_name_compare (&pi->group, &req_exec_cpg_procjoin->group_name)==0) { -- list_del (&pi->list); -- free (pi); -- } -- } -+ do_proc_leave (&req_exec_cpg_procjoin->group_name, -+ req_exec_cpg_procjoin->pid, nodeid, -+ req_exec_cpg_procjoin->reason); - } - - --- -1.7.1 - diff --git a/SOURCES/bz1067028-2-cpg-Make-sure-nodid-is-always-logged-as-hex-num.patch b/SOURCES/bz1067028-2-cpg-Make-sure-nodid-is-always-logged-as-hex-num.patch deleted file mode 100644 index 2123f0c..0000000 --- a/SOURCES/bz1067028-2-cpg-Make-sure-nodid-is-always-logged-as-hex-num.patch +++ /dev/null @@ -1,57 +0,0 @@ -From 83c63b247f4030fe8123df7c9f96d7a1c8e245b1 Mon Sep 17 00:00:00 2001 -From: Jan Friesse -Date: Tue, 11 Feb 2014 15:30:33 +0100 -Subject: [PATCH] cpg: Make sure nodid is always logged as hex num - -Also number is prefixed by 0x so it's easier to spot that number is -hexadecimal. - -Signed-off-by: Jan Friesse -Reviewed-by: Christine Caulfield ---- - exec/cpg.c | 8 ++++---- - 1 files changed, 4 insertions(+), 4 deletions(-) - -diff --git a/exec/cpg.c b/exec/cpg.c -index 9981440..db8d987 100644 ---- a/exec/cpg.c -+++ b/exec/cpg.c -@@ -1236,7 +1236,7 @@ static void message_handler_req_exec_cpg_downlist_old ( - const void *message, - unsigned int nodeid) - { -- log_printf (LOGSYS_LEVEL_WARNING, "downlist OLD from node %d", -+ log_printf (LOGSYS_LEVEL_WARNING, "downlist OLD from node 0x%x", - nodeid); - } - -@@ -1291,7 +1291,7 @@ static void message_handler_req_exec_cpg_procjoin ( - { - const struct req_exec_cpg_procjoin *req_exec_cpg_procjoin = message; - -- log_printf(LOGSYS_LEVEL_DEBUG, "got procjoin message from cluster node %d (%s) for pid %u", -+ log_printf(LOGSYS_LEVEL_DEBUG, "got procjoin message from cluster node 0x%x (%s) for pid %u", - nodeid, - api->totem_ifaces_print(nodeid), - (unsigned int)req_exec_cpg_procjoin->pid); -@@ -1307,7 +1307,7 @@ static void message_handler_req_exec_cpg_procleave ( - { - const struct req_exec_cpg_procjoin *req_exec_cpg_procjoin = message; - -- log_printf(LOGSYS_LEVEL_DEBUG, "got procleave message from cluster node %x (%s) for pid %u", -+ log_printf(LOGSYS_LEVEL_DEBUG, "got procleave message from cluster node 0x%x (%s) for pid %u", - nodeid, - api->totem_ifaces_print(nodeid), - (unsigned int)req_exec_cpg_procjoin->pid); -@@ -1328,7 +1328,7 @@ static void message_handler_req_exec_cpg_joinlist ( - const struct join_list_entry *jle = (const struct join_list_entry *)(message + sizeof(struct qb_ipc_response_header)); - struct joinlist_msg *stored_msg; - -- log_printf(LOGSYS_LEVEL_DEBUG, "got joinlist message from node %x", -+ log_printf(LOGSYS_LEVEL_DEBUG, "got joinlist message from node 0x%x", - nodeid); - - while ((const char*)jle < message + res->size) { --- -1.7.1 - diff --git a/SOURCES/bz1067028-3-cpg-Make-sure-left-nodes-are-really-removed.patch b/SOURCES/bz1067028-3-cpg-Make-sure-left-nodes-are-really-removed.patch deleted file mode 100644 index 6e2d0f5..0000000 --- a/SOURCES/bz1067028-3-cpg-Make-sure-left-nodes-are-really-removed.patch +++ /dev/null @@ -1,91 +0,0 @@ -From fbe8768f1bbab6d546023d70e7f7b91a9dc213b0 Mon Sep 17 00:00:00 2001 -From: Jan Friesse -Date: Mon, 17 Feb 2014 15:36:19 +0100 -Subject: [PATCH] cpg: Make sure left nodes are really removed - -When node is paused and other nodes has in meantime exited cpg process, -paused node after resume doesn't update it's membership correctly so on -previously paused node exited cpg process is still visible. - -Solution is to compare join list with cpd and remove all pids which are -not included in join list. - -Signed-off-by: Jan Friesse -Reviewed-by: Christine Caulfield ---- - exec/cpg.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 52 insertions(+), 0 deletions(-) - -diff --git a/exec/cpg.c b/exec/cpg.c -index db8d987..1c6fbb9 100644 ---- a/exec/cpg.c -+++ b/exec/cpg.c -@@ -931,6 +931,56 @@ static void downlist_master_choose_and_send (void) - qb_map_destroy(group_map); - } - -+/* -+ * Remove processes that might have left the group while we were suspended. -+ */ -+static void joinlist_remove_zombie_pi_entries (void) -+{ -+ struct list_head *pi_iter; -+ struct list_head *jl_iter; -+ struct process_info *pi; -+ struct joinlist_msg *stored_msg; -+ int found; -+ -+ for (pi_iter = process_info_list_head.next; pi_iter != &process_info_list_head; ) { -+ pi = list_entry (pi_iter, struct process_info, list); -+ pi_iter = pi_iter->next; -+ -+ /* -+ * Ignore local node -+ */ -+ if (pi->nodeid == api->totem_nodeid_get()) { -+ continue ; -+ } -+ -+ /* -+ * Try to find message in joinlist messages -+ */ -+ found = 0; -+ for (jl_iter = joinlist_messages_head.next; -+ jl_iter != &joinlist_messages_head; -+ jl_iter = jl_iter->next) { -+ -+ stored_msg = list_entry(jl_iter, struct joinlist_msg, list); -+ -+ if (stored_msg->sender_nodeid == api->totem_nodeid_get()) { -+ continue ; -+ } -+ -+ if (pi->nodeid == stored_msg->sender_nodeid && -+ pi->pid == stored_msg->pid && -+ mar_name_compare (&pi->group, &stored_msg->group_name) == 0) { -+ found = 1; -+ break ; -+ } -+ } -+ -+ if (!found) { -+ do_proc_leave(&pi->group, pi->pid, pi->nodeid, CONFCHG_CPG_REASON_PROCDOWN); -+ } -+ } -+} -+ - static void joinlist_inform_clients (void) - { - struct joinlist_msg *stored_msg; -@@ -957,6 +1007,8 @@ static void joinlist_inform_clients (void) - do_proc_join (&stored_msg->group_name, stored_msg->pid, stored_msg->sender_nodeid, - CONFCHG_CPG_REASON_NODEUP); - } -+ -+ joinlist_remove_zombie_pi_entries (); - } - - static void downlist_messages_delete (void) --- -1.7.1 - diff --git a/SOURCES/bz1078361-1-manpage-Fix-English.patch b/SOURCES/bz1078361-1-manpage-Fix-English.patch new file mode 100644 index 0000000..d3d0cfd --- /dev/null +++ b/SOURCES/bz1078361-1-manpage-Fix-English.patch @@ -0,0 +1,381 @@ +From f77a61ac1795e794244440e1bfe804f02cc5d2b6 Mon Sep 17 00:00:00 2001 +From: Christine Caulfield +Date: Mon, 13 Oct 2014 10:28:27 +0200 +Subject: [PATCH] manpage: Fix English + +While I was looking at the above man page changes I thought I'd review +the rest of it. So here are some more English fixes for the cmap_keys.8 +man page + +Signed-off-by: Christine Caulfield +Reviewed-by: Jan Friesse +--- + man/cmap_keys.8 | 154 +++++++++++++++++++++++++++--------------------------- + 1 files changed, 77 insertions(+), 77 deletions(-) + +diff --git a/man/cmap_keys.8 b/man/cmap_keys.8 +index 16b7d46..bda6615 100644 +--- a/man/cmap_keys.8 ++++ b/man/cmap_keys.8 +@@ -1,5 +1,5 @@ + .\"/* +-.\" * Copyright (c) 2012-2013 Red Hat, Inc. ++.\" * Copyright (c) 2012-2014 Red Hat, Inc. + .\" * + .\" * All rights reserved. + .\" * +@@ -39,135 +39,135 @@ cmap_keys \- Overview of keys stored in the Configuration Map + + .SH OVERVIEW + .P +-There are roughly 3 types of keys stored in CMAP: ++There are 3 main types of keys stored in CMAP: + .PP +-* Mapping of values stored in config file. ++* Mapping of values stored in the config file. + .PP + * Runtime statistics. + .PP + * Other user created values. + +-In this man page, wild-cards are used with usual meaning. ++In this man page, wild-cards have the usual meaning. + + .SH KEYS + .TP + internal_configuration.* +-Internal configuration data. This keys (whole prefix) is read only. +-It's only useful for getting list of loaded services. ++Internal configuration data. All keys in this prefix are read only. ++It's only useful for getting a list of loaded services. + + .TP + logging.* +-Values read from configuration file. It's possible to change them at runtime. +-If subsystem specific configuration is needed, key must be in form +-logging.logger_subsys.SERVICE.key, where SERVICE is upper case name of service and +-key is same as in configuration file. All values are of string type. ++Values read from the configuration file. It's possible to change them at runtime. ++If subsystem specific configuration is needed, the key must be in the form ++logging.logger_subsys.SERVICE.key, where SERVICE is upper case name of the service and ++key is same as in the configuration file. All values are of string type. + + .TP + nodelist.* +-Values read from configuration file. Each node element in configuration file gets +-assigned it's position starting from zero. So first node from config file has +-nodelist.node.0. prefix. To be valid entry, each node must have ++Values read from the configuration file. Each node element in the configuration file gets ++assigned it's position starting from zero. So the first node from the config file has ++nodelist.node.0. prefix. To be a valid entry, each node must have + .B ring0_addr + key. +-For change of ++To change the + .B nodeid +-key, use u32 data type. ++key, use a u32 data type. + + Local node position is stored in + .B local_node_pos + key (RO), so it's easy to find +-out nodeid/ring addresses of local node directly from cmap. ++out nodeid/ring addresses of the local node directly from cmap. + + .TP + runtime.blackbox.* +-Trigger keys for store fplay data. It's recommended to use corosync-blackbox command ++Trigger keys for storing fplay data. It's recommended that you the corosync-blackbox command + to change keys in this prefix. + + .TP + runtime.connections.* +-There are informations about total number of active connections in given moment in ++This is information about total number of active connections in a given moment in the + .B active +-key, number of closed connections during whole runtime of corosync in ++key, number of closed connections during whole runtime of corosync in the + .B closed +-key and informations about each active IPC connection. All keys in this prefix are read-only. ++key and information about each active IPC connection. All keys in this prefix are read-only. + + .TP + runtime.connections.ID.* +-Each IPC connection has unique ID. This is in form [[short_name:][PID:]internal_id. On some ++Each IPC connection has a unique ID. This is in the form [[short_name:][PID:]internal_id. On some + platforms, short_name and PID are not filled and only internal_id is used. + +-Typical keys in prefix are: ++Typical keys in this prefix are: + + .B client_pid + containing PID of IPC connection (unavailable on some platforms). + + .B dispatched +-with number of dispatched messages. ++number of dispatched messages. + + .B invalid_request +-is number of requests made by IPC which are invalid (calling non-existing call, ...). ++number of requests made by IPC which are invalid (calling non-existing call, ...). + + .B name +-containing short name of IPC connection (unavailable on some platforms). ++contains short name of the IPC connection (unavailable on some platforms). + + .B overload + is number of requests which were not processed because of overload. + + .B queue_size +-contains number of messages in queue waiting for send. ++contains the number of messages in the queue waiting for send. + + .B recv_retries +-is total number of interrupted receives. ++is the total number of interrupted receives. + + .B requests +-contains number of requests made by IPC. ++contains the number of requests made by IPC. + + .B responses +-is number of responses sent to IPC client. ++is the number of responses sent to the IPC client. + + .B send_retries +-contains total number of interrupted sends. ++contains the total number of interrupted sends. + + .B service_id +-contains ID of service which IPC is connected to. ++contains the ID of service which the IPC is connected to. + + .TP + runtime.services.* + Prefix with statistics for service engines. Each service has it's own + .B service_id +-key in prefix with name runtime.services.SERVICE., where SERVICE is lower case +-name of service. Inside service prefix is number of received and send messages +-by corosync engine in format runtime.services.SERVICE.EXEC_CALL.rx and +-runtime.services.SERVICE.EXEC_CALL.tx, where EXEC_CALL is internal id of service ++key in the prefix with the name runtime.services.SERVICE., where SERVICE is the lower case ++name of the service. Inside the service prefix is the number of messages received and sent ++by the corosync engine in the format runtime.services.SERVICE.EXEC_CALL.rx and ++runtime.services.SERVICE.EXEC_CALL.tx, where EXEC_CALL is the internal id of the service + call (so for example 3 in cpg service is receive of multicast message from other + nodes). + + .TP + runtime.totem.pg.mrp.srp.* +-Prefix with statistics about totem. All keys there are read only. ++Prefix containing statistics about totem. All keys here are read only. + Typical key prefixes: + + .B commit_entered +-Number of times processor entered COMMIT state. ++Number of times the processor entered COMMIT state. + + .B commit_token_lost +-Number of times processor lost token in COMMIT state. ++Number of times the processor lost token in COMMIT state. + + .B consensus_timeouts +-How many times processor timeouted making consensus about membership. ++How many times the processor timed out forming a consensus about membership. + + .B continuous_gather +-How many times was processor not able to reach consensus. ++How many times the processor was not able to reach consensus. + + .B firewall_enabled_or_nic_failure +-Set to 1 when processor was not able to reach consensus for long time. Usual +-reason is badly configured firewall or connection failure. ++Set to 1 when processor was not able to reach consensus for long time. The usual ++reason is a badly configured firewall or connection failure. + + .B gather_entered +-Number of times processor entered GATHER state. ++Number of times the processor entered GATHER state. + + .B gather_token_lost +-Number of times processor lost token in GATHER state. ++Number of times the processor lost token in GATHER state. + + .B mcast_retx + Number of retransmitted messages. +@@ -203,13 +203,13 @@ Number of received orf tokens. + Number of transmitted orf tokens. + + .B recovery_entered +-Number of times processor entered recovery. ++Number of times the processor entered recovery. + + .B recovery_token_lost +-Number of times token was lost in recovery state. ++Number of times the token was lost in recovery state. + + .B rx_msg_dropped +-Number of received messages which was dropped because they were not expected ++Number of received messages which were dropped because they were not expected + (as example multicast message in commit state). + + .B token_hold_cancel_rx +@@ -223,14 +223,14 @@ Mean transit time of token in milliseconds. In other words, time between + two consecutive token receives. + + .B avg_token_workload +-Average time in milliseconds of holding time of token on current processor. ++Average time in milliseconds of holding time of token on the current processor. + + .B avg_backlog_calc +-Average number of not yet sent messages of current processor. ++Average number of not yet sent messages on the current processor. + + .TP + runtime.totem.pg.mrp.srp.members.* +-Prefix containing members of totem single ring protocol. Each member ++Prefix containing members of the totem single ring protocol. Each member + keys has format runtime.totem.pg.mrp.srp.members.NODEID.KEY, where key is + one of: + +@@ -238,35 +238,35 @@ one of: + IP address of member. It's stored in format r(RING_ID) ip(IP_ADDRESS). + + .B join_count +-Number of times processor joined membership with local processor. When ++Number of times the processor joined membership with local cluster. When + processor fails and rejoins again, this value is incremented. + + .B status +-Status of processor. Can be one of joined and left. ++Status of the processor. Can be one of joined and left. + + .B config_version +-Config version of member node. ++Config version of the member node. + + .TP + resources.process.PID.* + Prefix created by applications using SAM with CMAP integration. +-It contains following keys: ++It contains the following keys: + + .B recovery +-Recovery policy of process. Can be one of quit or restart. ++Recovery policy of the process. Can be one of quit or restart. + + .B poll_period +-Value passed in sam_initialize as time_interval. ++Value passed in sam_initialize as a time_interval. + + .B last_updated +-Last time when SAM received heartbeat from client. ++Last time SAM received a heartbeat from the client. + + .B state +-State of client. Can be one of failed, stopped, running and waiting for quorum. ++State of the client. Can be one of failed, stopped, running and waiting for quorum. + + .TP + uidgid.* +-Informations about users/groups which are allowed to do IPC connection to ++Informations about users/groups which are allowed to make IPC connections to + corosync. + + .TP +@@ -276,7 +276,7 @@ to unblock quorum if notes are known to be down. for pcs use only. + + .TP + config.reload_in_progress +-This value will be set to 1 (or created) when corosync.conf reload is started, ++This value will be set to 1 (or created) when a corosync.conf reload is started, + and set to 0 when the reload is completed. This allows interested subsystems + to do atomic reconfiguration rather than changing each key. Note that + individual add/change/delete notifications will still be sent during a reload. +@@ -285,33 +285,33 @@ individual add/change/delete notifications will still be sent during a reload. + config.totemconfig_reload_in_progress + This key is similar to + .B config.totemconfig_reload_in_progress +-but changed after totem config trigger is processed. It is useful (mainly) ++but changed after the totem config trigger is processed. It is useful (mainly) + for situations when + .B nodelist.local_node_pos +-must be first correctly reinstated. ++must be correctly reinstated before anything else. + + .SH DYNAMIC CHANGE USER/GROUP PERMISSION TO USE COROSYNC IPC +-Is very same as in configuration file. To add UID 500 use ++Is the same as in the configuration file. eg: to add UID 500 use + + .br + # corosync-cmapctl -s uidgid.uid.500 u8 1 + +-GID is similar, so to add GID use ++GID is similar, so to add a GID use + + .br + # corosync-cmapctl -s uidgid.gid.500 u8 1 + +-For removal of permission, simply delete key ++For removal of permissions, simply delete the key + + .br + # corosync-cmapctl -d uidgid.gid.500 + + .SH DYNAMIC ADD/REMOVE OF UDPU NODE +-We will need to add node with address 10.34.38.108 ++Eg. To add the node with address 10.34.38.108 + and nodeid 3. This node is called NEW and it's not running corosync yet. + + .PP +-* Find a node position in node list which is not used yet. It's recommended to ++* Find a node position in the node list which is not used yet. It's recommended that you + use highest_number + 1. Let's say output of corosync-cmapctl looks like: + + .br +@@ -327,32 +327,32 @@ nodelist.node.1.ring0_addr (str) = 10.34.38.107 + + So next node position will be 2. + .PP +-* Add all entries needed for node on all running nodes, as: ++* Add all entries needed for the node on all running nodes, as: + + .br + # corosync-cmapctl -s nodelist.node.2.nodeid u32 3 + .br + # corosync-cmapctl -s nodelist.node.2.ring0_addr str 10.34.38.108 + +-Always add ring0_addr key as last. Corosync engine on all nodes should reply ++Always add the ring0_addr key last. The Corosync engine on all nodes should reply + with + .I notice [TOTEM ] adding new UDPU member {10.34.38.108} + message. + .PP +-* Add node information to configuration file on all nodes so it +-will survive restart of corosync. ++* Add node information to the configuration file on all nodes so that it ++will survive a restart of corosync. + .PP +-* Copy and edit configuration file to NEW node. ++* Copy and edit configuration file to the NEW node. + .PP +-* Start corosync on NEW node. ++* Start corosync on the NEW node. + +-Removal of UDPU node is very similar slightly reversed action, so ++Removal of a UDPU node is a very similar, slightly reversed action, so + .PP +-* Stop corosync old OLD node. ++* Stop corosync on the OLD node. + .PP +-* Remove relevant entries from cmap on all nodes. ++* Remove the relevant entries from cmap on all nodes. + .PP +-* Change configuration file on all nodes. ++* Change the configuration file on all nodes. + + .SH "SEE ALSO" + .BR corosync_overview (8), +-- +1.7.1 + diff --git a/SOURCES/bz1078361-2-Store-configuration-values-used-by-totem-to-cmap.patch b/SOURCES/bz1078361-2-Store-configuration-values-used-by-totem-to-cmap.patch new file mode 100644 index 0000000..95f6f53 --- /dev/null +++ b/SOURCES/bz1078361-2-Store-configuration-values-used-by-totem-to-cmap.patch @@ -0,0 +1,91 @@ +From bb52fc2774ef690d6bb951fe9cc34e5b373caffe Mon Sep 17 00:00:00 2001 +From: Jan Friesse +Date: Mon, 13 Oct 2014 11:58:58 +0200 +Subject: [PATCH] Store configuration values used by totem to cmap + +Some totem configuration values (like token, consensus, ...) are ether +computed or default value is used. It's hard to find out, what +value is really used. + +Solution is to store values in cmap. + +Signed-off-by: Jan Friesse +Reviewed-by: Christine Caulfield +--- + exec/main.c | 1 + + exec/totemconfig.c | 14 ++++++++++++++ + man/cmap_keys.8 | 8 ++++++++ + 3 files changed, 23 insertions(+), 0 deletions(-) + +diff --git a/exec/main.c b/exec/main.c +index 0edd4bf..e423c97 100644 +--- a/exec/main.c ++++ b/exec/main.c +@@ -1061,6 +1061,7 @@ static void set_icmap_ro_keys_flag (void) + icmap_set_ro_access("runtime.connections.", CS_TRUE, CS_TRUE); + icmap_set_ro_access("runtime.totem.", CS_TRUE, CS_TRUE); + icmap_set_ro_access("runtime.services.", CS_TRUE, CS_TRUE); ++ icmap_set_ro_access("runtime.config.", CS_TRUE, CS_TRUE); + + /* + * Set RO flag for constrete keys of configuration which can't be changed +diff --git a/exec/totemconfig.c b/exec/totemconfig.c +index abaabdf..daf0719 100644 +--- a/exec/totemconfig.c ++++ b/exec/totemconfig.c +@@ -142,12 +142,21 @@ static void totem_volatile_config_set_value (struct totem_config *totem_config, + const char *key_name, const char *deleted_key, unsigned int default_value, + int allow_zero_value) + { ++ char runtime_key_name[ICMAP_KEYNAME_MAXLEN]; + + if (icmap_get_uint32(key_name, totem_get_param_by_name(totem_config, key_name)) != CS_OK || + (deleted_key != NULL && strcmp(deleted_key, key_name) == 0) || + (!allow_zero_value && *totem_get_param_by_name(totem_config, key_name) == 0)) { + *totem_get_param_by_name(totem_config, key_name) = default_value; + } ++ ++ /* ++ * Store totem_config value to cmap runtime section ++ */ ++ strcpy(runtime_key_name, "runtime.config."); ++ strcat(runtime_key_name, key_name); ++ ++ icmap_set_uint32(runtime_key_name, *totem_get_param_by_name(totem_config, key_name)); + } + + +@@ -169,6 +178,11 @@ static void totem_volatile_config_read (struct totem_config *totem_config, const + u32 = TOKEN_COEFFICIENT; + icmap_get_uint32("totem.token_coefficient", &u32); + totem_config->token_timeout += (totem_config->interfaces[0].member_count - 2) * u32; ++ ++ /* ++ * Store totem_config value to cmap runtime section ++ */ ++ icmap_set_uint32("runtime.config.totem.token", totem_config->token_timeout); + } + + totem_volatile_config_set_value(totem_config, "totem.max_network_delay", deleted_key, MAX_NETWORK_DELAY, 0); +diff --git a/man/cmap_keys.8 b/man/cmap_keys.8 +index bda6615..f19d2c9 100644 +--- a/man/cmap_keys.8 ++++ b/man/cmap_keys.8 +@@ -132,6 +132,14 @@ contains the total number of interrupted sends. + contains the ID of service which the IPC is connected to. + + .TP ++runtime.config.* ++Contains the values actually in use by the totem membership protocol. ++Values here are either taken from the Corosync configuration file, ++defaults or computed from entries in the config file. For information ++on individual keys please refer to the man page ++.BR corosync.conf (5). ++ ++.TP + runtime.services.* + Prefix with statistics for service engines. Each service has it's own + .B service_id +-- +1.7.1 + diff --git a/SOURCES/bz1078361-3-man-page-Improve-description-of-token-timeout.patch b/SOURCES/bz1078361-3-man-page-Improve-description-of-token-timeout.patch new file mode 100644 index 0000000..253ef42 --- /dev/null +++ b/SOURCES/bz1078361-3-man-page-Improve-description-of-token-timeout.patch @@ -0,0 +1,43 @@ +From 57539d1abc09e5aef322cb9cca5b3e6c496cfae9 Mon Sep 17 00:00:00 2001 +From: Jan Friesse +Date: Thu, 9 Oct 2014 16:19:39 +0200 +Subject: [PATCH] man page: Improve description of token timeout + +With introduction of token_coefficient, token timeout defined in +configuration file may be no longer reflect real token timeout, what may +be confusing. + +Enhanced description hopefully fix that. + +Signed-off-by: Jan Friesse +Reviewed-by: Christine Caulfield +--- + man/corosync.conf.5 | 8 +++++++- + 1 files changed, 7 insertions(+), 1 deletions(-) + +diff --git a/man/corosync.conf.5 b/man/corosync.conf.5 +index 8fb7a0b..95eca2d 100644 +--- a/man/corosync.conf.5 ++++ b/man/corosync.conf.5 +@@ -280,11 +280,17 @@ by reducing the token timeout. + + .TP + token +-This timeout specifies in milliseconds until a token loss is declared after not ++This timeout is used directly or as a base for real token timeout calculation (explained in ++.B token_coefficient ++section). Token timeout specifies in milliseconds until a token loss is declared after not + receiving a token. This is the time spent detecting a failure of a processor + in the current configuration. Reforming a new configuration takes about 50 + milliseconds in addition to this timeout. + ++For real token timeout used by totem it's possible to read cmap value of ++.B runtime.config.token ++key. ++ + The default is 1000 milliseconds. + + .TP +-- +1.7.1 + diff --git a/SOURCES/bz1136429-1-crypto-fix-crypto-block-rounding-padding-calculation.patch b/SOURCES/bz1136429-1-crypto-fix-crypto-block-rounding-padding-calculation.patch new file mode 100644 index 0000000..4607846 --- /dev/null +++ b/SOURCES/bz1136429-1-crypto-fix-crypto-block-rounding-padding-calculation.patch @@ -0,0 +1,69 @@ +From 239e2397820f9fa7ef430ebef0947ec1246eb50f Mon Sep 17 00:00:00 2001 +From: Fabio M. Di Nitto +Date: Tue, 2 Sep 2014 13:03:43 +0200 +Subject: [PATCH] [crypto] fix crypto block rounding/padding calculation + +libnss is "weird" in this respect as some block sizes are hardcoded, +others need to be determined dynamically. + +For AES we need to use the values we know since GetBlockSize would +return errors, for 3des (that hopefully nobody is using) the value +returned by GetBlockSize is 8, but let's use the call into libnss +to avoid possible conflicts with distro patching or older versions. + +Now, given the correct block size, the old calculation simply added +block size to the hdr_size. This is not sufficient. + +We use _PAD encryption methods and we need to take that into account. + +_PAD is calculated given the current input buf len and rounded up +to block size boundary, then block_size is added. + +Ideally we would do that on a per packet base but current transport +infrastructure doesn't allow it yet. + +So round up the hdr_size to double the block_size reported by the +cipher. + +Signed-off-by: Fabio M. Di Nitto +Reviewed-by: Christine Caulfield +--- + exec/totemcrypto.c | 15 ++++++++++++++- + 1 files changed, 14 insertions(+), 1 deletions(-) + +diff --git a/exec/totemcrypto.c b/exec/totemcrypto.c +index 69818b8..a97ba62 100644 +--- a/exec/totemcrypto.c ++++ b/exec/totemcrypto.c +@@ -666,6 +666,7 @@ size_t crypto_sec_header_size( + int crypto_cipher = string_to_crypto_cipher_type(crypto_cipher_type); + int crypto_hash = string_to_crypto_hash_type(crypto_hash_type); + size_t hdr_size = 0; ++ int block_size = 0; + + hdr_size = sizeof(struct crypto_config_header); + +@@ -675,7 +676,19 @@ size_t crypto_sec_header_size( + + if (crypto_cipher) { + hdr_size += SALT_SIZE; +- hdr_size += cypher_block_len[crypto_cipher]; ++ if (cypher_block_len[crypto_cipher]) { ++ block_size = cypher_block_len[crypto_cipher]; ++ } else { ++ block_size = PK11_GetBlockSize(crypto_cipher, NULL); ++ if (block_size < 0) { ++ /* ++ * failsafe. we can potentially lose up to 63 ++ * byte per packet, but better than fragmenting ++ */ ++ block_size = 64; ++ } ++ } ++ hdr_size += (block_size * 2); + } + + return hdr_size; +-- +1.7.1 + diff --git a/SOURCES/bz1136429-2-Adjust-MTU-for-IPv6-correctly.patch b/SOURCES/bz1136429-2-Adjust-MTU-for-IPv6-correctly.patch new file mode 100644 index 0000000..167aca4 --- /dev/null +++ b/SOURCES/bz1136429-2-Adjust-MTU-for-IPv6-correctly.patch @@ -0,0 +1,103 @@ +From 03f95ddaa1d223e1e93788a307dc1b36d86b22b5 Mon Sep 17 00:00:00 2001 +From: Jan Friesse +Date: Tue, 30 Sep 2014 17:06:36 +0200 +Subject: [PATCH] Adjust MTU for IPv6 correctly + +MTU for IPv6 is 20 bytes larger then IPv4. This fact was not taken into +account so IPv6 packets were larger then MTU resulting in fragmentation. + +Solution is to substract correct IP header size. + +Signed-off-by: Jan Friesse +Reviewed-by: Christine Caulfield +--- + exec/totemip.c | 22 ++++++++++++++++++++++ + exec/totemudp.c | 6 ++++-- + exec/totemudpu.c | 6 ++++-- + include/corosync/totem/totemip.h | 2 ++ + 4 files changed, 32 insertions(+), 4 deletions(-) + +diff --git a/exec/totemip.c b/exec/totemip.c +index 7ba746e..28a8836 100644 +--- a/exec/totemip.c ++++ b/exec/totemip.c +@@ -488,3 +488,25 @@ finished: + totemip_freeifaddrs(&addrs); + return (res); + } ++ ++#define TOTEMIP_UDP_HEADER_SIZE 8 ++#define TOTEMIP_IPV4_HEADER_SIZE 20 ++#define TOTEMIP_IPV6_HEADER_SIZE 40 ++ ++size_t totemip_udpip_header_size(int family) ++{ ++ size_t header_size; ++ ++ header_size = 0; ++ ++ switch (family) { ++ case AF_INET: ++ header_size = TOTEMIP_UDP_HEADER_SIZE + TOTEMIP_IPV4_HEADER_SIZE; ++ break; ++ case AF_INET6: ++ header_size = TOTEMIP_UDP_HEADER_SIZE + TOTEMIP_IPV6_HEADER_SIZE; ++ break; ++ } ++ ++ return (header_size); ++} +diff --git a/exec/totemudp.c b/exec/totemudp.c +index 4577107..86059af 100644 +--- a/exec/totemudp.c ++++ b/exec/totemudp.c +@@ -1316,10 +1316,12 @@ extern int totemudp_iface_check (void *udp_context) + + extern void totemudp_net_mtu_adjust (void *udp_context, struct totem_config *totem_config) + { +-#define UDPIP_HEADER_SIZE (20 + 8) /* 20 bytes for ip 8 bytes for udp */ ++ ++ assert(totem_config->interface_count > 0); ++ + totem_config->net_mtu -= crypto_sec_header_size(totem_config->crypto_cipher_type, + totem_config->crypto_hash_type) + +- UDPIP_HEADER_SIZE; ++ totemip_udpip_header_size(totem_config->interfaces[0].bindnet.family); + } + + const char *totemudp_iface_print (void *udp_context) { +diff --git a/exec/totemudpu.c b/exec/totemudpu.c +index 69837c7..037f82b 100644 +--- a/exec/totemudpu.c ++++ b/exec/totemudpu.c +@@ -952,10 +952,12 @@ extern int totemudpu_iface_check (void *udpu_context) + + extern void totemudpu_net_mtu_adjust (void *udpu_context, struct totem_config *totem_config) + { +-#define UDPIP_HEADER_SIZE (20 + 8) /* 20 bytes for ip 8 bytes for udp */ ++ ++ assert(totem_config->interface_count > 0); ++ + totem_config->net_mtu -= crypto_sec_header_size(totem_config->crypto_cipher_type, + totem_config->crypto_hash_type) + +- UDPIP_HEADER_SIZE; ++ totemip_udpip_header_size(totem_config->interfaces[0].bindnet.family); + } + + const char *totemudpu_iface_print (void *udpu_context) { +diff --git a/include/corosync/totem/totemip.h b/include/corosync/totem/totemip.h +index 533735a..0168e66 100644 +--- a/include/corosync/totem/totemip.h ++++ b/include/corosync/totem/totemip.h +@@ -114,6 +114,8 @@ static inline int totemip_zero_check(const struct totem_ip_address *addr) + return (addr->family == 0); + } + ++extern size_t totemip_udpip_header_size(int family); ++ + #ifdef __cplusplus + } + #endif +-- +1.7.1 + diff --git a/SOURCES/bz1149916-1-init-Don-t-wait-for-ipc-if-corosync-doesn-t-start.patch b/SOURCES/bz1149916-1-init-Don-t-wait-for-ipc-if-corosync-doesn-t-start.patch new file mode 100644 index 0000000..f2e66e0 --- /dev/null +++ b/SOURCES/bz1149916-1-init-Don-t-wait-for-ipc-if-corosync-doesn-t-start.patch @@ -0,0 +1,39 @@ +From b627844f3d5c5788bd8bb140d8852ba666da16aa Mon Sep 17 00:00:00 2001 +From: Jan Friesse +Date: Tue, 7 Oct 2014 17:49:10 +0200 +Subject: [PATCH] init: Don't wait for ipc if corosync doesn't start + +Init script now checks return code of executing corosync command. If it +fails, ipc_wait section is skipped, resulting in much faster failure of +init script. + +Signed-off-by: Jan Friesse +Reviewed-by: Fabio M. Di Nitto +--- + init/corosync.in | 7 ++++--- + 1 files changed, 4 insertions(+), 3 deletions(-) + +diff --git a/init/corosync.in b/init/corosync.in +index 9b9c66f..c93f971 100755 +--- a/init/corosync.in ++++ b/init/corosync.in +@@ -115,12 +115,13 @@ start() + else + $prog $COROSYNC_OPTIONS > /dev/null 2>&1 + +- if ! wait_for_ipc; then ++ if [ "$?" != 0 ] || ! wait_for_ipc; then + failure + rtrn=1 ++ else ++ touch $LOCK_FILE ++ success + fi +- touch $LOCK_FILE +- success + fi + echo + } +-- +1.7.1 + diff --git a/SOURCES/bz1157702-1-crypto-fix-crypto-block-rounding-padding-calculation.patch b/SOURCES/bz1157702-1-crypto-fix-crypto-block-rounding-padding-calculation.patch deleted file mode 100644 index 4607846..0000000 --- a/SOURCES/bz1157702-1-crypto-fix-crypto-block-rounding-padding-calculation.patch +++ /dev/null @@ -1,69 +0,0 @@ -From 239e2397820f9fa7ef430ebef0947ec1246eb50f Mon Sep 17 00:00:00 2001 -From: Fabio M. Di Nitto -Date: Tue, 2 Sep 2014 13:03:43 +0200 -Subject: [PATCH] [crypto] fix crypto block rounding/padding calculation - -libnss is "weird" in this respect as some block sizes are hardcoded, -others need to be determined dynamically. - -For AES we need to use the values we know since GetBlockSize would -return errors, for 3des (that hopefully nobody is using) the value -returned by GetBlockSize is 8, but let's use the call into libnss -to avoid possible conflicts with distro patching or older versions. - -Now, given the correct block size, the old calculation simply added -block size to the hdr_size. This is not sufficient. - -We use _PAD encryption methods and we need to take that into account. - -_PAD is calculated given the current input buf len and rounded up -to block size boundary, then block_size is added. - -Ideally we would do that on a per packet base but current transport -infrastructure doesn't allow it yet. - -So round up the hdr_size to double the block_size reported by the -cipher. - -Signed-off-by: Fabio M. Di Nitto -Reviewed-by: Christine Caulfield ---- - exec/totemcrypto.c | 15 ++++++++++++++- - 1 files changed, 14 insertions(+), 1 deletions(-) - -diff --git a/exec/totemcrypto.c b/exec/totemcrypto.c -index 69818b8..a97ba62 100644 ---- a/exec/totemcrypto.c -+++ b/exec/totemcrypto.c -@@ -666,6 +666,7 @@ size_t crypto_sec_header_size( - int crypto_cipher = string_to_crypto_cipher_type(crypto_cipher_type); - int crypto_hash = string_to_crypto_hash_type(crypto_hash_type); - size_t hdr_size = 0; -+ int block_size = 0; - - hdr_size = sizeof(struct crypto_config_header); - -@@ -675,7 +676,19 @@ size_t crypto_sec_header_size( - - if (crypto_cipher) { - hdr_size += SALT_SIZE; -- hdr_size += cypher_block_len[crypto_cipher]; -+ if (cypher_block_len[crypto_cipher]) { -+ block_size = cypher_block_len[crypto_cipher]; -+ } else { -+ block_size = PK11_GetBlockSize(crypto_cipher, NULL); -+ if (block_size < 0) { -+ /* -+ * failsafe. we can potentially lose up to 63 -+ * byte per packet, but better than fragmenting -+ */ -+ block_size = 64; -+ } -+ } -+ hdr_size += (block_size * 2); - } - - return hdr_size; --- -1.7.1 - diff --git a/SOURCES/bz1157702-2-Adjust-MTU-for-IPv6-correctly.patch b/SOURCES/bz1157702-2-Adjust-MTU-for-IPv6-correctly.patch deleted file mode 100644 index 167aca4..0000000 --- a/SOURCES/bz1157702-2-Adjust-MTU-for-IPv6-correctly.patch +++ /dev/null @@ -1,103 +0,0 @@ -From 03f95ddaa1d223e1e93788a307dc1b36d86b22b5 Mon Sep 17 00:00:00 2001 -From: Jan Friesse -Date: Tue, 30 Sep 2014 17:06:36 +0200 -Subject: [PATCH] Adjust MTU for IPv6 correctly - -MTU for IPv6 is 20 bytes larger then IPv4. This fact was not taken into -account so IPv6 packets were larger then MTU resulting in fragmentation. - -Solution is to substract correct IP header size. - -Signed-off-by: Jan Friesse -Reviewed-by: Christine Caulfield ---- - exec/totemip.c | 22 ++++++++++++++++++++++ - exec/totemudp.c | 6 ++++-- - exec/totemudpu.c | 6 ++++-- - include/corosync/totem/totemip.h | 2 ++ - 4 files changed, 32 insertions(+), 4 deletions(-) - -diff --git a/exec/totemip.c b/exec/totemip.c -index 7ba746e..28a8836 100644 ---- a/exec/totemip.c -+++ b/exec/totemip.c -@@ -488,3 +488,25 @@ finished: - totemip_freeifaddrs(&addrs); - return (res); - } -+ -+#define TOTEMIP_UDP_HEADER_SIZE 8 -+#define TOTEMIP_IPV4_HEADER_SIZE 20 -+#define TOTEMIP_IPV6_HEADER_SIZE 40 -+ -+size_t totemip_udpip_header_size(int family) -+{ -+ size_t header_size; -+ -+ header_size = 0; -+ -+ switch (family) { -+ case AF_INET: -+ header_size = TOTEMIP_UDP_HEADER_SIZE + TOTEMIP_IPV4_HEADER_SIZE; -+ break; -+ case AF_INET6: -+ header_size = TOTEMIP_UDP_HEADER_SIZE + TOTEMIP_IPV6_HEADER_SIZE; -+ break; -+ } -+ -+ return (header_size); -+} -diff --git a/exec/totemudp.c b/exec/totemudp.c -index 4577107..86059af 100644 ---- a/exec/totemudp.c -+++ b/exec/totemudp.c -@@ -1316,10 +1316,12 @@ extern int totemudp_iface_check (void *udp_context) - - extern void totemudp_net_mtu_adjust (void *udp_context, struct totem_config *totem_config) - { --#define UDPIP_HEADER_SIZE (20 + 8) /* 20 bytes for ip 8 bytes for udp */ -+ -+ assert(totem_config->interface_count > 0); -+ - totem_config->net_mtu -= crypto_sec_header_size(totem_config->crypto_cipher_type, - totem_config->crypto_hash_type) + -- UDPIP_HEADER_SIZE; -+ totemip_udpip_header_size(totem_config->interfaces[0].bindnet.family); - } - - const char *totemudp_iface_print (void *udp_context) { -diff --git a/exec/totemudpu.c b/exec/totemudpu.c -index 69837c7..037f82b 100644 ---- a/exec/totemudpu.c -+++ b/exec/totemudpu.c -@@ -952,10 +952,12 @@ extern int totemudpu_iface_check (void *udpu_context) - - extern void totemudpu_net_mtu_adjust (void *udpu_context, struct totem_config *totem_config) - { --#define UDPIP_HEADER_SIZE (20 + 8) /* 20 bytes for ip 8 bytes for udp */ -+ -+ assert(totem_config->interface_count > 0); -+ - totem_config->net_mtu -= crypto_sec_header_size(totem_config->crypto_cipher_type, - totem_config->crypto_hash_type) + -- UDPIP_HEADER_SIZE; -+ totemip_udpip_header_size(totem_config->interfaces[0].bindnet.family); - } - - const char *totemudpu_iface_print (void *udpu_context) { -diff --git a/include/corosync/totem/totemip.h b/include/corosync/totem/totemip.h -index 533735a..0168e66 100644 ---- a/include/corosync/totem/totemip.h -+++ b/include/corosync/totem/totemip.h -@@ -114,6 +114,8 @@ static inline int totemip_zero_check(const struct totem_ip_address *addr) - return (addr->family == 0); - } - -+extern size_t totemip_udpip_header_size(int family); -+ - #ifdef __cplusplus - } - #endif --- -1.7.1 - diff --git a/SOURCES/bz1184154-1-Handle-adding-and-removing-UDPU-members-atomically.patch b/SOURCES/bz1184154-1-Handle-adding-and-removing-UDPU-members-atomically.patch new file mode 100644 index 0000000..5abc829 --- /dev/null +++ b/SOURCES/bz1184154-1-Handle-adding-and-removing-UDPU-members-atomically.patch @@ -0,0 +1,303 @@ +From d77cec24d0025d353681762fe707794c621665c7 Mon Sep 17 00:00:00 2001 +From: Jan Friesse +Date: Wed, 21 Jan 2015 13:30:48 +0100 +Subject: [PATCH] Handle adding and removing UDPU members atomically + +When config file is reloaded with removed UDPU member, internal icmap +index of nodelist.node can change. This can result in removal and then +adding back node. This, with UDPU alive filtering (where member is by +default considered as not a member) makes corosync not sending messages +to such members resulting in new membership creation. + +Solution is to properly test which members were really deleted and added +(instead of relying on internal and dynamic naming of icmap hash table +key name). + +Also trully dynamic add and remove node (via cmap) is now handled by +same function so totem_config->interfaces is now updated properly. + +Signed-off-by: Jan Friesse +Reviewed-by: Fabio M. Di Nitto +--- + exec/main.c | 67 ------------------------- + exec/totemconfig.c | 137 ++++++++++++++++++++++++++++++++++++++++++++++++++- + 2 files changed, 134 insertions(+), 70 deletions(-) + +diff --git a/exec/main.c b/exec/main.c +index 85c74ee..0ca5634 100644 +--- a/exec/main.c ++++ b/exec/main.c +@@ -583,71 +583,6 @@ static void corosync_totem_stats_updater (void *data) + &corosync_stats_timer_handle); + } + +-static void totem_dynamic_notify( +- int32_t event, +- const char *key_name, +- struct icmap_notify_value new_val, +- struct icmap_notify_value old_val, +- void *user_data) +-{ +- int res; +- unsigned int ring_no; +- unsigned int member_no; +- struct totem_ip_address member; +- int add_new_member = 0; +- int remove_old_member = 0; +- char tmp_str[ICMAP_KEYNAME_MAXLEN]; +- +- res = sscanf(key_name, "nodelist.node.%u.ring%u%s", &member_no, &ring_no, tmp_str); +- if (res != 3) +- return ; +- +- if (strcmp(tmp_str, "_addr") != 0) { +- return; +- } +- +- if (event == ICMAP_TRACK_ADD && new_val.type == ICMAP_VALUETYPE_STRING) { +- add_new_member = 1; +- } +- +- if (event == ICMAP_TRACK_DELETE && old_val.type == ICMAP_VALUETYPE_STRING) { +- remove_old_member = 1; +- } +- +- if (event == ICMAP_TRACK_MODIFY && new_val.type == ICMAP_VALUETYPE_STRING && +- old_val.type == ICMAP_VALUETYPE_STRING) { +- add_new_member = 1; +- remove_old_member = 1; +- } +- +- if (remove_old_member) { +- log_printf(LOGSYS_LEVEL_DEBUG, +- "removing dynamic member %s for ring %u", (char *)old_val.data, ring_no); +- if (totemip_parse(&member, (char *)old_val.data, ip_version) == 0) { +- totempg_member_remove (&member, ring_no); +- } +- } +- +- if (add_new_member) { +- log_printf(LOGSYS_LEVEL_DEBUG, +- "adding dynamic member %s for ring %u", (char *)new_val.data, ring_no); +- if (totemip_parse(&member, (char *)new_val.data, ip_version) == 0) { +- totempg_member_add (&member, ring_no); +- } +- } +-} +- +-static void corosync_totem_dynamic_init (void) +-{ +- icmap_track_t icmap_track = NULL; +- +- icmap_track_add("nodelist.node.", +- ICMAP_TRACK_ADD | ICMAP_TRACK_DELETE | ICMAP_TRACK_MODIFY | ICMAP_TRACK_PREFIX, +- totem_dynamic_notify, +- NULL, +- &icmap_track); +-} +- + static void corosync_totem_stats_init (void) + { + icmap_set_uint32("runtime.totem.pg.mrp.srp.mtt_rx_token", 0); +@@ -660,7 +595,6 @@ static void corosync_totem_stats_init (void) + &corosync_stats_timer_handle); + } + +- + static void deliver_fn ( + unsigned int nodeid, + const void *msg, +@@ -1093,7 +1027,6 @@ static void main_service_ready (void) + cs_ipcs_init(); + corosync_totem_stats_init (); + corosync_fplay_control_init (); +- corosync_totem_dynamic_init (); + sync_init ( + corosync_sync_callbacks_retrieve, + corosync_sync_completed); +diff --git a/exec/totemconfig.c b/exec/totemconfig.c +index 2acee2a..b678752 100644 +--- a/exec/totemconfig.c ++++ b/exec/totemconfig.c +@@ -532,7 +532,73 @@ static int find_local_node_in_nodelist(struct totem_config *totem_config) + return (local_node_pos); + } + +-static void put_nodelist_members_to_config(struct totem_config *totem_config) ++/* ++ * Compute difference between two set of totem interface arrays. set1 and set2 ++ * are changed so for same ring, ip existing in both set1 and set2 are cleared ++ * (set to 0), and ips which are only in set1 or set2 remains untouched. ++ * totempg_node_add/remove is called. ++ */ ++static void compute_interfaces_diff(int interface_count, ++ struct totem_interface *set1, ++ struct totem_interface *set2) ++{ ++ int ring_no, set1_pos, set2_pos; ++ struct totem_ip_address empty_ip_address; ++ ++ memset(&empty_ip_address, 0, sizeof(empty_ip_address)); ++ ++ for (ring_no = 0; ring_no < interface_count; ring_no++) { ++ for (set1_pos = 0; set1_pos < set1[ring_no].member_count; set1_pos++) { ++ for (set2_pos = 0; set2_pos < set2[ring_no].member_count; set2_pos++) { ++ /* ++ * For current ring_no remove all set1 items existing ++ * in set2 ++ */ ++ if (memcmp(&set1[ring_no].member_list[set1_pos], ++ &set2[ring_no].member_list[set2_pos], ++ sizeof(struct totem_ip_address)) == 0) { ++ memset(&set1[ring_no].member_list[set1_pos], 0, ++ sizeof(struct totem_ip_address)); ++ memset(&set2[ring_no].member_list[set2_pos], 0, ++ sizeof(struct totem_ip_address)); ++ } ++ } ++ } ++ } ++ ++ for (ring_no = 0; ring_no < interface_count; ring_no++) { ++ for (set1_pos = 0; set1_pos < set1[ring_no].member_count; set1_pos++) { ++ /* ++ * All items which remained in set1 doesn't exists in set2 any longer so ++ * node has to be removed. ++ */ ++ if (memcmp(&set1[ring_no].member_list[set1_pos], &empty_ip_address, sizeof(empty_ip_address)) != 0) { ++ log_printf(LOGSYS_LEVEL_DEBUG, ++ "removing dynamic member %s for ring %u", ++ totemip_print(&set1[ring_no].member_list[set1_pos]), ++ ring_no); ++ ++ totempg_member_remove(&set1[ring_no].member_list[set1_pos], ring_no); ++ } ++ } ++ for (set2_pos = 0; set2_pos < set2[ring_no].member_count; set2_pos++) { ++ /* ++ * All items which remained in set2 doesn't existed in set1 so this is no node ++ * and has to be added. ++ */ ++ if (memcmp(&set2[ring_no].member_list[set2_pos], &empty_ip_address, sizeof(empty_ip_address)) != 0) { ++ log_printf(LOGSYS_LEVEL_DEBUG, ++ "adding dynamic member %s for ring %u", ++ totemip_print(&set2[ring_no].member_list[set2_pos]), ++ ring_no); ++ ++ totempg_member_add(&set2[ring_no].member_list[set2_pos], ring_no); ++ } ++ } ++ } ++} ++ ++static void put_nodelist_members_to_config(struct totem_config *totem_config, int reload) + { + icmap_iter_t iter, iter2; + const char *iter_key, *iter_key2; +@@ -544,6 +610,22 @@ static void put_nodelist_members_to_config(struct totem_config *totem_config) + int member_count; + unsigned int ringnumber = 0; + int i, j; ++ struct totem_interface *orig_interfaces = NULL; ++ struct totem_interface *new_interfaces = NULL; ++ ++ if (reload) { ++ /* ++ * We need to compute diff only for reload. Also for initial configuration ++ * not all totem structures are initialized so corosync will crash during ++ * member_add/remove ++ */ ++ orig_interfaces = malloc (sizeof (struct totem_interface) * INTERFACE_MAX); ++ assert(orig_interfaces != NULL); ++ new_interfaces = malloc (sizeof (struct totem_interface) * INTERFACE_MAX); ++ assert(new_interfaces != NULL); ++ ++ memcpy(orig_interfaces, totem_config->interfaces, sizeof (struct totem_interface) * INTERFACE_MAX); ++ } + + /* Clear out nodelist so we can put the new one in if needed */ + for (i = 0; i < totem_config->interface_count; i++) { +@@ -590,8 +672,51 @@ static void put_nodelist_members_to_config(struct totem_config *totem_config) + } + + icmap_iter_finalize(iter); ++ ++ if (reload) { ++ memcpy(new_interfaces, totem_config->interfaces, sizeof (struct totem_interface) * INTERFACE_MAX); ++ ++ compute_interfaces_diff(totem_config->interface_count, orig_interfaces, new_interfaces); ++ ++ free(new_interfaces); ++ free(orig_interfaces); ++ } ++} ++ ++static void nodelist_dynamic_notify( ++ int32_t event, ++ const char *key_name, ++ struct icmap_notify_value new_val, ++ struct icmap_notify_value old_val, ++ void *user_data) ++{ ++ int res; ++ unsigned int ring_no; ++ unsigned int member_no; ++ char tmp_str[ICMAP_KEYNAME_MAXLEN]; ++ uint8_t reloading; ++ struct totem_config *totem_config = (struct totem_config *)user_data; ++ ++ /* ++ * If a full reload is in progress then don't do anything until it's done and ++ * can reconfigure it all atomically ++ */ ++ if (icmap_get_uint8("config.totemconfig_reload_in_progress", &reloading) == CS_OK && reloading) { ++ return ; ++ } ++ ++ res = sscanf(key_name, "nodelist.node.%u.ring%u%s", &member_no, &ring_no, tmp_str); ++ if (res != 3) ++ return ; ++ ++ if (strcmp(tmp_str, "_addr") != 0) { ++ return; ++ } ++ ++ put_nodelist_members_to_config(totem_config, 1); + } + ++ + /* + * Tries to find node (node_pos) in config nodelist which address matches any + * local interface. Address can be stored in ring0_addr or if ipaddr_key_prefix is not NULL +@@ -999,7 +1124,7 @@ extern int totem_config_read ( + icmap_set_ro_access("nodelist.local_node_pos", 0, 1); + } + +- put_nodelist_members_to_config(totem_config); ++ put_nodelist_members_to_config(totem_config, 0); + } + + /* +@@ -1362,7 +1487,7 @@ static void totem_reload_notify( + + /* Reload has completed */ + if (*(uint8_t *)new_val.data == 0) { +- put_nodelist_members_to_config (totem_config); ++ put_nodelist_members_to_config (totem_config, 1); + totem_volatile_config_read (totem_config, NULL); + log_printf(LOGSYS_LEVEL_DEBUG, "Configuration reloaded. Dumping actual totem config."); + debug_dump_totem_config(totem_config); +@@ -1401,4 +1526,10 @@ static void add_totem_config_notification(struct totem_config *totem_config) + totem_reload_notify, + totem_config, + &icmap_track); ++ ++ icmap_track_add("nodelist.node.", ++ ICMAP_TRACK_ADD | ICMAP_TRACK_DELETE | ICMAP_TRACK_MODIFY | ICMAP_TRACK_PREFIX, ++ nodelist_dynamic_notify, ++ (void *)totem_config, ++ &icmap_track); + } +-- +1.7.1 + diff --git a/SPECS/corosync.spec b/SPECS/corosync.spec index cb21264..4bd49dd 100644 --- a/SPECS/corosync.spec +++ b/SPECS/corosync.spec @@ -20,21 +20,23 @@ Name: corosync Summary: The Corosync Cluster Engine and Application Programming Interfaces -Version: 2.3.3 -Release: 2%{?gitver}%{?dist}.1 +Version: 2.3.4 +Release: 4%{?gitver}%{?dist} License: BSD Group: System Environment/Base URL: http://www.corosync.org/ Source0: http://corosync.org/download/%{name}-%{version}%{?gittarver}.tar.gz -Patch0: bz1067028-1-cpg-Refactor-mh_req_exec_cpg_procleave.patch -Patch1: bz1067028-2-cpg-Make-sure-nodid-is-always-logged-as-hex-num.patch -Patch2: bz1067028-3-cpg-Make-sure-left-nodes-are-really-removed.patch -Patch3: bz1157702-1-crypto-fix-crypto-block-rounding-padding-calculation.patch -Patch4: bz1157702-2-Adjust-MTU-for-IPv6-correctly.patch +Patch0: bz1136429-1-crypto-fix-crypto-block-rounding-padding-calculation.patch +Patch1: bz1136429-2-Adjust-MTU-for-IPv6-correctly.patch +Patch2: bz1149916-1-init-Don-t-wait-for-ipc-if-corosync-doesn-t-start.patch +Patch3: bz1078361-1-manpage-Fix-English.patch +Patch4: bz1078361-2-Store-configuration-values-used-by-totem-to-cmap.patch +Patch5: bz1078361-3-man-page-Improve-description-of-token-timeout.patch +Patch6: bz1184154-1-Handle-adding-and-removing-UDPU-members-atomically.patch %if 0%{?rhel} -ExclusiveArch: i686 x86_64 +ExclusiveArch: i686 x86_64 s390x %endif # Runtime bits @@ -79,11 +81,13 @@ BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) %prep %setup -q -n %{name}-%{version}%{?gittarver} -%patch0 -p1 -b .bz1067028-1 -%patch1 -p1 -b .bz1067028-2 -%patch2 -p1 -b .bz1067028-3 -%patch3 -p1 -b .bz1157702-1 -%patch4 -p1 -b .bz1157702-2 +%patch0 -p1 -b .bz1136429-1 +%patch1 -p1 -b .bz1136429-2 +%patch2 -p1 -b .bz1149916-1 +%patch3 -p1 -b .bz1078361-1 +%patch4 -p1 -b .bz1078361-2 +%patch5 -p1 -b .bz1078361-3 +%patch6 -p1 -b .bz1184154-1 %build %if %{with runautogen} @@ -150,6 +154,9 @@ rm -rf %{buildroot}%{_docdir}/* mkdir -p %{buildroot}%{_sysconfdir}/sysconfig install -m 644 tools/corosync-notifyd.sysconfig.example \ %{buildroot}%{_sysconfdir}/sysconfig/corosync-notifyd +# /etc/sysconfig/corosync +install -m 644 init/corosync.sysconfig.example \ + %{buildroot}%{_sysconfdir}/sysconfig/corosync %clean rm -rf %{buildroot} @@ -206,6 +213,7 @@ fi %config(noreplace) %{_sysconfdir}/corosync/corosync.conf.example %config(noreplace) %{_sysconfdir}/corosync/corosync.conf.example.udpu %config(noreplace) %{_sysconfdir}/sysconfig/corosync-notifyd +%config(noreplace) %{_sysconfdir}/sysconfig/corosync %if %{with dbus} %{_sysconfdir}/dbus-1/system.d/corosync-signals.conf %endif @@ -342,13 +350,179 @@ The Corosync Cluster Engine APIs. %{_mandir}/man8/quorum_overview.8* %changelog -* Mon Nov 03 2014 Jan Friesse 2.3.3-2.1 -- Resolves: rhbz#1157702 - -- [crypto] fix crypto block rounding/padding calculation (rhbz#1157702) -- merge upstream commit 239e2397820f9fa7ef430ebef0947ec1246eb50f (rhbz#1157702) -- Adjust MTU for IPv6 correctly (rhbz#1157702) -- merge upstream commit 03f95ddaa1d223e1e93788a307dc1b36d86b22b5 (rhbz#1157702) +* Wed Jan 21 2015 Jan Friesse 2.3.4-4 +- Resolves: rhbz#1184154 + +- Handle adding and removing UDPU members atomically (rhbz#1184154) +- merge upstream commit d77cec24d0025d353681762fe707794c621665c7 (rhbz#1184154) + +* Mon Oct 13 2014 Jan Friesse 2.3.4-3 +- Resolves: rhbz#1078361 +- Resolves: rhbz#1136429 +- Resolves: rhbz#1149916 + +- [crypto] fix crypto block rounding/padding calculation (rhbz#1136429) +- merge upstream commit 239e2397820f9fa7ef430ebef0947ec1246eb50f (rhbz#1136429) +- Adjust MTU for IPv6 correctly (rhbz#1136429) +- merge upstream commit 03f95ddaa1d223e1e93788a307dc1b36d86b22b5 (rhbz#1136429) +- init: Don't wait for ipc if corosync doesn't start (rhbz#1149916) +- merge upstream commit b627844f3d5c5788bd8bb140d8852ba666da16aa (rhbz#1149916) +- manpage: Fix English (rhbz#1078361) +- merge upstream commit f77a61ac1795e794244440e1bfe804f02cc5d2b6 (rhbz#1078361) +- Store configuration values used by totem to cmap (rhbz#1078361) +- merge upstream commit bb52fc2774ef690d6bb951fe9cc34e5b373caffe (rhbz#1078361) +- man page: Improve description of token timeout (rhbz#1078361) +- merge upstream commit 57539d1abc09e5aef322cb9cca5b3e6c496cfae9 (rhbz#1078361) + +* Fri Sep 12 2014 Fabio M. Di Nitto 2.3.4-2 +- Resolves: rhbz#1140915 + +* Tue Aug 26 2014 Jan Friesse 2.3.4-1 +- Resolves: rhbz#1108522 + +* Tue Aug 26 2014 Jan Friesse 2.3.3-3 +- Resolves: rhbz#1059607 +- Resolves: rhbz#1069254 +- Resolves: rhbz#1074673 +- Resolves: rhbz#1078361 +- Resolves: rhbz#1078363 +- Resolves: rhbz#1085468 +- Resolves: rhbz#1086233 +- Resolves: rhbz#1108508 +- Resolves: rhbz#1108511 +- Resolves: rhbz#1108522 +- Resolves: rhbz#1108525 +- Resolves: rhbz#1108708 +- Resolves: rhbz#1117911 + +- Free object allocated at quorum_register_callback (rhbz#1059607) +- merge upstream commit fa71067a93ea99d8dc4812e3a028ae154216a91a (rhbz#1059607) +- votequorum: Add extended options to auto_tie_breaker (rhbz#1059607) +- merge upstream commit 90d448af3b4b4508ca890cce67113cb226475d3b (rhbz#1059607) +- totemsrp: Fix typo with cont gather (rhbz#1108508) +- merge upstream commit 38c04d9a66ba41dae14a57eba119dabb31cbb18f (rhbz#1108508) +- mon: Make mon compilable with libstatgrab ver 0.9 (rhbz#1108511) +- merge upstream commit e1e2390b61fb5d47a8639f2538721675dd411b08 (rhbz#1108511) +- mon: Fix comparsion typo (rhbz#1108511) +- merge upstream commit 57ff693b70cb7aaa81e52e9d24f38aa0399a8c46 (rhbz#1108511) +- mon: Pass correct pointer to inst (rhbz#1108511) +- merge upstream commit 099f704cdddfb3b72fe93fb1f4fc777672eb9fdf (rhbz#1108511) +- mon: Make monitoring work (rhbz#1108511) +- merge upstream commit ff67daa55f6cfcb48357a8fddaa312b9fb49602b (rhbz#1108511) +- votequorum: Properly initialize atb and atb_string (rhbz#1059607) +- merge upstream commit e1801ba49738a3ae2ba3ca08c2b74dda5ff9056c (rhbz#1059607) +- config: Handle totem_set_volatile_defaults errors (rhbz#1078361) +- merge upstream commit 2f0cad20a9a368683fd59a869b2cb360bd31f95b (rhbz#1078361) +- Log: Make reload of logging work (rhbz#1078361) +- merge upstream commit 1b6abcc7d5afd4651efcdba1a65effb259f6ee3e (rhbz#1078361) +- Really clear totemconfig nodes on reload (rhbz#1078361) +- merge upstream commit eeb2384157351ff460be0648d954e5e97213d532 (rhbz#1078361) +- totemconfig: Key change process dependencies (rhbz#1078361) +- merge upstream commit b95ebd640eb45267d69822c8292a0098a8e4180e (rhbz#1078361) +- totemconfig: Log errors on key change and reload (rhbz#1078361) +- merge upstream commit 9a8de87c34071f54a9e3b545a1a7460d64568579 (rhbz#1078361) +- Add token_coefficient option (rhbz#1078361) +- merge upstream commit 58176d6779a0f5ff23dabf61dff7544db29af25a (rhbz#1078361) +- init: Make init script configurable (rhbz#1078363) +- merge upstream commit 1f7e78ab9cc686a7528ac4601651ded9d204b01f (rhbz#1078363) +- config: Allow dynamic change of token_coefficient (rhbz#1078361) +- merge upstream commit 7557fdec487cb5fad7c449949ba58496bd396458 (rhbz#1078361) +- upstart: Make job conf file configurable (rhbz#1108522) +- merge upstream commit d23ee6a3e0d5299f488bf9abed98f1853fd0e8b0 (rhbz#1108522) +- Indent: Remove space in negation of expression (rhbz#1108522) +- merge upstream commit b6e2c8024dd314ce17eac4f3f83a2320ebb7017d (rhbz#1108522) +- Indent: Remove newline before else branch start (rhbz#1108522) +- merge upstream commit d0dc9ae93c6f41ab9139242d754428fcf9bcc653 (rhbz#1108522) +- totemiba: Add multicast recovery (rhbz#1108522) +- merge upstream commit 4d6a18d8a5c0001f2eaeebb79d75f999c671cb74 (rhbz#1108522) +- totemiba: Fix incorrect failed log message (rhbz#1108522) +- merge upstream commit e905f92bf532c291d9be23b6a16d972f36d5d464 (rhbz#1108522) +- logsys: Log error if blackbox cannot be created (rhbz#1108525) +- merge upstream commit 19c5b63ff5fae43c2acf28ce95cca6460f500176 (rhbz#1108525) +- logsys: Log warning if flightrecorder init fails (rhbz#1108525) +- merge upstream commit 8f13a983204c2bc16c7490cee6db90138ecc43f1 (rhbz#1108525) +- Introduce get_run_dir function (rhbz#1108525) +- merge upstream commit d310b251c3ba5e92c7ca1b8f6f8197d71141a8d6 (rhbz#1108525) +- Move ringid store and load from totem library (rhbz#1108525) +- merge upstream commit da46ecfc3087de97ad9a76fe6a156f10170503a2 (rhbz#1108525) +- init: change return value when starting corosync (rhbz#1078363) +- merge upstream commit 7a6cc6b5a2f6ec5d88e52e34e62f18db1915afd7 (rhbz#1078363) +- Install doc: Correct a typo (rhbz#1108522) +- merge upstream commit a64696698718071e4e531a5a3332c363742c550b (rhbz#1108522) +- coroparse: More strict numbers parsing (rhbz#1108708) +- merge upstream commit 4e9716ed30ffe6a5750f5c6c2565815e88413c23 (rhbz#1108708) +- Doc: Enhance INSTALL file a bit (rhbz#1108522) +- merge upstream commit e8a5c56ab27fff4beef910804841d73aaa17a6a1 (rhbz#1108522) +- Make config.reload_in_progress key read only (rhbz#1085468) +- merge upstream commit c8e3f14fdb284aadf023d7e62c0f951181f21736 (rhbz#1085468) +- votequorum: Do not process events during reload (rhbz#1085468) +- merge upstream commit 72cf15af27ea9dbf918839ac44929ed9c65eea5e (rhbz#1085468) +- systemd: Config example for corosync wd service (rhbz#1108522) +- merge upstream commit f6d6a9b0a0ca99a201bb9e9353a05075b700bcbd (rhbz#1108522) +- fix memory leak produced by 'corosync -v' (rhbz#1117911) +- merge upstream commit cc80c8567d6eec1d136f9e85d2f8dfb957337eef (rhbz#1117911) +- Handle SIGSEGV and SIGABRT signals (rhbz#1117911) +- merge upstream commit 384760cb670836dc37e243f594612c6e68f44351 (rhbz#1117911) +- Fix compiler warning introduced by previous patch (rhbz#1117911) +- merge upstream commit dfaca4b10a005681230a81e229384b6cd239b4f6 (rhbz#1117911) +- corosync-cmapctl: Allow -p option to delete keys (rhbz#1108522) +- merge upstream commit 7a4bb37723777bf6bcd08035696d8d7317c0ce1d (rhbz#1108522) +- Implement config file testing mode (rhbz#1108522) +- merge upstream commit e3ffd4fedc8158cdb5057f9fe40b6459e3d85846 (rhbz#1108522) +- cleanup after test-driver (rhbz#1108522) +- merge upstream commit c7ebb09530349b7b1bbec7b1d9ef4b05ad186a63 (rhbz#1108522) +- be consistent in using CPPFLAGS vs CFLAGS (rhbz#1108522) +- merge upstream commit 84b9e5989aa4a7090aeccbeb6cb8910735274a65 (rhbz#1108522) +- Slightly rework corosync-keygen. (rhbz#1108522) +- merge upstream commit 520fe686c5e45f0f7143e749a3f6c2001a2ea0d7 (rhbz#1108522) +- totemconfig: Free ifaddrs list (rhbz#1108522) +- merge upstream commit dc35bfae6213256fd7f0d5bf4dd9d5fa0f77a6f6 (rhbz#1108522) +- totemconfig: totem_config_get_ip_version (rhbz#1108522) +- merge upstream commit 10c80f454e70b42fc394d3326af1eb81c4be0d75 (rhbz#1108522) +- totemconfig: refactor nodelist_to_interface func (rhbz#1108522) +- merge upstream commit 63bf09776fb84e939cd56ec2c2d1bbea97c2e0e1 (rhbz#1108522) +- corosync-keygen: Replace printf/exit call with err (rhbz#1108522) +- merge upstream commit 0ce8d51c6d989c4e62d8c1f3fc42785c4f3d250c (rhbz#1108522) +- config: Fix typos (rhbz#1108522) +- merge upstream commit 3b8365e80668eea55bdd3f7178693c82884331ae (rhbz#1108522) +- totemconfig: Make sure join timeout is less than consensus (rhbz#1074673) +- merge upstream commit 88dbb9f722122f04dc7c95681375a53a3a1301a5 (rhbz#1074673) +- votequorum: Return current ring id in callback (rhbz#1108522) +- merge upstream commit 5f6f68805c48f8f72f66f7fff9abc44b4c65df1e (rhbz#1108522) +- votequorum: Add ring id to poll call (rhbz#1108522) +- merge upstream commit b8902464d1b040326108ce7ec0934c1de5fe04ee (rhbz#1108522) +- ipc: Process votequorum messages during sync (rhbz#1108522) +- merge upstream commit 7cad804629fe7d936d098569122f84979959b554 (rhbz#1108522) +- votequorum: Block sync until qdevice poll (rhbz#1108522) +- merge upstream commit b4c99346352ce39cf96f7b12943811c896b89caa (rhbz#1108522) +- testvotequorum2: Opt for polling with old ringid (rhbz#1108522) +- merge upstream commit f8413350b2df4e37822e6d34e9337da87993d271 (rhbz#1108522) +- votequorum: Make qdev timeout in sync configurable (rhbz#1108522) +- merge upstream commit 17488909d4ae0dc948eb9a4a15133570faaf9c0b (rhbz#1108522) +- Cancel token holding while in retransmition (rhbz#1108522) +- merge upstream commit f135b680967aaef1d466f40170c75ae3e470e147 (rhbz#1108522) +- votequorum: Add cmap key to reset wait_for_all (rhbz#1086233) +- merge upstream commit cbf753405b7924e48aa1838cc1d14044229449b3 (rhbz#1086233) +- quorumtool: Sort output by nodeid (rhbz#1108522) +- merge upstream commit ddb017fa0e2026ee4f0d05e9bf780898c32c129a (rhbz#1108522) +- YKD: Fix loading of YKD quorum module (rhbz#1108522) +- merge upstream commit 02f58aec9cd53887aa1dfe1616fcbb32671987d4 (rhbz#1108522) +- corosync-quorumtool: add sort options (rhbz#1108522) +- merge upstream commit f53580c2c1c8fa621cbc18de81974811799bafd8 (rhbz#1108522) +- TODO: Remove TODO file (rhbz#1108522) +- merge upstream commit c9232d5d6cbfb1e4de9eb09afadda630ad4fee83 (rhbz#1108522) +- Makefile: Do not install TODO file (rhbz#1108522) +- merge upstream commit 4b7293da7a03253a7f96401642e1afb006e7750c (rhbz#1108522) +- totem: Inform RRP about membership changes (rhbz#1069254) +- merge upstream commit acb55cdb03808a4cea745b1b6a80c7ef1769880f (rhbz#1069254) +- totemnet: Add totemnet_member_set_active (rhbz#1069254) +- merge upstream commit 4c717942cf5f35902be630f393b81a03a81bb194 (rhbz#1069254) +- totemrrp: Implement *_membership_changed (rhbz#1069254) +- merge upstream commit 371a99e96147f600510bd9d819b92a4de94fcc30 (rhbz#1069254) +- totemudpu: Implement member_set_active (rhbz#1069254) +- merge upstream commit 71f1b99649329ab06309791d0a621d3cfbb74bdb (rhbz#1069254) +- totemudpu: Send msgs to all members occasionally (rhbz#1069254) +- merge upstream commit 2429481b96d895c366ca27c82a2bd7cfee55af15 (rhbz#1069254) * Thu Feb 20 2014 Jan Friesse 2.3.3-2 - Resolves: rhbz#1067028