Accepting request 786038 from home:XinLiang:branches:network:ha-clustering:Factory

- Fix bsc#1166899, return value of "corosync-quorumtool -s" was not correct
  Added: bug-1166899-quorumtool-Fix-exit-status-codes.patch

OBS-URL: https://build.opensuse.org/request/show/786038
OBS-URL: https://build.opensuse.org/package/show/network:ha-clustering:Factory/corosync?expand=0&rev=168
This commit is contained in:
Xin Liang 2020-03-18 03:03:01 +00:00 committed by Git OBS Bridge
parent 03886ab714
commit 3a54ce9dd5
3 changed files with 251 additions and 2 deletions

View 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

View File

@ -1,3 +1,9 @@
-------------------------------------------------------------------
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

View File

@ -1,7 +1,7 @@
#
# 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
# remain the property of their copyright owners, unless otherwise agreed
@ -52,7 +52,7 @@ License: BSD-3-Clause
Group: Productivity/Clustering/HA
Version: 2.4.5
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
Source0: %{name}-%{version}.tar.gz
Source2: baselibs.conf
@ -65,6 +65,7 @@ Patch6: bug-1001164_corosync.conf-example.patch
Patch7: corosync-2.3.4-fix-bashisms.patch
Patch8: corosync-init-lockfile-path-error.patch
Patch9: corosync-start-stop-level.patch
Patch10: bug-1166899-quorumtool-Fix-exit-status-codes.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-build
# openais is indeed gone and should be uninstalled. Yes, we do not
@ -139,6 +140,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-build
%patch7 -p1
%patch8 -p1
%patch9 -p1
%patch10 -p1
%build
%if %{with runautogen}