diff --git a/0001-totemip.c-Fixed-Evicted-from-CPG-membership.patch b/0001-totemip.c-Fixed-Evicted-from-CPG-membership.patch new file mode 100644 index 0000000..da057af --- /dev/null +++ b/0001-totemip.c-Fixed-Evicted-from-CPG-membership.patch @@ -0,0 +1,113 @@ +From 557370ad7a68d6a9676d3d029262f481b85be181 Mon Sep 17 00:00:00 2001 +From: Bin Liu +Date: Mon, 10 Apr 2017 10:45:10 +0800 +Subject: [PATCH] totemip.c: Fixed Evicted from CPG membership + +In a two-node cluster, I 've one node configured with open-vswtich: +5: br-fixed: mtu 1500 qdisc noqueue state UNKNOWN group default +inet 192.168.124.88/24 scope global br-fixed +inet 192.168.124.87/24 scope global secondary br-fixed +inet 192.168.124.83/24 brd 192.168.124.255 scope global secondary tentative br-fixed +inet 192.168.124.89/24 scope global secondary br-fixed + +while I use 192.168.124.83 in node list of corosync.conf with udpu, and the bind_addr is +192.168.124.0. After upgrading corosync on this node, the it uses 192.168.124.88 instead +of 192.168.124.83. As we can see: + +corosync-cfgtool -s +Printing ring status. +Local node ID 1084783704 + +corosync-quorumtool -s +Membership information: +Nodeid Votes Name +1084783697 1 d52-54-77-77-01-02 +1084783699 1 d52-54-77-77-01-01 (local) + +while the other node can only see itself: +corosync-cfgtool -s +Printing ring status. +Local node ID 1084783697 +RING ID 0 +id = 192.168.124.81 +status = ring 0 active with no faults + +corosync-quorumtool -s +Membership information: +Nodeid Votes Name +1084783697 1 d52-54-77-77-01-02.virtual.cloud.suse.de (local) + +this patch will check if there are both nodelist and bindnetaddr and if so, display warning +and use nodelist information. +--- + exec/main.c | 4 ++++ + exec/totemconfig.c | 18 ++++++++++++++++-- + exec/totemconfig.h | 1 + + 3 files changed, 21 insertions(+), 2 deletions(-) + +diff --git a/exec/main.c b/exec/main.c +index 0ca5634a..d5403dc8 100644 +--- a/exec/main.c ++++ b/exec/main.c +@@ -1262,6 +1262,10 @@ int main (int argc, char **argv, char **envp) + log_printf (LOGSYS_LEVEL_WARNING, "nodeid appears both in totem section and nodelist. Nodelist one is used."); + } + ++ if (totem_config_warnings & TOTEM_CONFIG_BINDNETADDR_NODELIST_SET) { ++ log_printf (LOGSYS_LEVEL_WARNING, "%s", error_string); ++ } ++ + if (totem_config_warnings != 0) { + log_printf (LOGSYS_LEVEL_WARNING, "Please migrate config file to nodelist."); + } +diff --git a/exec/totemconfig.c b/exec/totemconfig.c +index f232ea8f..4b4d22c7 100644 +--- a/exec/totemconfig.c ++++ b/exec/totemconfig.c +@@ -975,7 +975,8 @@ extern int totem_config_read ( + uint64_t *warnings) + { + int res = 0; +- char *str; ++ char *str, *bind_addr_str, *ring0_addr_str; ++ char msg[128]; + unsigned int ringnumber = 0; + int member_count = 0; + icmap_iter_t iter, member_iter; +@@ -1042,7 +1043,20 @@ extern int totem_config_read ( + + totem_config->ip_version = totem_config_get_ip_version(); + +- if (icmap_get_string("totem.interface.0.bindnetaddr", &str) != CS_OK) { ++ if((icmap_get_string("totem.interface.0.bindnetaddr", &bind_addr_str) == CS_OK) && ++ (icmap_get_string("nodelist.node.0.ring0_addr", &ring0_addr_str) == CS_OK)) { ++ /* check to see if both bindnetaddr and ring0_addr are set, if yes, log warning information ++ * if yes, log warning information, and use nodelist instead ++ * if no, no change at all */ ++ if (bind_addr_str && ring0_addr_str) { ++ *warnings |= TOTEM_CONFIG_BINDNETADDR_NODELIST_SET; ++ sprintf(msg, "Both bindnetaddr %s and nodelist %s set, we will use nodelist instead", ++ bind_addr_str, ring0_addr_str); ++ *error_string = msg; ++ } ++ ++ config_convert_nodelist_to_interface(totem_config); ++ } else if (icmap_get_string("totem.interface.0.bindnetaddr", &str) != CS_OK) { + /* + * We were not able to find ring 0 bindnet addr. Try to use nodelist informations + */ +diff --git a/exec/totemconfig.h b/exec/totemconfig.h +index 10607cc2..9792cb7d 100644 +--- a/exec/totemconfig.h ++++ b/exec/totemconfig.h +@@ -46,6 +46,7 @@ + #define TOTEM_CONFIG_WARNING_MEMBERS_IGNORED (1<<1) + #define TOTEM_CONFIG_WARNING_MEMBERS_DEPRECATED (1<<2) + #define TOTEM_CONFIG_WARNING_TOTEM_NODEID_IGNORED (1<<3) ++#define TOTEM_CONFIG_BINDNETADDR_NODELIST_SET (1<<4) + + extern int totem_config_read ( + struct totem_config *totem_config, +-- +2.12.0 + diff --git a/corosync.changes b/corosync.changes index 552fc21..f444edd 100644 --- a/corosync.changes +++ b/corosync.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Mon Apr 10 06:42:51 UTC 2017 - bliu@suse.com + +- [upgrade] Changing the pre-upgrade role for node failed(bsc#1030437) + Added:0001-totemip.c-Fixed-Evicted-from-CPG-membership.patch + ------------------------------------------------------------------- Tue Mar 14 07:14:58 UTC 2017 - bliu@suse.com diff --git a/corosync.spec b/corosync.spec index 5851b83..419fd45 100644 --- a/corosync.spec +++ b/corosync.spec @@ -62,6 +62,7 @@ Patch7: corosync-start-stop-level.patch Patch8: disable-build-html-docs.patch Patch9: 0001-Logsys-Change-logsys-syslog_priority-priority.patch Patch10: 0001-logconfig.c-make-logging.syslog_priority-and-logging.patch +Patch11: 0001-totemip.c-Fixed-Evicted-from-CPG-membership.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build # openais is indeed gone and should be uninstalled. Yes, we do not @@ -131,6 +132,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-build %patch8 -p1 %patch9 -p1 %patch10 -p1 +%patch11 -p1 %build %if %{with_runautogen}