[lvm-devel] [PATCHv3 2 of 2]LVM: allow exclusive snapshots in cluster
Jonathan Brassow
jbrassow at redhat.com
Wed Feb 2 22:43:02 UTC 2011
On Feb 2, 2011, at 1:50 PM, Alasdair G Kergon wrote:
>>
>> B) 'vgchange -ay' returns success on only one node (as mbroz
>> highlighted) when there are snapshots in a cluster because only one
>> node
>> can activate all the LVs. The other LVs on the remaining nodes still
>> activate properly.
>
> Bug.
> You may have to query the status afterwards to work out the
> right return code to use or combine the responses from all the nodes
> intelligently to see that exactly one has it active.
> (The node running the command doesn't know what activation filters
> might be set on other nodes, so must send the command to every node
> but expect exactly one to end up with it active.)
Still working on the first item, but this one is addressed with the
following patch:
Index: LVM2/lib/activate/activate.c
===================================================================
--- LVM2.orig/lib/activate/activate.c
+++ LVM2/lib/activate/activate.c
@@ -794,13 +794,11 @@ int lv_is_active_exclusive_locally(struc
return _lv_is_active(lv, &l, &e) && l && e;
}
-/*
int lv_is_active_exclusive_remotely(struct logical_volume *lv)
{
int l, e;
return _lv_is_active(lv, &l, &e) && !l && e;
}
-*/
#ifdef DMEVENTD
static struct dm_event_handler *_create_dm_event_handler(struct
cmd_context *cmd, const char *dmuuid, const char *dso,
Index: LVM2/lib/activate/activate.h
===================================================================
--- LVM2.orig/lib/activate/activate.h
+++ LVM2/lib/activate/activate.h
@@ -95,6 +95,7 @@ int lvs_in_vg_opened(const struct volume
int lv_is_active(struct logical_volume *lv);
int lv_is_active_exclusive_locally(struct logical_volume *lv);
+int lv_is_active_exclusive_remotely(struct logical_volume *lv);
int lv_has_target_type(struct dm_pool *mem, struct logical_volume *lv,
const char *layer, const char *target_type);
Index: LVM2/tools/vgchange.c
===================================================================
--- LVM2.orig/tools/vgchange.c
+++ LVM2/tools/vgchange.c
@@ -115,6 +115,16 @@ static int _activate_lvs_in_vg(struct cm
((lv->status & PVMOVE) ))
continue;
+ /*
+ * If the LV is active exclusive remotely,
+ * then ignore it here
+ */
+ if (lv_is_active_exclusive_remotely(lv)) {
+ log_verbose("%s/%s is exclusively active on"
+ " a remote node", vg->name, lv-
>name);
+ continue;
+ }
+
expected_count++;
if (activate == CHANGE_AN) {
More information about the lvm-devel
mailing list