summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2011-09-25 19:37:00 +0000
committerZdenek Kabelac <zkabelac@redhat.com>2011-09-25 19:37:00 +0000
commit90d106ef19662fbbb686dfacf051a83e243390cd (patch)
treec35c1baf8b81ab4fa22bd0bb8308f0ea8247ff30
parentf1ab501a58e84270de711e3cd0f70a60ab923e51 (diff)
downloadlvm2-90d106ef19662fbbb686dfacf051a83e243390cd.tar.gz
lvm2-90d106ef19662fbbb686dfacf051a83e243390cd.tar.xz
lvm2-90d106ef19662fbbb686dfacf051a83e243390cd.zip
Restart CLVMD with same cluster manager
Add named cluster_ops to easily learn the name of the active cluster manager, so we are able to restart singlenode manager in testing. Add simple test for clvmd -S (restart) and -R (refresh) (though it needs some extensions).
-rw-r--r--WHATS_NEW1
-rw-r--r--daemons/clvmd/clvmd-cman.c1
-rw-r--r--daemons/clvmd/clvmd-command.c10
-rw-r--r--daemons/clvmd/clvmd-comms.h3
-rw-r--r--daemons/clvmd/clvmd-corosync.c1
-rw-r--r--daemons/clvmd/clvmd-openais.c1
-rw-r--r--daemons/clvmd/clvmd-singlenode.c1
-rw-r--r--test/t-clvmd-restart.sh44
8 files changed, 55 insertions, 7 deletions
diff --git a/WHATS_NEW b/WHATS_NEW
index 7bdaaf26..94570e1d 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.02.89 -
==================================
+ Restart CLVMD with same cluster manager.
Fix log_error() usage in raid and unknown segtype initialisation.
Improve testing Makefile.
Fix install_ocf make target when srcdir != builddir. (2.02.80)
diff --git a/daemons/clvmd/clvmd-cman.c b/daemons/clvmd/clvmd-cman.c
index c7a2b2d7..7e76dc44 100644
--- a/daemons/clvmd/clvmd-cman.c
+++ b/daemons/clvmd/clvmd-cman.c
@@ -479,6 +479,7 @@ static int _get_cluster_name(char *buf, int buflen)
}
static struct cluster_ops _cluster_cman_ops = {
+ .name = "cman",
.cluster_init_completed = _cluster_init_completed,
.cluster_send_message = _cluster_send_message,
.name_from_csid = _name_from_csid,
diff --git a/daemons/clvmd/clvmd-command.c b/daemons/clvmd/clvmd-command.c
index 5857a30f..c1ee673f 100644
--- a/daemons/clvmd/clvmd-command.c
+++ b/daemons/clvmd/clvmd-command.c
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2002-2004 Sistina Software, Inc. All rights reserved.
- * Copyright (C) 2004 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2004-2011 Red Hat, Inc. All rights reserved.
*
* This file is part of LVM2.
*
@@ -381,7 +381,7 @@ static int restart_clvmd(void)
} while (hn);
/* clvmd + locks (-E uuid) + debug (-d X) + NULL */
- if (!(argv = malloc((max_locks * 2 + 4) * sizeof(*argv))))
+ if (!(argv = malloc((max_locks * 2 + 5) * sizeof(*argv))))
goto_out;
/*
@@ -396,10 +396,8 @@ static int restart_clvmd(void)
argv[argc++] = debug_arg;
}
- /*
- * FIXME: specify used cluster backend
- * argv[argc++] = strdup("-Isinglenode");
- */
+ argv[argc++] = "-I";
+ argv[argc++] = clops->name;
/* Now add the exclusively-open LVs */
hn = NULL;
diff --git a/daemons/clvmd/clvmd-comms.h b/daemons/clvmd/clvmd-comms.h
index 500bd575..7207334e 100644
--- a/daemons/clvmd/clvmd-comms.h
+++ b/daemons/clvmd/clvmd-comms.h
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2002-2004 Sistina Software, Inc. All rights reserved.
- * Copyright (C) 2004-2009 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2004-2011 Red Hat, Inc. All rights reserved.
*
* This file is part of LVM2.
*
@@ -23,6 +23,7 @@
struct local_client;
struct cluster_ops {
+ const char *name;
void (*cluster_init_completed) (void);
int (*cluster_send_message) (const void *buf, int msglen,
diff --git a/daemons/clvmd/clvmd-corosync.c b/daemons/clvmd/clvmd-corosync.c
index 01ee09ff..e929681c 100644
--- a/daemons/clvmd/clvmd-corosync.c
+++ b/daemons/clvmd/clvmd-corosync.c
@@ -598,6 +598,7 @@ out:
}
static struct cluster_ops _cluster_corosync_ops = {
+ .name = "corosync",
.cluster_init_completed = NULL,
.cluster_send_message = _cluster_send_message,
.name_from_csid = _name_from_csid,
diff --git a/daemons/clvmd/clvmd-openais.c b/daemons/clvmd/clvmd-openais.c
index 0cfb6375..a2fe69e2 100644
--- a/daemons/clvmd/clvmd-openais.c
+++ b/daemons/clvmd/clvmd-openais.c
@@ -667,6 +667,7 @@ static int _get_cluster_name(char *buf, int buflen)
}
static struct cluster_ops _cluster_openais_ops = {
+ .name = "openais",
.cluster_init_completed = NULL,
.cluster_send_message = _cluster_send_message,
.name_from_csid = _name_from_csid,
diff --git a/daemons/clvmd/clvmd-singlenode.c b/daemons/clvmd/clvmd-singlenode.c
index 3a46fb60..0aa894e3 100644
--- a/daemons/clvmd/clvmd-singlenode.c
+++ b/daemons/clvmd/clvmd-singlenode.c
@@ -267,6 +267,7 @@ static int _get_cluster_name(char *buf, int buflen)
}
static struct cluster_ops _cluster_singlenode_ops = {
+ .name = "singlenode",
.cluster_init_completed = NULL,
.cluster_send_message = _cluster_send_message,
.name_from_csid = _name_from_csid,
diff --git a/test/t-clvmd-restart.sh b/test/t-clvmd-restart.sh
new file mode 100644
index 00000000..9a5b1b9d
--- /dev/null
+++ b/test/t-clvmd-restart.sh
@@ -0,0 +1,44 @@
+#!/bin/sh
+# Copyright (C) 2011 Red Hat, Inc. All rights reserved.
+#
+# This copyrighted material is made available to anyone wishing to use,
+# modify, copy, or redistribute it subject to the terms and conditions
+# of the GNU General Public License v.2.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+export LVM_CLVMD_BINARY="lib/clvmd"
+export LVM_BINARY="lib/lvm"
+
+. lib/test
+
+# only clvmd based test, skip otherwise
+test -e LOCAL_CLVMD || skip
+
+aux prepare_devs 1
+
+vgcreate --clustered y $vg $(cat DEVICES)
+
+lvcreate -an --zero n -n $lv1 -l1 $vg
+lvcreate -an --zero n -n $lv2 -l1 $vg
+lvcreate -l1 $vg
+
+lvchange -aey $vg/$lv1
+lvchange -aey $vg/$lv2
+
+"$LVM_CLVMD_BINARY" -S
+sleep .2
+# restarted clvmd has the same PID (no fork, only execve)
+NEW_LOCAL_CLVMD=$(pgrep clvmd)
+read LOCAL_CLVMD < LOCAL_CLVMD
+test "$LOCAL_CLVMD" -eq "$NEW_LOCAL_CLVMD"
+
+# FIXME: Hmm - how could we test exclusivity is preserved in singlenode ?
+lvchange -an $vg/$lv1
+lvchange -ay $vg/$lv1
+
+lib/clvmd -R
+
+vgremove -ff $vg