]> sourceware.org Git - lvm2.git/commitdiff
Replicator: add find_replicator_vgs
authorZdenek Kabelac <zkabelac@redhat.com>
Fri, 21 May 2010 12:55:25 +0000 (12:55 +0000)
committerZdenek Kabelac <zkabelac@redhat.com>
Fri, 21 May 2010 12:55:25 +0000 (12:55 +0000)
Adding find_replicator_vgs() function to find all needed
VGs for replicator-dev LV.

This function is later called before taking lock_vol().

WHATS_NEW
lib/metadata/metadata-exported.h
lib/metadata/replicator_manip.c

index d0539c4629c8f0a5d1623fff496577c69487a85d..0b8d7fb440053aa02426c1776b63b0c78b74a89f 100644 (file)
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
 Version 2.02.67 -
 ===============================
+  Add find_replicator_vgs() to discover all needed VGs for replicator-dev LV.
   Add functions for handling cmd_vg structure.
   Extend _lv_each_dependency() with Replicator dependencies.
   Add check_replicator_segment() for catching internal Replicator errors.
index 37732a58d18db44d93cd6f9f787101c53cd18ede..5fde3835abbe7d66312d9ec1da2be26f636e5fdc 100644 (file)
@@ -815,6 +815,8 @@ struct cmd_vg *cmd_vg_lookup(struct dm_list *cmd_vgs,
 int cmd_vg_read(struct cmd_context *cmd, struct dm_list *cmd_vgs);
 void cmd_vg_release(struct dm_list *cmd_vgs);
 
+int find_replicator_vgs(struct logical_volume *lv);
+
 struct logical_volume *find_pvmove_lv(struct volume_group *vg,
                                      struct device *dev, uint32_t lv_type);
 struct logical_volume *find_pvmove_lv_from_pvname(struct cmd_context *cmd,
index 9bab6385c6b548122bc9271183f8e6eae021b0fc..dc14755e2648154db0697369bfa3f0c60cc1f001 100644 (file)
@@ -602,3 +602,35 @@ void cmd_vg_release(struct dm_list *cmd_vgs)
                cvl->vg = NULL;
        }
 }
+
+/**
+ * Find all needed remote VGs for processing given LV.
+ * Missing VGs are added to VG's cmd_vg list and flag cmd_missing_vgs is set.
+ */
+int find_replicator_vgs(struct logical_volume *lv)
+{
+       struct replicator_site *rsite;
+       int ret = 1;
+
+       if (!lv_is_replicator_dev(lv))
+               return 1;
+
+       dm_list_iterate_items(rsite, &first_seg(lv)->replicator->rsites) {
+               if (!rsite->vg_name || !lv->vg->cmd_vgs ||
+                   cmd_vg_lookup(lv->vg->cmd_vgs, rsite->vg_name, NULL))
+                       continue;
+               ret = 0;
+               /* Using cmd memory pool for cmd_vg list allocation */
+               if (!cmd_vg_add(lv->vg->cmd->mem, lv->vg->cmd_vgs,
+                               rsite->vg_name, NULL, 0)) {
+                       lv->vg->cmd_missing_vgs = 0; /* do not retry */
+                       stack;
+                       break;
+               }
+
+               log_debug("VG: %s added as missing.", rsite->vg_name);
+               lv->vg->cmd_missing_vgs++;
+       }
+
+       return ret;
+}
This page took 0.04772 seconds and 5 git commands to generate.