re-import sources as agreed with the maintainer
This commit is contained in:
parent
ab2e22588f
commit
0f3b005d29
13
.gitignore
vendored
13
.gitignore
vendored
@ -1,2 +1,13 @@
|
|||||||
SOURCES/dlm-4.1.0.tar.gz
|
/dlm-3.99.0.tar.gz
|
||||||
|
/dlm-3.99.1.tar.gz
|
||||||
|
/dlm-3.99.2.tar.gz
|
||||||
|
/dlm-3.99.3.tar.gz
|
||||||
|
/dlm-3.99.4.tar.gz
|
||||||
|
/dlm-3.99.5.tar.gz
|
||||||
|
/dlm-4.0.0.tar.gz
|
||||||
|
/dlm-4.0.1.tar.gz
|
||||||
|
/dlm-4.0.4.tar.gz
|
||||||
|
/dlm-4.0.5.tar.gz
|
||||||
|
/dlm-4.0.6.tar.gz
|
||||||
|
/dlm-4.0.9.tar.gz
|
||||||
/dlm-4.1.0.tar.gz
|
/dlm-4.1.0.tar.gz
|
||||||
|
28
0001-dlm_controld-libsystemd-broke-itself.patch
Normal file
28
0001-dlm_controld-libsystemd-broke-itself.patch
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
From 2eefc91150a3292c2be82f4139207e06b4c4bba4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: David Teigland <teigland@redhat.com>
|
||||||
|
Date: Fri, 10 Jun 2016 13:13:48 -0500
|
||||||
|
Subject: [PATCH] dlm_controld: libsystemd broke itself
|
||||||
|
|
||||||
|
---
|
||||||
|
dlm_controld/Makefile | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/dlm_controld/Makefile b/dlm_controld/Makefile
|
||||||
|
index 13d6339ab263..cf556c9d72b8 100644
|
||||||
|
--- a/dlm_controld/Makefile
|
||||||
|
+++ b/dlm_controld/Makefile
|
||||||
|
@@ -62,9 +62,9 @@ LIB_CFLAGS += $(BIN_CFLAGS)
|
||||||
|
LIB_LDFLAGS += -Wl,-z,relro -pie
|
||||||
|
|
||||||
|
ifeq ($(USE_SD_NOTIFY),yes)
|
||||||
|
- BIN_CFLAGS += $(shell pkg-config --cflags libsystemd-daemon) \
|
||||||
|
+ BIN_CFLAGS += $(shell pkg-config --cflags libsystemd) \
|
||||||
|
-DUSE_SD_NOTIFY
|
||||||
|
- BIN_LDFLAGS += $(shell pkg-config --libs libsystemd-daemon)
|
||||||
|
+ BIN_LDFLAGS += $(shell pkg-config --libs libsystemd)
|
||||||
|
endif
|
||||||
|
|
||||||
|
all: $(LIB_TARGET) $(BIN_TARGET)
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
199
0001-dlm_controld-use-new-quorum-api-to-detect-missed-fai.patch
Normal file
199
0001-dlm_controld-use-new-quorum-api-to-detect-missed-fai.patch
Normal file
@ -0,0 +1,199 @@
|
|||||||
|
From 2e893b981b19430aeca983dd63fb3ac0979d0b35 Mon Sep 17 00:00:00 2001
|
||||||
|
From: David Teigland <teigland@redhat.com>
|
||||||
|
Date: Wed, 9 Sep 2020 17:16:59 -0500
|
||||||
|
Subject: [PATCH] dlm_controld: use new quorum api to detect missed failures
|
||||||
|
|
||||||
|
If a node failed and then quickly rejoined before corosync
|
||||||
|
detected the original failure, the quorum callback from
|
||||||
|
corosync would not include an indication that the node had
|
||||||
|
ever failed. This meant there would be no removal and
|
||||||
|
readdition of the node's configfs settings in the kernel,
|
||||||
|
and the failed network connections may never be cleared.
|
||||||
|
|
||||||
|
The new quorum nodelist callback does include an indication
|
||||||
|
of a node that has left and rejoined. This patch keeps track
|
||||||
|
of nodeids that have left and rejoined through that callback
|
||||||
|
between sequential occurances of the standard quorum callback.
|
||||||
|
|
||||||
|
When the standard quorum callback is removing and adding
|
||||||
|
configfs settings for nodes that have been removed or added,
|
||||||
|
it will also now look at the list of nodes that have left
|
||||||
|
and rejoined, and do configfs removal and addition for those.
|
||||||
|
---
|
||||||
|
dlm_controld/member.c | 106 +++++++++++++++++++++++++++++++++++++++++++-------
|
||||||
|
1 file changed, 91 insertions(+), 15 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/dlm_controld/member.c b/dlm_controld/member.c
|
||||||
|
index 1d5bfa3d9166..d567c114b259 100644
|
||||||
|
--- a/dlm_controld/member.c
|
||||||
|
+++ b/dlm_controld/member.c
|
||||||
|
@@ -20,6 +20,8 @@ static int old_node_count;
|
||||||
|
static uint32_t quorum_nodes[MAX_NODES];
|
||||||
|
static int quorum_node_count;
|
||||||
|
static struct list_head cluster_nodes;
|
||||||
|
+static uint32_t leavejoin_nodes[MAX_NODES];
|
||||||
|
+static int leavejoin_count;
|
||||||
|
|
||||||
|
struct node_cluster {
|
||||||
|
struct list_head list;
|
||||||
|
@@ -103,15 +105,51 @@ int is_cluster_member(uint32_t nodeid)
|
||||||
|
return is_member(quorum_nodes, quorum_node_count, nodeid);
|
||||||
|
}
|
||||||
|
|
||||||
|
-static void quorum_callback(quorum_handle_t h, uint32_t quorate,
|
||||||
|
- uint64_t ring_seq, uint32_t node_list_entries,
|
||||||
|
- uint32_t *node_list)
|
||||||
|
+static int is_leavejoin_node(uint32_t nodeid)
|
||||||
|
+{
|
||||||
|
+ return is_member(leavejoin_nodes, leavejoin_count, nodeid);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void quorum_nodelist_callback(quorum_handle_t cbhandle, struct quorum_ring_id ring_id,
|
||||||
|
+ uint32_t member_list_entries, const uint32_t *member_list,
|
||||||
|
+ uint32_t joined_list_entries, const uint32_t *joined_list,
|
||||||
|
+ uint32_t left_list_entries, const uint32_t *left_list)
|
||||||
|
+{
|
||||||
|
+ uint64_t ring_seq = ring_id.seq;
|
||||||
|
+ int i, j;
|
||||||
|
+
|
||||||
|
+ for (i = 0; i < left_list_entries; i++) {
|
||||||
|
+ log_debug("cluster left_list %u seq %llu",
|
||||||
|
+ left_list[i], (unsigned long long)ring_seq);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ for (j = 0; j < joined_list_entries; j++) {
|
||||||
|
+ log_debug("cluster joined_list %u seq %llu",
|
||||||
|
+ joined_list[j], (unsigned long long)ring_seq);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ for (i = 0; i < left_list_entries; i++) {
|
||||||
|
+ for (j = 0; j < joined_list_entries; j++) {
|
||||||
|
+ if (joined_list[j] == left_list[i]) {
|
||||||
|
+ log_debug("cluster node %d left and joined", joined_list[j]);
|
||||||
|
+ if (!is_leavejoin_node(joined_list[j]))
|
||||||
|
+ leavejoin_nodes[leavejoin_count++] = joined_list[j];
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void quorum_callback(quorum_handle_t cbhandle, uint32_t quorate,
|
||||||
|
+ struct quorum_ring_id ring_id, uint32_t node_list_entries,
|
||||||
|
+ const uint32_t *node_list)
|
||||||
|
{
|
||||||
|
corosync_cfg_node_address_t addrs[MAX_NODE_ADDRESSES];
|
||||||
|
corosync_cfg_node_address_t *addrptr = addrs;
|
||||||
|
const struct node_config *nc;
|
||||||
|
cs_error_t err;
|
||||||
|
int i, j, num_addrs;
|
||||||
|
+ uint32_t nodeid;
|
||||||
|
+ uint64_t ring_seq = ring_id.seq;
|
||||||
|
uint64_t now = monotime();
|
||||||
|
|
||||||
|
if (!cluster_joined_monotime) {
|
||||||
|
@@ -142,15 +180,55 @@ static void quorum_callback(quorum_handle_t h, uint32_t quorate,
|
||||||
|
if (!is_cluster_member(old_nodes[i])) {
|
||||||
|
log_debug("cluster node %u removed seq %llu",
|
||||||
|
old_nodes[i], (unsigned long long)cluster_ringid_seq);
|
||||||
|
+
|
||||||
|
rem_cluster_node(old_nodes[i], now);
|
||||||
|
del_configfs_node(old_nodes[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ for (i = 0; i < leavejoin_count; i++) {
|
||||||
|
+ nodeid = leavejoin_nodes[i];
|
||||||
|
+
|
||||||
|
+ log_debug("cluster node %u leavejoin seq %llu",
|
||||||
|
+ nodeid, (unsigned long long)cluster_ringid_seq);
|
||||||
|
+
|
||||||
|
+ /* remove */
|
||||||
|
+
|
||||||
|
+ rem_cluster_node(nodeid, now);
|
||||||
|
+ del_configfs_node(nodeid);
|
||||||
|
+
|
||||||
|
+ /* add */
|
||||||
|
+
|
||||||
|
+ add_cluster_node(nodeid, now);
|
||||||
|
+
|
||||||
|
+ fence_delay_begin = now;
|
||||||
|
+
|
||||||
|
+ err = corosync_cfg_get_node_addrs(ch, nodeid,
|
||||||
|
+ MAX_NODE_ADDRESSES,
|
||||||
|
+ &num_addrs, addrs);
|
||||||
|
+ if (err != CS_OK) {
|
||||||
|
+ log_error("corosync_cfg_get_node_addrs failed nodeid %u", nodeid);
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ nc = node_config_get(nodeid);
|
||||||
|
+
|
||||||
|
+ for (j = 0; j < num_addrs; j++) {
|
||||||
|
+ add_configfs_node(nodeid,
|
||||||
|
+ addrptr[j].address,
|
||||||
|
+ addrptr[j].address_length,
|
||||||
|
+ (nodeid == our_nodeid),
|
||||||
|
+ nc->mark);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
for (i = 0; i < quorum_node_count; i++) {
|
||||||
|
+ if (is_leavejoin_node(quorum_nodes[i]))
|
||||||
|
+ continue;
|
||||||
|
if (!is_old_member(quorum_nodes[i])) {
|
||||||
|
log_debug("cluster node %u added seq %llu",
|
||||||
|
quorum_nodes[i], (unsigned long long)cluster_ringid_seq);
|
||||||
|
+
|
||||||
|
add_cluster_node(quorum_nodes[i], now);
|
||||||
|
|
||||||
|
fence_delay_begin = now;
|
||||||
|
@@ -176,12 +254,10 @@ static void quorum_callback(quorum_handle_t h, uint32_t quorate,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
-}
|
||||||
|
|
||||||
|
-static quorum_callbacks_t quorum_callbacks =
|
||||||
|
-{
|
||||||
|
- .quorum_notify_fn = quorum_callback,
|
||||||
|
-};
|
||||||
|
+ memset(leavejoin_nodes, 0, sizeof(leavejoin_nodes));
|
||||||
|
+ leavejoin_count = 0;
|
||||||
|
+}
|
||||||
|
|
||||||
|
void process_cluster(int ci)
|
||||||
|
{
|
||||||
|
@@ -208,23 +284,23 @@ void update_cluster(void)
|
||||||
|
|
||||||
|
int setup_cluster(void)
|
||||||
|
{
|
||||||
|
+ quorum_model_v1_data_t model_data;
|
||||||
|
cs_error_t err;
|
||||||
|
int fd;
|
||||||
|
- uint32_t quorum_type;
|
||||||
|
+ uint32_t quorum_type = 0;
|
||||||
|
|
||||||
|
INIT_LIST_HEAD(&cluster_nodes);
|
||||||
|
|
||||||
|
- err = quorum_initialize(&qh, &quorum_callbacks, &quorum_type);
|
||||||
|
+ memset(&model_data, 0, sizeof(model_data));
|
||||||
|
+ model_data.quorum_notify_fn = quorum_callback;
|
||||||
|
+ model_data.nodelist_notify_fn = quorum_nodelist_callback;
|
||||||
|
+
|
||||||
|
+ err = quorum_model_initialize(&qh, QUORUM_MODEL_V1, (quorum_model_data_t *)&model_data, &quorum_type, NULL);
|
||||||
|
if (err != CS_OK) {
|
||||||
|
log_error("quorum init error %d", err);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (quorum_type == QUORUM_FREE) {
|
||||||
|
- log_error("no quorum provider configured in corosync, unable to operate");
|
||||||
|
- goto fail;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
err = quorum_fd_get(qh, &fd);
|
||||||
|
if (err != CS_OK) {
|
||||||
|
log_error("quorum fd_get error %d", err);
|
||||||
|
--
|
||||||
|
2.7.5
|
||||||
|
|
@ -0,0 +1,41 @@
|
|||||||
|
From 3a5d91435a557932b2ff674ec8e7c22e880da42f Mon Sep 17 00:00:00 2001
|
||||||
|
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||||
|
Date: Sat, 24 Mar 2018 08:55:06 +0000
|
||||||
|
Subject: [PATCH] New location of major() and minor() macros for glibc 2.27.
|
||||||
|
|
||||||
|
glibc 2.27 moves the major() and minor() macros to the
|
||||||
|
<sys/sysmacros.h> header file.
|
||||||
|
|
||||||
|
Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
|
||||||
|
---
|
||||||
|
dlm_controld/dlm_daemon.h | 1 +
|
||||||
|
libdlm/libdlm.c | 1 +
|
||||||
|
2 files changed, 2 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/dlm_controld/dlm_daemon.h b/dlm_controld/dlm_daemon.h
|
||||||
|
index 6cb0f11c1335..731818c53c9b 100644
|
||||||
|
--- a/dlm_controld/dlm_daemon.h
|
||||||
|
+++ b/dlm_controld/dlm_daemon.h
|
||||||
|
@@ -40,6 +40,7 @@
|
||||||
|
#include <sched.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#include <dirent.h>
|
||||||
|
+#include <sys/sysmacros.h>
|
||||||
|
|
||||||
|
#include <corosync/cpg.h>
|
||||||
|
|
||||||
|
diff --git a/libdlm/libdlm.c b/libdlm/libdlm.c
|
||||||
|
index a9e6195579aa..ebfba4576fa8 100644
|
||||||
|
--- a/libdlm/libdlm.c
|
||||||
|
+++ b/libdlm/libdlm.c
|
||||||
|
@@ -24,6 +24,7 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <dirent.h>
|
||||||
|
#include <linux/major.h>
|
||||||
|
+#include <sys/sysmacros.h>
|
||||||
|
#ifdef HAVE_SELINUX
|
||||||
|
#include <selinux/selinux.h>
|
||||||
|
#endif
|
||||||
|
--
|
||||||
|
2.7.5
|
||||||
|
|
217
0003-update-makefile-gcc-flags.patch
Normal file
217
0003-update-makefile-gcc-flags.patch
Normal file
@ -0,0 +1,217 @@
|
|||||||
|
From db875a3d07f9f6a633951ed886cec80b91efea43 Mon Sep 17 00:00:00 2001
|
||||||
|
From: David Teigland <teigland@redhat.com>
|
||||||
|
Date: Tue, 2 Oct 2018 11:22:39 -0500
|
||||||
|
Subject: [PATCH] update makefile gcc flags
|
||||||
|
|
||||||
|
---
|
||||||
|
dlm_controld/Makefile | 41 ++++++++++++++---------------------------
|
||||||
|
dlm_tool/Makefile | 44 ++++++++++++++++----------------------------
|
||||||
|
fence/Makefile | 46 +++++++++++++++++-----------------------------
|
||||||
|
libdlm/Makefile | 6 +++++-
|
||||||
|
4 files changed, 52 insertions(+), 85 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/dlm_controld/Makefile b/dlm_controld/Makefile
|
||||||
|
index cf556c9d72b8..85c2db12883a 100644
|
||||||
|
--- a/dlm_controld/Makefile
|
||||||
|
+++ b/dlm_controld/Makefile
|
||||||
|
@@ -31,35 +31,22 @@ BIN_SOURCE = action.c \
|
||||||
|
rbtree.c
|
||||||
|
LIB_SOURCE = lib.c
|
||||||
|
|
||||||
|
-BIN_CFLAGS += -D_GNU_SOURCE -O2 -ggdb \
|
||||||
|
- -Wall \
|
||||||
|
- -Wformat \
|
||||||
|
- -Wformat-security \
|
||||||
|
- -Wmissing-prototypes \
|
||||||
|
- -Wnested-externs \
|
||||||
|
- -Wpointer-arith \
|
||||||
|
- -Wextra -Wshadow \
|
||||||
|
- -Wcast-align \
|
||||||
|
- -Wwrite-strings \
|
||||||
|
- -Waggregate-return \
|
||||||
|
- -Wstrict-prototypes \
|
||||||
|
- -Winline \
|
||||||
|
- -Wredundant-decls \
|
||||||
|
- -Wno-sign-compare \
|
||||||
|
- -Wno-unused-parameter \
|
||||||
|
- -Wp,-D_FORTIFY_SOURCE=2 \
|
||||||
|
- -fexceptions \
|
||||||
|
- -fasynchronous-unwind-tables \
|
||||||
|
- -fdiagnostics-show-option \
|
||||||
|
-
|
||||||
|
-BIN_CFLAGS += -fPIE -DPIE
|
||||||
|
+CFLAGS += -D_GNU_SOURCE -O2 -ggdb \
|
||||||
|
+ -Wall -Wformat -Wformat-security -Wmissing-prototypes -Wnested-externs \
|
||||||
|
+ -Wpointer-arith -Wextra -Wshadow -Wcast-align -Wwrite-strings \
|
||||||
|
+ -Waggregate-return -Wstrict-prototypes -Winline -Wredundant-decls \
|
||||||
|
+ -Wno-sign-compare -Wno-unused-parameter -Wp,-D_FORTIFY_SOURCE=2 \
|
||||||
|
+ -fexceptions -fasynchronous-unwind-tables -fdiagnostics-show-option \
|
||||||
|
+ -Wp,-D_GLIBCXX_ASSERTIONS -fstack-protector-strong \
|
||||||
|
+ -fstack-clash-protection -Wl,-z,now
|
||||||
|
+
|
||||||
|
+BIN_CFLAGS += $(CFLAGS) -fPIE -DPIE
|
||||||
|
BIN_CFLAGS += -I../include -I../libdlm
|
||||||
|
+LIB_CFLAGS += $(CFLAGS) -fPIC
|
||||||
|
|
||||||
|
-BIN_LDFLAGS += -Wl,-z,now -Wl,-z,relro -pie
|
||||||
|
+BIN_LDFLAGS += $(LDFLAGS) -Wl,-z,relro -pie
|
||||||
|
BIN_LDFLAGS += -lpthread -lrt -lcpg -lcmap -lcfg -lquorum
|
||||||
|
-
|
||||||
|
-LIB_CFLAGS += $(BIN_CFLAGS)
|
||||||
|
-LIB_LDFLAGS += -Wl,-z,relro -pie
|
||||||
|
+LIB_LDFLAGS += $(LDFLAGS) -Wl,-z,relro -pie
|
||||||
|
|
||||||
|
ifeq ($(USE_SD_NOTIFY),yes)
|
||||||
|
BIN_CFLAGS += $(shell pkg-config --cflags libsystemd) \
|
||||||
|
@@ -73,7 +60,7 @@ $(BIN_TARGET): $(BIN_SOURCE)
|
||||||
|
$(CC) $(BIN_SOURCE) $(BIN_CFLAGS) $(BIN_LDFLAGS) -o $@ -L.
|
||||||
|
|
||||||
|
$(LIB_TARGET): $(LIB_SOURCE)
|
||||||
|
- $(CC) $^ $(LIB_CFLAGS) $(LIB_LDFLAGS) -shared -fPIC -o $@ -Wl,-soname=$(LIB_SMAJOR)
|
||||||
|
+ $(CC) $^ $(LIB_CFLAGS) $(LIB_LDFLAGS) -shared -o $@ -Wl,-soname=$(LIB_SMAJOR)
|
||||||
|
ln -sf $(LIB_TARGET) $(LIB_SO)
|
||||||
|
ln -sf $(LIB_TARGET) $(LIB_SMAJOR)
|
||||||
|
|
||||||
|
diff --git a/dlm_tool/Makefile b/dlm_tool/Makefile
|
||||||
|
index c16d8f537225..80d7725791f3 100644
|
||||||
|
--- a/dlm_tool/Makefile
|
||||||
|
+++ b/dlm_tool/Makefile
|
||||||
|
@@ -8,38 +8,26 @@ MAN_TARGET = dlm_tool.8
|
||||||
|
|
||||||
|
BIN_SOURCE = main.c
|
||||||
|
|
||||||
|
-BIN_CFLAGS += -D_GNU_SOURCE -O2 -ggdb \
|
||||||
|
- -Wall \
|
||||||
|
- -Wformat \
|
||||||
|
- -Wformat-security \
|
||||||
|
- -Wmissing-prototypes \
|
||||||
|
- -Wnested-externs \
|
||||||
|
- -Wpointer-arith \
|
||||||
|
- -Wextra -Wshadow \
|
||||||
|
- -Wcast-align \
|
||||||
|
- -Wwrite-strings \
|
||||||
|
- -Waggregate-return \
|
||||||
|
- -Wstrict-prototypes \
|
||||||
|
- -Winline \
|
||||||
|
- -Wredundant-decls \
|
||||||
|
- -Wno-sign-compare \
|
||||||
|
- -Wno-unused-parameter \
|
||||||
|
- -Wp,-D_FORTIFY_SOURCE=2 \
|
||||||
|
- -fexceptions \
|
||||||
|
- -fasynchronous-unwind-tables \
|
||||||
|
- -fdiagnostics-show-option \
|
||||||
|
-
|
||||||
|
-BIN_CFLAGS += -fPIE -DPIE
|
||||||
|
-BIN_CFLAGS += -I../include -I../libdlm -I../dlm_controld
|
||||||
|
-
|
||||||
|
-BIN_LDFLAGS += -Wl,-z,now -Wl,-z,relro -pie
|
||||||
|
-BIN_LDFLAGS += -L../libdlm -L../dlm_controld
|
||||||
|
-BIN_LDFLAGS += -lpthread -ldlm -ldlmcontrol
|
||||||
|
+CFLAGS += -D_GNU_SOURCE -O2 -ggdb \
|
||||||
|
+ -Wall -Wformat -Wformat-security -Wmissing-prototypes -Wnested-externs \
|
||||||
|
+ -Wpointer-arith -Wextra -Wshadow -Wcast-align -Wwrite-strings \
|
||||||
|
+ -Waggregate-return -Wstrict-prototypes -Winline -Wredundant-decls \
|
||||||
|
+ -Wno-sign-compare -Wno-unused-parameter -Wp,-D_FORTIFY_SOURCE=2 \
|
||||||
|
+ -fexceptions -fasynchronous-unwind-tables -fdiagnostics-show-option \
|
||||||
|
+ -Wp,-D_GLIBCXX_ASSERTIONS -fstack-protector-strong \
|
||||||
|
+ -fstack-clash-protection -Wl,-z,now
|
||||||
|
+
|
||||||
|
+CFLAGS += -fPIE -DPIE
|
||||||
|
+CFLAGS += -I../include -I../libdlm -I../dlm_controld
|
||||||
|
+
|
||||||
|
+LDFLAGS += -Wl,-z,relro -pie
|
||||||
|
+LDFLAGS += -L../libdlm -L../dlm_controld
|
||||||
|
+LDFLAGS += -lpthread -ldlm -ldlmcontrol
|
||||||
|
|
||||||
|
all: $(BIN_TARGET)
|
||||||
|
|
||||||
|
$(BIN_TARGET): $(BIN_SOURCE)
|
||||||
|
- $(CC) $(BIN_SOURCE) $(BIN_CFLAGS) $(BIN_LDFLAGS) -o $@
|
||||||
|
+ $(CC) $(BIN_SOURCE) $(CFLAGS) $(LDFLAGS) -o $@
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.o *.so *.so.* $(BIN_TARGET)
|
||||||
|
diff --git a/fence/Makefile b/fence/Makefile
|
||||||
|
index 77bf0fd15be8..b927879eb141 100644
|
||||||
|
--- a/fence/Makefile
|
||||||
|
+++ b/fence/Makefile
|
||||||
|
@@ -8,39 +8,27 @@ MAN_TARGET = dlm_stonith.8
|
||||||
|
|
||||||
|
BIN_SOURCE = stonith_helper.c
|
||||||
|
|
||||||
|
-BIN_CFLAGS += -D_GNU_SOURCE -O2 -ggdb \
|
||||||
|
- -Wall \
|
||||||
|
- -Wformat \
|
||||||
|
- -Wformat-security \
|
||||||
|
- -Wmissing-prototypes \
|
||||||
|
- -Wnested-externs \
|
||||||
|
- -Wpointer-arith \
|
||||||
|
- -Wextra -Wshadow \
|
||||||
|
- -Wcast-align \
|
||||||
|
- -Wwrite-strings \
|
||||||
|
- -Waggregate-return \
|
||||||
|
- -Wstrict-prototypes \
|
||||||
|
- -Winline \
|
||||||
|
- -Wredundant-decls \
|
||||||
|
- -Wno-sign-compare \
|
||||||
|
- -Wno-unused-parameter \
|
||||||
|
- -Wp,-D_FORTIFY_SOURCE=2 \
|
||||||
|
- -fexceptions \
|
||||||
|
- -fasynchronous-unwind-tables \
|
||||||
|
- -fdiagnostics-show-option \
|
||||||
|
-
|
||||||
|
-BIN_CFLAGS += -fPIE -DPIE
|
||||||
|
-BIN_CFLAGS += `xml2-config --cflags`
|
||||||
|
-BIN_CFLAGS += -I../include
|
||||||
|
-
|
||||||
|
-BIN_LDFLAGS += -Wl,-z,now -Wl,-z,relro -pie
|
||||||
|
-BIN_LDFLAGS += `xml2-config --libs`
|
||||||
|
-BIN_LDFLAGS += -ldl
|
||||||
|
+CFLAGS += -D_GNU_SOURCE -O2 -ggdb \
|
||||||
|
+ -Wall -Wformat -Wformat-security -Wmissing-prototypes -Wnested-externs \
|
||||||
|
+ -Wpointer-arith -Wextra -Wshadow -Wcast-align -Wwrite-strings \
|
||||||
|
+ -Waggregate-return -Wstrict-prototypes -Winline -Wredundant-decls \
|
||||||
|
+ -Wno-sign-compare -Wno-unused-parameter -Wp,-D_FORTIFY_SOURCE=2 \
|
||||||
|
+ -fexceptions -fasynchronous-unwind-tables -fdiagnostics-show-option \
|
||||||
|
+ -Wp,-D_GLIBCXX_ASSERTIONS -fstack-protector-strong \
|
||||||
|
+ -fstack-clash-protection -Wl,-z,now
|
||||||
|
+
|
||||||
|
+CFLAGS += -fPIE -DPIE
|
||||||
|
+CFLAGS += `xml2-config --cflags`
|
||||||
|
+CFLAGS += -I../include
|
||||||
|
+
|
||||||
|
+LDFLAGS += -Wl,-z,relro -pie
|
||||||
|
+LDFLAGS += `xml2-config --libs`
|
||||||
|
+LDFLAGS += -ldl
|
||||||
|
|
||||||
|
all: $(BIN_TARGET)
|
||||||
|
|
||||||
|
$(BIN_TARGET): $(BIN_SOURCE)
|
||||||
|
- $(CC) $(BIN_SOURCE) $(BIN_CFLAGS) $(BIN_LDFLAGS) -o $@ -L.
|
||||||
|
+ $(CC) $(BIN_SOURCE) $(CFLAGS) $(LDFLAGS) -o $@ -L.
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.o *.so *.so.* $(BIN_TARGET)
|
||||||
|
diff --git a/libdlm/Makefile b/libdlm/Makefile
|
||||||
|
index 336c22e7edb4..ab32761912b3 100644
|
||||||
|
--- a/libdlm/Makefile
|
||||||
|
+++ b/libdlm/Makefile
|
||||||
|
@@ -72,10 +72,14 @@ CFLAGS += -D_GNU_SOURCE -O2 -ggdb \
|
||||||
|
-Wno-sign-compare \
|
||||||
|
-Wno-unused-parameter \
|
||||||
|
-Wp,-D_FORTIFY_SOURCE=2 \
|
||||||
|
+ -Wp,-D_GLIBCXX_ASSERTIONS \
|
||||||
|
+ -fstack-protector-strong \
|
||||||
|
+ -fstack-clash-protection \
|
||||||
|
-fexceptions \
|
||||||
|
-fasynchronous-unwind-tables \
|
||||||
|
-fdiagnostics-show-option \
|
||||||
|
- -fPIC
|
||||||
|
+ -fPIC \
|
||||||
|
+ -Wl,-z,now
|
||||||
|
|
||||||
|
LIB_CFLAGS += $(CFLAGS) -D_REENTRANT
|
||||||
|
LLT_CFLAGS += $(CFLAGS)
|
||||||
|
--
|
||||||
|
2.7.5
|
||||||
|
|
28
0004-dlm_controld-ignore-unwanted-uevent-strings.patch
Normal file
28
0004-dlm_controld-ignore-unwanted-uevent-strings.patch
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
From 58f1d500b6da18d62eef35b5f55a030ce8b9b0ce Mon Sep 17 00:00:00 2001
|
||||||
|
From: David Teigland <teigland@redhat.com>
|
||||||
|
Date: Mon, 14 Jan 2019 15:47:07 -0600
|
||||||
|
Subject: [PATCH] dlm_controld: ignore unwanted uevent strings
|
||||||
|
|
||||||
|
---
|
||||||
|
dlm_controld/main.c | 5 ++++-
|
||||||
|
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/dlm_controld/main.c b/dlm_controld/main.c
|
||||||
|
index 40816aae3b24..ca1349bae241 100644
|
||||||
|
--- a/dlm_controld/main.c
|
||||||
|
+++ b/dlm_controld/main.c
|
||||||
|
@@ -350,7 +350,10 @@ static void process_uevent(int ci)
|
||||||
|
act = argv[0];
|
||||||
|
sys = argv[2];
|
||||||
|
|
||||||
|
- if ((strlen(sys) != strlen("dlm")) || strcmp(sys, "dlm"))
|
||||||
|
+ if (!act || !sys || !argv[3])
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ if (strncmp(sys, "dlm", 3))
|
||||||
|
return;
|
||||||
|
|
||||||
|
log_debug("kernel: %s %s", act, argv[3]);
|
||||||
|
--
|
||||||
|
2.7.5
|
||||||
|
|
362
tests/scripts/dlm_seq_async.c
Normal file
362
tests/scripts/dlm_seq_async.c
Normal file
@ -0,0 +1,362 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2011 David Teigland
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License V2
|
||||||
|
* as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it would be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* gcc dlm_seq_async.c -ldlm -o dlm_seq_async */
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#include <syslog.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <asm/types.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <sys/poll.h>
|
||||||
|
#include <sys/un.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/errno.h>
|
||||||
|
|
||||||
|
#include "libdlm.h"
|
||||||
|
|
||||||
|
#define DEFAULT_NUM_R 1000
|
||||||
|
#define DEFAULT_NUM_LPR 1
|
||||||
|
|
||||||
|
static dlm_lshandle_t *dh;
|
||||||
|
static int openclose = 0;
|
||||||
|
static int quiet = 0;
|
||||||
|
static int verbose = 0;
|
||||||
|
static int opt_convert = 0;
|
||||||
|
static int opt_unlock = 0;
|
||||||
|
static int opt_async = 0;
|
||||||
|
static int opt_delay = 0;
|
||||||
|
static unsigned int num_r = DEFAULT_NUM_R;
|
||||||
|
static unsigned int num_lpr = DEFAULT_NUM_LPR;
|
||||||
|
static unsigned int num_iter = 1;
|
||||||
|
static unsigned int iter = 0;
|
||||||
|
static uint32_t *lkids;
|
||||||
|
static struct dlm_lksb lksb;
|
||||||
|
static unsigned int cb_count;
|
||||||
|
static int libdlm_fd;
|
||||||
|
|
||||||
|
#define log_debug(fmt, args...) \
|
||||||
|
do { \
|
||||||
|
if (!quiet) \
|
||||||
|
printf(fmt "\n", ##args); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define log_error(fmt, args...) \
|
||||||
|
do { \
|
||||||
|
printf("ERROR " fmt "\n", ##args); \
|
||||||
|
exit(-1); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
static void astfn(void *arg)
|
||||||
|
{
|
||||||
|
int status = lksb.sb_status;
|
||||||
|
|
||||||
|
cb_count++;
|
||||||
|
|
||||||
|
printf("astfn %x status %d count %u\n", lksb.sb_lkid, status, cb_count);
|
||||||
|
|
||||||
|
if (!status)
|
||||||
|
return;
|
||||||
|
if (status == EUNLOCK)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void seq(int acquire, int convert, int unlock, int mode)
|
||||||
|
{
|
||||||
|
char name[DLM_RESNAME_MAXLEN];
|
||||||
|
uint32_t lkid;
|
||||||
|
int i, j, rv;
|
||||||
|
|
||||||
|
for (i = 0; i < num_r; i++) {
|
||||||
|
snprintf(name, sizeof(name), "seq.%08d", i);
|
||||||
|
|
||||||
|
for (j = 0; j < num_lpr; j++) {
|
||||||
|
memset(&lksb, 0, sizeof(lksb));
|
||||||
|
|
||||||
|
if (acquire) {
|
||||||
|
printf("acquire %s %d\n", name, mode);
|
||||||
|
|
||||||
|
rv = dlm_ls_lockx(dh, mode, &lksb, 0,
|
||||||
|
name, strlen(name), 0,
|
||||||
|
astfn, &lksb, NULL,
|
||||||
|
NULL, NULL);
|
||||||
|
}
|
||||||
|
if (convert) {
|
||||||
|
lksb.sb_lkid = lkids[(i * num_lpr) + j];
|
||||||
|
|
||||||
|
printf("convert %s %x %d\n", name, lksb.sb_lkid, mode);
|
||||||
|
|
||||||
|
rv = dlm_ls_lockx(dh, mode, &lksb, LKF_CONVERT,
|
||||||
|
name, strlen(name), 0,
|
||||||
|
astfn, &lksb, NULL,
|
||||||
|
NULL, NULL);
|
||||||
|
}
|
||||||
|
if (unlock) {
|
||||||
|
lkid = lkids[(i * num_lpr) + j];
|
||||||
|
|
||||||
|
printf("unlock %s %x\n", name, lkid);
|
||||||
|
|
||||||
|
rv = dlm_ls_unlock(dh, lkid, 0, &lksb, &lksb);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rv) {
|
||||||
|
log_error("dlm op %d %d %d %d,%d error %d",
|
||||||
|
acquire, convert, unlock, i, j, rv);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (acquire && lkids)
|
||||||
|
lkids[(i * num_lpr) + j] = lksb.sb_lkid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cb_count = 0;
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
rv = dlm_dispatch(libdlm_fd);
|
||||||
|
if (rv < 0) {
|
||||||
|
printf("dlm_dispatch error %d %d\n", rv, errno);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cb_count == (num_r * num_lpr))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void print_usage(void)
|
||||||
|
{
|
||||||
|
printf("dlm_seq [options]\n");
|
||||||
|
printf("Options:\n");
|
||||||
|
printf("\n");
|
||||||
|
printf(" -i <n> Iterations (0 no limit), default 1)\n");
|
||||||
|
printf(" -r <n> The number of resources, default %d\n", DEFAULT_NUM_R);
|
||||||
|
printf(" -l <n> The number of locks per resource, default %d\n", DEFAULT_NUM_LPR);
|
||||||
|
printf(" -c Convert locks after acquiring them all\n");
|
||||||
|
printf(" -u Unlock locks after acquire/convert\n");
|
||||||
|
printf(" -s Same resource names in each iteration\n");
|
||||||
|
printf(" -d <us> Delay us between consecutive seq\n");
|
||||||
|
printf(" -o Open/close existing lockspace\n");
|
||||||
|
printf(" -v Verbose output\n");
|
||||||
|
printf(" -q Quiet output\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void decode_arguments(int argc, char **argv)
|
||||||
|
{
|
||||||
|
int cont = 1;
|
||||||
|
int optchar;
|
||||||
|
|
||||||
|
while (cont) {
|
||||||
|
optchar = getopt(argc, argv, "i:r:l:cuvqohad:s");
|
||||||
|
|
||||||
|
switch (optchar) {
|
||||||
|
|
||||||
|
case 'i':
|
||||||
|
num_iter = atoi(optarg);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'r':
|
||||||
|
num_r = atoi(optarg);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'l':
|
||||||
|
num_lpr = atoi(optarg);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'c':
|
||||||
|
opt_convert = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'u':
|
||||||
|
opt_unlock = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'd':
|
||||||
|
opt_delay = atoi(optarg);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'o':
|
||||||
|
openclose = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'v':
|
||||||
|
verbose = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'q':
|
||||||
|
quiet = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'h':
|
||||||
|
print_usage();
|
||||||
|
exit(EXIT_SUCCESS);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'V':
|
||||||
|
printf("%s (built %s %s)\n", argv[0], __DATE__, __TIME__);
|
||||||
|
exit(EXIT_SUCCESS);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ':':
|
||||||
|
case '?':
|
||||||
|
fprintf(stderr, "Please use '-h' for usage.\n");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EOF:
|
||||||
|
cont = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
fprintf(stderr, "unknown option: %c\n", optchar);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _acquire(int mode)
|
||||||
|
{
|
||||||
|
seq(1, 0, 0, mode);
|
||||||
|
|
||||||
|
if (opt_delay)
|
||||||
|
usleep(opt_delay);
|
||||||
|
}
|
||||||
|
|
||||||
|
void _convert(int mode)
|
||||||
|
{
|
||||||
|
seq(0, 1, 0, mode);
|
||||||
|
|
||||||
|
if (opt_delay)
|
||||||
|
usleep(opt_delay);
|
||||||
|
}
|
||||||
|
|
||||||
|
void _unlock(void)
|
||||||
|
{
|
||||||
|
seq(0, 0, 1, 0);
|
||||||
|
|
||||||
|
if (opt_delay)
|
||||||
|
usleep(opt_delay);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
int rv, quit = 0;
|
||||||
|
|
||||||
|
decode_arguments(argc, argv);
|
||||||
|
|
||||||
|
printf("%d resources, %d locks per resource\n", num_r, num_lpr);
|
||||||
|
|
||||||
|
if (openclose) {
|
||||||
|
log_debug("dlm_open_lockspace...");
|
||||||
|
|
||||||
|
dh = dlm_open_lockspace("dlm_seq");
|
||||||
|
if (!dh) {
|
||||||
|
log_error("dlm_open_lockspace error %lu %d",
|
||||||
|
(unsigned long)dh, errno);
|
||||||
|
return -ENOTCONN;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log_debug("dlm_new_lockspace...");
|
||||||
|
|
||||||
|
dh = dlm_new_lockspace("dlm_seq", 0600, 0);
|
||||||
|
if (!dh) {
|
||||||
|
log_error("dlm_new_lockspace error %lu %d",
|
||||||
|
(unsigned long)dh, errno);
|
||||||
|
return -ENOTCONN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
libdlm_fd = dlm_ls_get_fd(dh);
|
||||||
|
if (libdlm_fd < 0) {
|
||||||
|
log_error("dlm_ls_get fd error %d %d", libdlm_fd, errno);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
lkids = malloc(sizeof(uint32_t) * (num_r * num_lpr));
|
||||||
|
if (!lkids) {
|
||||||
|
log_error("no mem");
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
_acquire(LKM_EXMODE);
|
||||||
|
_convert(LKM_PRMODE);
|
||||||
|
_unlock();
|
||||||
|
_acquire(LKM_EXMODE);
|
||||||
|
_unlock();
|
||||||
|
_acquire(LKM_EXMODE);
|
||||||
|
_convert(LKM_NLMODE);
|
||||||
|
_convert(LKM_EXMODE);
|
||||||
|
_unlock();
|
||||||
|
|
||||||
|
_acquire(LKM_PRMODE);
|
||||||
|
_convert(LKM_EXMODE);
|
||||||
|
_unlock();
|
||||||
|
_acquire(LKM_PRMODE);
|
||||||
|
_unlock();
|
||||||
|
_acquire(LKM_PRMODE);
|
||||||
|
_convert(LKM_NLMODE);
|
||||||
|
_convert(LKM_PRMODE);
|
||||||
|
_unlock();
|
||||||
|
|
||||||
|
_acquire(LKM_NLMODE);
|
||||||
|
_convert(LKM_PRMODE);
|
||||||
|
_unlock();
|
||||||
|
_acquire(LKM_NLMODE);
|
||||||
|
_unlock();
|
||||||
|
_acquire(LKM_NLMODE);
|
||||||
|
_convert(LKM_EXMODE);
|
||||||
|
_convert(LKM_NLMODE);
|
||||||
|
_unlock();
|
||||||
|
|
||||||
|
iter++;
|
||||||
|
|
||||||
|
if (!num_iter)
|
||||||
|
continue;
|
||||||
|
if (iter == num_iter)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
free(lkids);
|
||||||
|
|
||||||
|
done:
|
||||||
|
if (openclose) {
|
||||||
|
log_debug("dlm_close_lockspace");
|
||||||
|
|
||||||
|
rv = dlm_close_lockspace(dh);
|
||||||
|
if (rv < 0)
|
||||||
|
log_error("dlm_close_lockspace error %d %d",
|
||||||
|
rv, errno);
|
||||||
|
} else {
|
||||||
|
log_debug("dlm_release_lockspace");
|
||||||
|
|
||||||
|
rv = dlm_release_lockspace("dlm_seq", dh, 1);
|
||||||
|
if (rv < 0)
|
||||||
|
log_error("dlm_release_lockspace error %d %d",
|
||||||
|
rv, errno);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
327
tests/scripts/dlm_seq_sync.c
Normal file
327
tests/scripts/dlm_seq_sync.c
Normal file
@ -0,0 +1,327 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2011 David Teigland
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License V2
|
||||||
|
* as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it would be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* gcc dlm_seq_sync.c -ldlm_lt -o dlm_seq_sync */
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#include <syslog.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <asm/types.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <sys/poll.h>
|
||||||
|
#include <sys/un.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/errno.h>
|
||||||
|
|
||||||
|
#include "libdlm.h"
|
||||||
|
|
||||||
|
#define DEFAULT_NUM_R 1000
|
||||||
|
#define DEFAULT_NUM_LPR 1
|
||||||
|
|
||||||
|
static dlm_lshandle_t *dh;
|
||||||
|
static int openclose = 0;
|
||||||
|
static int quiet = 0;
|
||||||
|
static int verbose = 0;
|
||||||
|
static int opt_convert = 0;
|
||||||
|
static int opt_unlock = 0;
|
||||||
|
static int opt_delay = 0;
|
||||||
|
static unsigned int num_r = DEFAULT_NUM_R;
|
||||||
|
static unsigned int num_lpr = DEFAULT_NUM_LPR;
|
||||||
|
static unsigned int num_iter = 1;
|
||||||
|
static unsigned int iter = 0;
|
||||||
|
static uint32_t *lkids;
|
||||||
|
static struct dlm_lksb lksb;
|
||||||
|
static unsigned int cb_count;
|
||||||
|
|
||||||
|
#define log_debug(fmt, args...) \
|
||||||
|
do { \
|
||||||
|
if (!quiet) \
|
||||||
|
printf(fmt "\n", ##args); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define log_error(fmt, args...) \
|
||||||
|
do { \
|
||||||
|
printf("ERROR " fmt "\n", ##args); \
|
||||||
|
exit(-1); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
|
||||||
|
static void seq(int acquire, int convert, int unlock, int mode)
|
||||||
|
{
|
||||||
|
char name[DLM_RESNAME_MAXLEN];
|
||||||
|
uint32_t lkid;
|
||||||
|
int i, j, rv;
|
||||||
|
|
||||||
|
for (i = 0; i < num_r; i++) {
|
||||||
|
snprintf(name, sizeof(name), "seq.%08d", i);
|
||||||
|
|
||||||
|
for (j = 0; j < num_lpr; j++) {
|
||||||
|
memset(&lksb, 0, sizeof(lksb));
|
||||||
|
|
||||||
|
if (acquire) {
|
||||||
|
printf("acquire %s %d\n", name, mode);
|
||||||
|
rv = dlm_ls_lock_wait(dh, mode, &lksb, 0,
|
||||||
|
name, strlen(name),
|
||||||
|
0, NULL, NULL, NULL);
|
||||||
|
}
|
||||||
|
if (convert) {
|
||||||
|
lksb.sb_lkid = lkids[(i * num_lpr) + j];
|
||||||
|
|
||||||
|
printf("convert %s %x %d\n", name, lksb.sb_lkid, mode);
|
||||||
|
|
||||||
|
rv = dlm_ls_lock_wait(dh, mode, &lksb,
|
||||||
|
LKF_CONVERT,
|
||||||
|
name, strlen(name),
|
||||||
|
0, NULL, NULL, NULL);
|
||||||
|
}
|
||||||
|
if (unlock) {
|
||||||
|
lkid = lkids[(i * num_lpr) + j];
|
||||||
|
|
||||||
|
printf("unlock %s %x\n", name, lkid);
|
||||||
|
|
||||||
|
rv = dlm_ls_unlock_wait(dh, lkid, 0, &lksb);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rv) {
|
||||||
|
log_error("dlm op %d %d %d %d,%d error %d",
|
||||||
|
acquire, convert, unlock, i, j, rv);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (acquire && lkids)
|
||||||
|
lkids[(i * num_lpr) + j] = lksb.sb_lkid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void print_usage(void)
|
||||||
|
{
|
||||||
|
printf("dlm_seq [options]\n");
|
||||||
|
printf("Options:\n");
|
||||||
|
printf("\n");
|
||||||
|
printf(" -i <n> Iterations (0 no limit), default 1)\n");
|
||||||
|
printf(" -r <n> The number of resources, default %d\n", DEFAULT_NUM_R);
|
||||||
|
printf(" -l <n> The number of locks per resource, default %d\n", DEFAULT_NUM_LPR);
|
||||||
|
printf(" -c Convert locks after acquiring them all\n");
|
||||||
|
printf(" -u Unlock locks after acquire/convert\n");
|
||||||
|
printf(" -s Same resource names in each iteration\n");
|
||||||
|
printf(" -d <us> Delay us between consecutive seq\n");
|
||||||
|
printf(" -o Open/close existing lockspace\n");
|
||||||
|
printf(" -v Verbose output\n");
|
||||||
|
printf(" -q Quiet output\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void decode_arguments(int argc, char **argv)
|
||||||
|
{
|
||||||
|
int cont = 1;
|
||||||
|
int optchar;
|
||||||
|
|
||||||
|
while (cont) {
|
||||||
|
optchar = getopt(argc, argv, "i:r:l:cuvqohad:s");
|
||||||
|
|
||||||
|
switch (optchar) {
|
||||||
|
|
||||||
|
case 'i':
|
||||||
|
num_iter = atoi(optarg);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'r':
|
||||||
|
num_r = atoi(optarg);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'l':
|
||||||
|
num_lpr = atoi(optarg);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'c':
|
||||||
|
opt_convert = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'u':
|
||||||
|
opt_unlock = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'd':
|
||||||
|
opt_delay = atoi(optarg);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'o':
|
||||||
|
openclose = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'v':
|
||||||
|
verbose = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'q':
|
||||||
|
quiet = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'h':
|
||||||
|
print_usage();
|
||||||
|
exit(EXIT_SUCCESS);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'V':
|
||||||
|
printf("%s (built %s %s)\n", argv[0], __DATE__, __TIME__);
|
||||||
|
exit(EXIT_SUCCESS);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ':':
|
||||||
|
case '?':
|
||||||
|
fprintf(stderr, "Please use '-h' for usage.\n");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EOF:
|
||||||
|
cont = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
fprintf(stderr, "unknown option: %c\n", optchar);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _acquire(int mode)
|
||||||
|
{
|
||||||
|
seq(1, 0, 0, mode);
|
||||||
|
|
||||||
|
if (opt_delay)
|
||||||
|
usleep(opt_delay);
|
||||||
|
}
|
||||||
|
|
||||||
|
void _convert(int mode)
|
||||||
|
{
|
||||||
|
seq(0, 1, 0, mode);
|
||||||
|
|
||||||
|
if (opt_delay)
|
||||||
|
usleep(opt_delay);
|
||||||
|
}
|
||||||
|
|
||||||
|
void _unlock(void)
|
||||||
|
{
|
||||||
|
seq(0, 0, 1, 0);
|
||||||
|
|
||||||
|
if (opt_delay)
|
||||||
|
usleep(opt_delay);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
int rv, quit = 0;
|
||||||
|
|
||||||
|
decode_arguments(argc, argv);
|
||||||
|
|
||||||
|
printf("%d resources, %d locks per resource\n", num_r, num_lpr);
|
||||||
|
|
||||||
|
if (openclose) {
|
||||||
|
log_debug("dlm_open_lockspace...");
|
||||||
|
|
||||||
|
dh = dlm_open_lockspace("dlm_seq");
|
||||||
|
if (!dh) {
|
||||||
|
log_error("dlm_open_lockspace error %lu %d",
|
||||||
|
(unsigned long)dh, errno);
|
||||||
|
return -ENOTCONN;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log_debug("dlm_new_lockspace...");
|
||||||
|
|
||||||
|
dh = dlm_new_lockspace("dlm_seq", 0600, 0);
|
||||||
|
if (!dh) {
|
||||||
|
log_error("dlm_new_lockspace error %lu %d",
|
||||||
|
(unsigned long)dh, errno);
|
||||||
|
return -ENOTCONN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
lkids = malloc(sizeof(uint32_t) * (num_r * num_lpr));
|
||||||
|
if (!lkids) {
|
||||||
|
log_error("no mem");
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
_acquire(LKM_EXMODE);
|
||||||
|
_convert(LKM_PRMODE);
|
||||||
|
_unlock();
|
||||||
|
_acquire(LKM_EXMODE);
|
||||||
|
_unlock();
|
||||||
|
_acquire(LKM_EXMODE);
|
||||||
|
_convert(LKM_NLMODE);
|
||||||
|
_convert(LKM_EXMODE);
|
||||||
|
_unlock();
|
||||||
|
|
||||||
|
_acquire(LKM_PRMODE);
|
||||||
|
_convert(LKM_EXMODE);
|
||||||
|
_unlock();
|
||||||
|
_acquire(LKM_PRMODE);
|
||||||
|
_unlock();
|
||||||
|
_acquire(LKM_PRMODE);
|
||||||
|
_convert(LKM_NLMODE);
|
||||||
|
_convert(LKM_PRMODE);
|
||||||
|
_unlock();
|
||||||
|
|
||||||
|
_acquire(LKM_NLMODE);
|
||||||
|
_convert(LKM_PRMODE);
|
||||||
|
_unlock();
|
||||||
|
_acquire(LKM_NLMODE);
|
||||||
|
_unlock();
|
||||||
|
_acquire(LKM_NLMODE);
|
||||||
|
_convert(LKM_EXMODE);
|
||||||
|
_convert(LKM_NLMODE);
|
||||||
|
_unlock();
|
||||||
|
|
||||||
|
iter++;
|
||||||
|
|
||||||
|
if (!num_iter)
|
||||||
|
continue;
|
||||||
|
if (iter == num_iter)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
free(lkids);
|
||||||
|
|
||||||
|
done:
|
||||||
|
if (openclose) {
|
||||||
|
log_debug("dlm_close_lockspace");
|
||||||
|
|
||||||
|
rv = dlm_close_lockspace(dh);
|
||||||
|
if (rv < 0)
|
||||||
|
log_error("dlm_close_lockspace error %d %d",
|
||||||
|
rv, errno);
|
||||||
|
} else {
|
||||||
|
log_debug("dlm_release_lockspace");
|
||||||
|
|
||||||
|
rv = dlm_release_lockspace("dlm_seq", dh, 1);
|
||||||
|
if (rv < 0)
|
||||||
|
log_error("dlm_release_lockspace error %d %d",
|
||||||
|
rv, errno);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
50
tests/scripts/run_tests.sh
Executable file
50
tests/scripts/run_tests.sh
Executable file
@ -0,0 +1,50 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -x
|
||||||
|
|
||||||
|
COROSYNC_NODE=$(hostname)
|
||||||
|
|
||||||
|
sed -e "s/@LOCAL_NODE@/$COROSYNC_NODE/" test-corosync-conf > /etc/corosync/corosync.conf
|
||||||
|
|
||||||
|
modprobe configfs
|
||||||
|
mount -t configfs none /sys/kernel/config
|
||||||
|
|
||||||
|
modprobe dlm
|
||||||
|
|
||||||
|
ls /sys/kernel/config
|
||||||
|
ls /sys/kernel/config/dlm
|
||||||
|
|
||||||
|
mkdir /var/log/cluster
|
||||||
|
|
||||||
|
systemctl start corosync
|
||||||
|
sleep 2
|
||||||
|
corosync-quorumtool
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
tail -8 /var/log/cluster/corosync.conf
|
||||||
|
|
||||||
|
mkdir /var/log/dlm_controld
|
||||||
|
|
||||||
|
dlm_controld --log_debug --debug_logfile --enable_fencing 0 --enable_quorum_lockspace 0 --enable_quorum_fencing 0 --enable_startup_fencing 0
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
tail -8 /var/log/dlm_controld/dlm_controld.log
|
||||||
|
|
||||||
|
ls /sys/kernel/config/dlm
|
||||||
|
|
||||||
|
dlm_tool status
|
||||||
|
|
||||||
|
gcc dlm_seq_async.c -ldlm -o dlm_seq_async
|
||||||
|
gcc dlm_seq_sync.c -ldlm_lt -o dlm_seq_sync
|
||||||
|
|
||||||
|
./dlm_seq_sync -i 100 -d 10000 -c -u -v -r 10 -i 10
|
||||||
|
|
||||||
|
[ $? -ne 0 ] && echo "dlm_seq_sync error" >&2 && exit 1
|
||||||
|
|
||||||
|
./dlm_seq_async -i 100 -d 10000 -c -u -v -r 10 -i 10
|
||||||
|
|
||||||
|
[ $? -ne 0 ] && echo "dlm_seq_async error" >&2 && exit 1
|
||||||
|
|
||||||
|
pkill dlm_controld
|
||||||
|
sleep 2
|
||||||
|
corosync-cfgtool -H
|
20
tests/scripts/test-corosync-conf
Normal file
20
tests/scripts/test-corosync-conf
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
totem {
|
||||||
|
version: 2
|
||||||
|
secauth: off
|
||||||
|
cluster_name: test
|
||||||
|
}
|
||||||
|
nodelist {
|
||||||
|
node {
|
||||||
|
ring0_addr: @LOCAL_NODE@
|
||||||
|
nodeid: 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
quorum {
|
||||||
|
provider: corosync_votequorum
|
||||||
|
}
|
||||||
|
logging {
|
||||||
|
to_logfile: yes
|
||||||
|
logfile: /var/log/cluster/corosync.log
|
||||||
|
to_syslog: yes
|
||||||
|
}
|
||||||
|
|
14
tests/tests.yml
Normal file
14
tests/tests.yml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
- hosts: localhost
|
||||||
|
roles:
|
||||||
|
- role: standard-test-basic # this is a standard test role, it takes care of the test environment, logging, archiving results..
|
||||||
|
tags:
|
||||||
|
- classic
|
||||||
|
tests:
|
||||||
|
- simple:
|
||||||
|
dir: scripts
|
||||||
|
run: ./run_tests.sh
|
||||||
|
required_packages:
|
||||||
|
- dlm
|
||||||
|
- dlm-devel
|
||||||
|
- corosync
|
||||||
|
- gcc
|
Loading…
Reference in New Issue
Block a user