[Cluster-devel] [PATCHv2 dlm-tool 1/9] dlm_tool: add fail functionality if dump failed
Alexander Aring
aahringo at redhat.com
Tue Mar 7 17:12:59 UTC 2023
Currently dlm_controld sets a embedded data int value of dlm_controld
dump functionality failed for e.g. if lockspace cannot be found. The
dlm_tool does not parse this possible error functionality and will exit
successfully. This patch will add dlm_tool fail functionality if
dlm_controld sets an embedded data error value.
---
dlm_controld/lib.c | 25 +++++++++-------
dlm_controld/libdlmcontrol.h | 10 +++----
dlm_tool/main.c | 57 +++++++++++++++++++++++++++---------
3 files changed, 62 insertions(+), 30 deletions(-)
diff --git a/dlm_controld/lib.c b/dlm_controld/lib.c
index 2888ad05..a21150f2 100644
--- a/dlm_controld/lib.c
+++ b/dlm_controld/lib.c
@@ -109,7 +109,7 @@ static void init_header(struct dlmc_header *h, int cmd, char *name,
static char copy_buf[DLMC_DUMP_SIZE];
-static int do_dump(int cmd, char *name, char *buf)
+static int do_dump(int cmd, char *name, char *buf, int *data)
{
struct dlmc_header h;
int fd, rv, len;
@@ -118,6 +118,8 @@ static int do_dump(int cmd, char *name, char *buf)
init_header(&h, cmd, name, 0);
+ *data = 0;
+
fd = do_connect(DLMC_QUERY_SOCK_PATH);
if (fd < 0) {
rv = fd;
@@ -134,6 +136,7 @@ static int do_dump(int cmd, char *name, char *buf)
if (rv < 0)
goto out_close;
+ *data = h.data;
len = h.len - sizeof(h);
if (len <= 0 || len > DLMC_DUMP_SIZE)
@@ -150,29 +153,29 @@ static int do_dump(int cmd, char *name, char *buf)
return rv;
}
-int dlmc_dump_debug(char *buf)
+int dlmc_dump_debug(char *buf, int *data)
{
- return do_dump(DLMC_CMD_DUMP_DEBUG, NULL, buf);
+ return do_dump(DLMC_CMD_DUMP_DEBUG, NULL, buf, data);
}
-int dlmc_dump_config(char *buf)
+int dlmc_dump_config(char *buf, int *data)
{
- return do_dump(DLMC_CMD_DUMP_CONFIG, NULL, buf);
+ return do_dump(DLMC_CMD_DUMP_CONFIG, NULL, buf, data);
}
-int dlmc_dump_log_plock(char *buf)
+int dlmc_dump_log_plock(char *buf, int *data)
{
- return do_dump(DLMC_CMD_DUMP_LOG_PLOCK, NULL, buf);
+ return do_dump(DLMC_CMD_DUMP_LOG_PLOCK, NULL, buf, data);
}
-int dlmc_dump_plocks(char *name, char *buf)
+int dlmc_dump_plocks(char *name, char *buf, int *data)
{
- return do_dump(DLMC_CMD_DUMP_PLOCKS, name, buf);
+ return do_dump(DLMC_CMD_DUMP_PLOCKS, name, buf, data);
}
-int dlmc_dump_run(char *buf)
+int dlmc_dump_run(char *buf, int *data)
{
- return do_dump(DLMC_CMD_DUMP_RUN, NULL, buf);
+ return do_dump(DLMC_CMD_DUMP_RUN, NULL, buf, data);
}
int dlmc_reload_config(void)
diff --git a/dlm_controld/libdlmcontrol.h b/dlm_controld/libdlmcontrol.h
index a8654f3e..08f04c39 100644
--- a/dlm_controld/libdlmcontrol.h
+++ b/dlm_controld/libdlmcontrol.h
@@ -80,11 +80,11 @@ struct dlmc_lockspace {
#define DLMC_STATUS_VERBOSE 0x00000001
-int dlmc_dump_debug(char *buf);
-int dlmc_dump_config(char *buf);
-int dlmc_dump_run(char *buf);
-int dlmc_dump_log_plock(char *buf);
-int dlmc_dump_plocks(char *name, char *buf);
+int dlmc_dump_debug(char *buf, int *data);
+int dlmc_dump_config(char *buf, int *data);
+int dlmc_dump_run(char *buf, int *data);
+int dlmc_dump_log_plock(char *buf, int *data);
+int dlmc_dump_plocks(char *name, char *buf, int *data);
int dlmc_lockspace_info(char *lsname, struct dlmc_lockspace *ls);
int dlmc_node_info(char *lsname, int nodeid, struct dlmc_node *node);
/* caller need to free *lss */
diff --git a/dlm_tool/main.c b/dlm_tool/main.c
index 50f0cae9..52fd5b89 100644
--- a/dlm_tool/main.c
+++ b/dlm_tool/main.c
@@ -1466,36 +1466,51 @@ static void do_fence_ack(char *name)
dlmc_fence_ack(name);
}
-static void do_plocks(char *name)
+static int do_plocks(char *name)
{
char buf[DLMC_DUMP_SIZE];
+ int rv, data;
memset(buf, 0, sizeof(buf));
- dlmc_dump_plocks(name, buf);
+ rv = dlmc_dump_plocks(name, buf, &data);
+ if (rv)
+ return rv;
+ else if (data)
+ return data;
buf[DLMC_DUMP_SIZE-1] = '\0';
do_write(STDOUT_FILENO, buf, strlen(buf));
+
+ return 0;
}
-static void do_dump(int op)
+static int do_dump(int op)
{
+ int rv = -EOPNOTSUPP, data;
char buf[DLMC_DUMP_SIZE];
memset(buf, 0, sizeof(buf));
if (op == OP_DUMP)
- dlmc_dump_debug(buf);
+ rv = dlmc_dump_debug(buf, &data);
else if (op == OP_DUMP_CONFIG)
- dlmc_dump_config(buf);
+ rv = dlmc_dump_config(buf, &data);
else if (op == OP_DUMP_RUN)
- dlmc_dump_run(buf);
+ rv = dlmc_dump_run(buf, &data);
+
+ if (rv)
+ return rv;
+ else if (data)
+ return data;
buf[DLMC_DUMP_SIZE-1] = '\0';
do_write(STDOUT_FILENO, buf, strlen(buf));
printf("\n");
+
+ return 0;
}
static void do_reload_config(void)
@@ -1514,18 +1529,25 @@ static void do_set_config(void)
printf("set_config done\n");
}
-static void do_log_plock(void)
+static int do_log_plock(void)
{
char buf[DLMC_DUMP_SIZE];
+ int rv, data;
memset(buf, 0, sizeof(buf));
- dlmc_dump_log_plock(buf);
+ rv = dlmc_dump_log_plock(buf, &data);
+ if (rv)
+ return rv;
+ else if (data)
+ return data;
buf[DLMC_DUMP_SIZE-1] = '\0';
do_write(STDOUT_FILENO, buf, strlen(buf));
printf("\n");
+
+ return 0;
}
static int do_run(int op)
@@ -1576,6 +1598,7 @@ int main(int argc, char **argv)
{
prog_name = argv[0];
decode_arguments(argc, argv);
+ int rv = 0;
switch (operation) {
@@ -1605,11 +1628,11 @@ int main(int argc, char **argv)
break;
case OP_DUMP:
- do_dump(operation);
+ rv = do_dump(operation);
break;
case OP_DUMP_CONFIG:
- do_dump(operation);
+ rv = do_dump(operation);
break;
case OP_RELOAD_CONFIG:
@@ -1621,11 +1644,11 @@ int main(int argc, char **argv)
break;
case OP_LOG_PLOCK:
- do_log_plock();
+ rv = do_log_plock();
break;
case OP_PLOCKS:
- do_plocks(lsname);
+ rv = do_plocks(lsname);
break;
case OP_DEADLOCK_CHECK:
@@ -1654,9 +1677,15 @@ int main(int argc, char **argv)
break;
case OP_DUMP_RUN:
- do_dump(operation);
+ rv = do_dump(operation);
break;
}
- return 0;
+
+ if (rv < 0) {
+ fprintf(stderr, "failed: %s\n", strerror(-rv));
+ return EXIT_FAILURE;
+ }
+
+ return EXIT_SUCCESS;
}
--
2.31.1
More information about the Cluster-devel
mailing list