forked from pool/corosync
Accepting request 786911 from network:ha-clustering:Factory
OBS-URL: https://build.opensuse.org/request/show/786911 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/corosync?expand=0&rev=67
This commit is contained in:
commit
49ff9f4f3c
109
bug-1163460-totemip-Add-support-for-sin6_scope_id.patch
Normal file
109
bug-1163460-totemip-Add-support-for-sin6_scope_id.patch
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
From 36938e24a8d03f9b8fc97768ed08df36e63f61d0 Mon Sep 17 00:00:00 2001
|
||||||
|
From: liangxin1300 <XLiang@suse.com>
|
||||||
|
Date: Mon, 17 Feb 2020 22:24:31 +0800
|
||||||
|
Subject: [PATCH] totemip: Add support for sin6_scope_id
|
||||||
|
|
||||||
|
sin6_scope_id was not present in totemip structure making impossible to
|
||||||
|
use link-local ipv6 address.
|
||||||
|
|
||||||
|
Patch adds sin6_scope_id and changes convert/copy functions to use it
|
||||||
|
(formally also comparator functions should be changed, but it seems to
|
||||||
|
cause more harm and it is not really needed).
|
||||||
|
|
||||||
|
This makes corosync work with link-local addresses fine for both UDPU
|
||||||
|
and UDP transport as long as interface specification is used (so
|
||||||
|
fe80::xxxx:xxxx:xxxx:xxxx%eth0).
|
||||||
|
|
||||||
|
(backported from master 934c47ed4384daf2819c26306bebba3225807499)
|
||||||
|
|
||||||
|
Signed-off-by: liangxin1300 <XLiang@suse.com>
|
||||||
|
Reviewed-by: Jan Friesse <jfriesse@redhat.com>
|
||||||
|
---
|
||||||
|
exec/totemip.c | 15 +++++++++++----
|
||||||
|
include/corosync/coroapi.h | 1 +
|
||||||
|
include/corosync/totem/totemip.h | 1 +
|
||||||
|
3 files changed, 13 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/exec/totemip.c b/exec/totemip.c
|
||||||
|
index 28a88365..d8130831 100644
|
||||||
|
--- a/exec/totemip.c
|
||||||
|
+++ b/exec/totemip.c
|
||||||
|
@@ -247,7 +247,7 @@ int totemip_totemip_to_sockaddr_convert(struct totem_ip_address *ip_addr,
|
||||||
|
#endif
|
||||||
|
sin->sin6_family = ip_addr->family;
|
||||||
|
sin->sin6_port = ntohs(port);
|
||||||
|
- sin->sin6_scope_id = 2;
|
||||||
|
+ sin->sin6_scope_id = ip_addr->sin6_scope_id;
|
||||||
|
memcpy(&sin->sin6_addr, ip_addr->addr, sizeof(struct in6_addr));
|
||||||
|
|
||||||
|
*addrlen = sizeof(struct sockaddr_in6);
|
||||||
|
@@ -282,10 +282,13 @@ int totemip_parse(struct totem_ip_address *totemip, const char *addr, int family
|
||||||
|
sa6 = (struct sockaddr_in6 *)ainfo->ai_addr;
|
||||||
|
totemip->family = ainfo->ai_family;
|
||||||
|
|
||||||
|
- if (ainfo->ai_family == AF_INET)
|
||||||
|
+ if (ainfo->ai_family == AF_INET) {
|
||||||
|
memcpy(totemip->addr, &sa->sin_addr, sizeof(struct in_addr));
|
||||||
|
- else
|
||||||
|
+ totemip->sin6_scope_id = 0;
|
||||||
|
+ } else {
|
||||||
|
memcpy(totemip->addr, &sa6->sin6_addr, sizeof(struct in6_addr));
|
||||||
|
+ totemip->sin6_scope_id = sa6->sin6_scope_id;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
freeaddrinfo(ainfo);
|
||||||
|
return 0;
|
||||||
|
@@ -304,6 +307,7 @@ int totemip_sockaddr_to_totemip_convert(const struct sockaddr_storage *saddr,
|
||||||
|
const struct sockaddr_in *sin = (const struct sockaddr_in *)saddr;
|
||||||
|
|
||||||
|
memcpy(ip_addr->addr, &sin->sin_addr, sizeof(struct in_addr));
|
||||||
|
+ ip_addr->sin6_scope_id = 0;
|
||||||
|
ret = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -312,7 +316,7 @@ int totemip_sockaddr_to_totemip_convert(const struct sockaddr_storage *saddr,
|
||||||
|
= (const struct sockaddr_in6 *)saddr;
|
||||||
|
|
||||||
|
memcpy(ip_addr->addr, &sin->sin6_addr, sizeof(struct in6_addr));
|
||||||
|
-
|
||||||
|
+ ip_addr->sin6_scope_id = sin->sin6_scope_id;
|
||||||
|
ret = 0;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
@@ -445,6 +449,9 @@ int totemip_iface_check(struct totem_ip_address *bindnet,
|
||||||
|
if (addr_len == 0)
|
||||||
|
continue ;
|
||||||
|
|
||||||
|
+ if (bindnet->sin6_scope_id != 0 && bindnet->sin6_scope_id != if_addr->interface_num)
|
||||||
|
+ continue;
|
||||||
|
+
|
||||||
|
totemip_copy(&bn_netaddr, bindnet);
|
||||||
|
totemip_copy(&if_netaddr, &if_addr->ip_addr);
|
||||||
|
|
||||||
|
diff --git a/include/corosync/coroapi.h b/include/corosync/coroapi.h
|
||||||
|
index 7e1f27cb..00173001 100644
|
||||||
|
--- a/include/corosync/coroapi.h
|
||||||
|
+++ b/include/corosync/coroapi.h
|
||||||
|
@@ -112,6 +112,7 @@ struct totem_ip_address {
|
||||||
|
unsigned int nodeid;
|
||||||
|
unsigned short family;
|
||||||
|
unsigned char addr[TOTEMIP_ADDRLEN];
|
||||||
|
+ unsigned int sin6_scope_id;
|
||||||
|
} __attribute__((packed));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
diff --git a/include/corosync/totem/totemip.h b/include/corosync/totem/totemip.h
|
||||||
|
index 0168e66c..2ae0e03e 100644
|
||||||
|
--- a/include/corosync/totem/totemip.h
|
||||||
|
+++ b/include/corosync/totem/totemip.h
|
||||||
|
@@ -65,6 +65,7 @@ struct totem_ip_address
|
||||||
|
unsigned int nodeid;
|
||||||
|
unsigned short family;
|
||||||
|
unsigned char addr[TOTEMIP_ADDRLEN];
|
||||||
|
+ unsigned int sin6_scope_id;
|
||||||
|
} __attribute__((packed));
|
||||||
|
|
||||||
|
struct totem_ip_if_address
|
||||||
|
--
|
||||||
|
2.21.1
|
||||||
|
|
241
bug-1166899-quorumtool-Fix-exit-status-codes.patch
Normal file
241
bug-1166899-quorumtool-Fix-exit-status-codes.patch
Normal file
@ -0,0 +1,241 @@
|
|||||||
|
From a95e28cc35e1d59cedb406914ba437e21bc3e1ea Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jan Friesse <jfriesse@redhat.com>
|
||||||
|
Date: Thu, 14 Feb 2019 16:05:59 +0100
|
||||||
|
Subject: [PATCH] quorumtool: Fix exit status codes
|
||||||
|
|
||||||
|
1. Use EXIT_SUCCESS and EXIT_FAILURE when possible
|
||||||
|
2. For -s option return EXIT_SUCCESS when no problem appeared and node
|
||||||
|
is quorate, EXIT_FAILURE if problem appeared and exit code 2
|
||||||
|
(EXIT_NOT_QUORATE) when no problem appeared but node is not quorate.
|
||||||
|
3. Document exit codes in the man page
|
||||||
|
|
||||||
|
Signed-off-by: Jan Friesse <jfriesse@redhat.com>
|
||||||
|
Reviewed-by: Christine Caulfield <ccaulfie@redhat.com>
|
||||||
|
(cherry picked from commit db38e3958c4f88d5d06e8f7c83d6d90334d9fbd2)
|
||||||
|
---
|
||||||
|
man/corosync-quorumtool.8 | 17 +++++++++++-
|
||||||
|
tools/corosync-quorumtool.c | 53 ++++++++++++++++++++++---------------
|
||||||
|
2 files changed, 47 insertions(+), 23 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/man/corosync-quorumtool.8 b/man/corosync-quorumtool.8
|
||||||
|
index 915f35ff..2fc4e020 100644
|
||||||
|
--- a/man/corosync-quorumtool.8
|
||||||
|
+++ b/man/corosync-quorumtool.8
|
||||||
|
@@ -31,7 +31,7 @@
|
||||||
|
.\" * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||||
|
.\" * THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
.\" */
|
||||||
|
-.TH COROSYNC-QUORUMTOOL 8 2012-01-12
|
||||||
|
+.TH COROSYNC-QUORUMTOOL 8 2019-02-14
|
||||||
|
.SH NAME
|
||||||
|
corosync-quorumtool \- Set and display quorum settings.
|
||||||
|
.SH SYNOPSIS
|
||||||
|
@@ -89,6 +89,21 @@ show this help text
|
||||||
|
show version and exit
|
||||||
|
.PP
|
||||||
|
* Starred items only work if votequorum is the quorum provider for corosync
|
||||||
|
+.SH EXIT STATUS
|
||||||
|
+corosync-quorumtool may return one of several error codes if it encounters problems.
|
||||||
|
+.TP
|
||||||
|
+0
|
||||||
|
+No problems occurred (quorate for
|
||||||
|
+.B -s
|
||||||
|
+operation).
|
||||||
|
+.TP
|
||||||
|
+1
|
||||||
|
+Generic error code.
|
||||||
|
+.TP
|
||||||
|
+2
|
||||||
|
+Not quorate (returned only for
|
||||||
|
+.B -s
|
||||||
|
+operation).
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR corosync_overview (8),
|
||||||
|
.BR votequorum_overview (8),
|
||||||
|
diff --git a/tools/corosync-quorumtool.c b/tools/corosync-quorumtool.c
|
||||||
|
index e5d17b16..66ca7de5 100644
|
||||||
|
--- a/tools/corosync-quorumtool.c
|
||||||
|
+++ b/tools/corosync-quorumtool.c
|
||||||
|
@@ -1,5 +1,5 @@
|
||||||
|
/*
|
||||||
|
- * Copyright (c) 2009-2014 Red Hat, Inc.
|
||||||
|
+ * Copyright (c) 2009-2019 Red Hat, Inc.
|
||||||
|
*
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
@@ -75,6 +75,8 @@ typedef enum {
|
||||||
|
SORT_NODENAME
|
||||||
|
} sorttype_t;
|
||||||
|
|
||||||
|
+#define EXIT_NOT_QUORATE 2
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* global vars
|
||||||
|
*/
|
||||||
|
@@ -238,7 +240,7 @@ static int set_votes(uint32_t nodeid, int votes)
|
||||||
|
votes, nodeid, cs_strerror(err));
|
||||||
|
}
|
||||||
|
|
||||||
|
- return err==CS_OK?0:err;
|
||||||
|
+ return (err == CS_OK ? EXIT_SUCCESS : EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int set_expected(int expected_votes)
|
||||||
|
@@ -249,7 +251,7 @@ static int set_expected(int expected_votes)
|
||||||
|
fprintf(stderr, "Unable to set expected votes: %s\n", cs_strerror(err));
|
||||||
|
}
|
||||||
|
|
||||||
|
- return err==CS_OK?0:err;
|
||||||
|
+ return (err == CS_OK ? EXIT_SUCCESS : EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
@@ -638,9 +640,9 @@ static int display_quorum_data(int is_quorate,
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
- * return 1 if quorate
|
||||||
|
- * 0 if not quorate
|
||||||
|
- * -1 on error
|
||||||
|
+ * return EXIT_SUCCESS if quorate
|
||||||
|
+ * EXIT_NOT_QUORATE if not quorate
|
||||||
|
+ * EXIT_FAILURE on error
|
||||||
|
*/
|
||||||
|
static int show_status(nodeid_format_t nodeid_format, name_format_t name_format, sorttype_t sort_type)
|
||||||
|
{
|
||||||
|
@@ -689,15 +691,15 @@ static int show_status(nodeid_format_t nodeid_format, name_format_t name_format,
|
||||||
|
|
||||||
|
quorum_err:
|
||||||
|
if (err != CS_OK) {
|
||||||
|
- return -1;
|
||||||
|
+ return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = display_quorum_data(is_quorate, nodeid_format, name_format, sort_type, 0);
|
||||||
|
if (err != CS_OK) {
|
||||||
|
- return -1;
|
||||||
|
+ return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
- return is_quorate;
|
||||||
|
+ return (is_quorate ? EXIT_SUCCESS : EXIT_NOT_QUORATE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int monitor_status(nodeid_format_t nodeid_format, name_format_t name_format, sorttype_t sort_type) {
|
||||||
|
@@ -750,7 +752,7 @@ static int monitor_status(nodeid_format_t nodeid_format, name_format_t name_form
|
||||||
|
}
|
||||||
|
|
||||||
|
quorum_err:
|
||||||
|
- return -1;
|
||||||
|
+ return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int show_nodes(nodeid_format_t nodeid_format, name_format_t name_format, sorttype_t sort_type)
|
||||||
|
@@ -784,23 +786,30 @@ static int unregister_qdevice(void)
|
||||||
|
{
|
||||||
|
int err;
|
||||||
|
struct votequorum_info info;
|
||||||
|
+ int result;
|
||||||
|
+
|
||||||
|
+ result = EXIT_FAILURE;
|
||||||
|
|
||||||
|
err = votequorum_getinfo(v_handle, our_nodeid, &info);
|
||||||
|
if (err != CS_OK) {
|
||||||
|
fprintf(stderr, "Unable to get quorum device info: %s\n", cs_strerror(err));
|
||||||
|
- return -1;
|
||||||
|
+ goto err_exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(info.flags & VOTEQUORUM_INFO_QDEVICE_REGISTERED)) {
|
||||||
|
- return 0;
|
||||||
|
+ result = EXIT_SUCCESS;
|
||||||
|
+ goto err_exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = votequorum_qdevice_unregister(v_handle, info.qdevice_name);
|
||||||
|
if (err != CS_OK) {
|
||||||
|
fprintf(stderr, "Unable to unregister quorum device: %s\n", cs_strerror(err));
|
||||||
|
- return -1;
|
||||||
|
+ goto err_exit;
|
||||||
|
}
|
||||||
|
- return 0;
|
||||||
|
+
|
||||||
|
+ result = EXIT_SUCCESS;
|
||||||
|
+err_exit:
|
||||||
|
+ return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
@@ -884,7 +893,7 @@ int main (int argc, char *argv[]) {
|
||||||
|
|
||||||
|
if (init_all()) {
|
||||||
|
close_all();
|
||||||
|
- exit(1);
|
||||||
|
+ exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
while ( (opt = getopt(argc, argv, options)) != -1 ) {
|
||||||
|
@@ -894,7 +903,7 @@ int main (int argc, char *argv[]) {
|
||||||
|
command_opt = CMD_UNREGISTER_QDEVICE;
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "You cannot unregister quorum device, corosync is not using votequorum\n");
|
||||||
|
- exit(2);
|
||||||
|
+ exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 's':
|
||||||
|
@@ -928,14 +937,14 @@ int main (int argc, char *argv[]) {
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "You cannot change expected votes, corosync is not using votequorum\n");
|
||||||
|
- exit(2);
|
||||||
|
+ exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'n':
|
||||||
|
l = strtol(optarg, &endptr, 0);
|
||||||
|
if ((l == 0 && endptr == optarg) || l < 0) {
|
||||||
|
fprintf(stderr, "The nodeid was not valid, try a positive number\n");
|
||||||
|
- exit(2);
|
||||||
|
+ exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
nodeid = l;
|
||||||
|
nodeid_set = 1;
|
||||||
|
@@ -945,14 +954,14 @@ int main (int argc, char *argv[]) {
|
||||||
|
votes = strtol(optarg, &endptr, 0);
|
||||||
|
if ((votes == 0 && endptr == optarg) || votes < 0) {
|
||||||
|
fprintf(stderr, "New votes value was not valid, try a positive number or zero\n");
|
||||||
|
- exit(2);
|
||||||
|
+ exit(EXIT_FAILURE);
|
||||||
|
} else {
|
||||||
|
command_opt = CMD_SETVOTES;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
fprintf(stderr, "You cannot change node votes, corosync is not using votequorum\n");
|
||||||
|
- exit(2);
|
||||||
|
+ exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'o':
|
||||||
|
@@ -966,7 +975,7 @@ int main (int argc, char *argv[]) {
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
fprintf(stderr, "Invalid ordering option. valid orders are a(address), i(node ID) or n(name)\n");
|
||||||
|
- exit(2);
|
||||||
|
+ exit(EXIT_FAILURE);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
@@ -985,7 +994,7 @@ int main (int argc, char *argv[]) {
|
||||||
|
switch (command_opt) {
|
||||||
|
case CMD_UNKNOWN:
|
||||||
|
show_usage(argv[0]);
|
||||||
|
- ret = -1;
|
||||||
|
+ ret = EXIT_FAILURE;
|
||||||
|
break;
|
||||||
|
case CMD_SHOWNODES:
|
||||||
|
ret = show_nodes(nodeid_format, address_format, sort_opt);
|
||||||
|
--
|
||||||
|
2.21.1
|
||||||
|
|
@ -1,3 +1,15 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Mar 20 14:07:26 UTC 2020 - XinLiang <XLiang@suse.com>
|
||||||
|
|
||||||
|
- Fix bsc#1163460 Corosync does not support link-local IPv6 addresses
|
||||||
|
Added: bug-1163460-totemip-Add-support-for-sin6_scope_id.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Mar 18 02:47:13 UTC 2020 - XinLiang <XLiang@suse.com>
|
||||||
|
|
||||||
|
- Fix bsc#1166899, return value of "corosync-quorumtool -s" was not correct
|
||||||
|
Added: bug-1166899-quorumtool-Fix-exit-status-codes.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Fri Jan 3 11:30:41 UTC 2020 - matthias.gerstner@suse.com
|
Fri Jan 3 11:30:41 UTC 2020 - matthias.gerstner@suse.com
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# spec file for package corosync
|
# spec file for package corosync
|
||||||
#
|
#
|
||||||
# Copyright (c) 2020 SUSE LINUX GmbH, Nuernberg, Germany.
|
# Copyright (c) 2020 SUSE LLC
|
||||||
#
|
#
|
||||||
# All modifications and additions to the file contributed by third parties
|
# All modifications and additions to the file contributed by third parties
|
||||||
# remain the property of their copyright owners, unless otherwise agreed
|
# remain the property of their copyright owners, unless otherwise agreed
|
||||||
@ -52,7 +52,7 @@ License: BSD-3-Clause
|
|||||||
Group: Productivity/Clustering/HA
|
Group: Productivity/Clustering/HA
|
||||||
Version: 2.4.5
|
Version: 2.4.5
|
||||||
Release: 0
|
Release: 0
|
||||||
Url: http://corosync.github.io/corosync/
|
URL: http://corosync.github.io/corosync/
|
||||||
# source should be Souce code.tar.gz, https://github.com/corosync/corosync/archive/vX.X.X.tar.gz
|
# source should be Souce code.tar.gz, https://github.com/corosync/corosync/archive/vX.X.X.tar.gz
|
||||||
Source0: %{name}-%{version}.tar.gz
|
Source0: %{name}-%{version}.tar.gz
|
||||||
Source2: baselibs.conf
|
Source2: baselibs.conf
|
||||||
@ -65,6 +65,8 @@ Patch6: bug-1001164_corosync.conf-example.patch
|
|||||||
Patch7: corosync-2.3.4-fix-bashisms.patch
|
Patch7: corosync-2.3.4-fix-bashisms.patch
|
||||||
Patch8: corosync-init-lockfile-path-error.patch
|
Patch8: corosync-init-lockfile-path-error.patch
|
||||||
Patch9: corosync-start-stop-level.patch
|
Patch9: corosync-start-stop-level.patch
|
||||||
|
Patch10: bug-1166899-quorumtool-Fix-exit-status-codes.patch
|
||||||
|
Patch11: bug-1163460-totemip-Add-support-for-sin6_scope_id.patch
|
||||||
|
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
# openais is indeed gone and should be uninstalled. Yes, we do not
|
# openais is indeed gone and should be uninstalled. Yes, we do not
|
||||||
@ -139,6 +141,8 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
|||||||
%patch7 -p1
|
%patch7 -p1
|
||||||
%patch8 -p1
|
%patch8 -p1
|
||||||
%patch9 -p1
|
%patch9 -p1
|
||||||
|
%patch10 -p1
|
||||||
|
%patch11 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%if %{with runautogen}
|
%if %{with runautogen}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user