[sheepdog] [PATCH 2/6] Revert "sheep: construct data structures for representing family tree"

Liu Yuan namei.unix at gmail.com
Mon Mar 16 13:49:30 CET 2015


From: Liu Yuan <liuyuan at cmss.chinamobile.com>

This reverts commit b30374cf653c6bf93c91e14fe0954c58e4097637.

Signed-off-by: Liu Yuan <liuyuan at cmss.chinamobile.com>
---
 sheep/group.c       |   7 ++-
 sheep/plain_store.c |   2 +-
 sheep/sheep_priv.h  |   2 -
 sheep/vdi.c         | 146 ++--------------------------------------------------
 4 files changed, 9 insertions(+), 148 deletions(-)

diff --git a/sheep/group.c b/sheep/group.c
index 0fce7c0..3dbec11 100644
--- a/sheep/group.c
+++ b/sheep/group.c
@@ -510,10 +510,9 @@ retry:
 		atomic_set_bit(vs[i].vid, sys->vdi_inuse);
 		if (vs[i].deleted)
 			atomic_set_bit(vs[i].vid, sys->vdi_deleted);
-		add_vdi_state_unordered(vs[i].vid, vs[i].nr_copies,
-					vs[i].snapshot, vs[i].copy_policy,
-					vs[i].block_size_shift,
-					vs[i].parent_vid);
+		add_vdi_state(vs[i].vid, vs[i].nr_copies, vs[i].snapshot,
+			      vs[i].copy_policy, vs[i].block_size_shift,
+			      vs[i].parent_vid);
 	}
 out:
 	free(vs);
diff --git a/sheep/plain_store.c b/sheep/plain_store.c
index 4c19832..1027325 100644
--- a/sheep/plain_store.c
+++ b/sheep/plain_store.c
@@ -290,7 +290,7 @@ static int init_vdi_state(uint64_t oid, const char *wd, uint32_t epoch)
 		       "wat %s", oid, epoch, wd);
 		goto out;
 	}
-	add_vdi_state_unordered(oid_to_vid(oid), inode->nr_copies,
+	add_vdi_state(oid_to_vid(oid), inode->nr_copies,
 		      vdi_is_snapshot(inode), inode->copy_policy,
 		      inode->block_size_shift, inode->parent_vdi_id);
 
diff --git a/sheep/sheep_priv.h b/sheep/sheep_priv.h
index 4a4274b..4e93b02 100644
--- a/sheep/sheep_priv.h
+++ b/sheep/sheep_priv.h
@@ -334,8 +334,6 @@ int get_obj_copy_number(uint64_t oid, int nr_zones);
 int get_req_copy_number(struct request *req);
 int add_vdi_state(uint32_t vid, int nr_copies, bool snapshot,
 		  uint8_t, uint8_t block_size_shift, uint32_t parent_vid);
-int add_vdi_state_unordered(uint32_t vid, int nr_copies, bool snapshot,
-		  uint8_t, uint8_t block_size_shift, uint32_t parent_vid);
 int vdi_exist(uint32_t vid);
 int vdi_create(const struct vdi_iocb *iocb, uint32_t *new_vid);
 int vdi_snapshot(const struct vdi_iocb *iocb, uint32_t *new_vid);
diff --git a/sheep/vdi.c b/sheep/vdi.c
index 9bf6b23..982f587 100644
--- a/sheep/vdi.c
+++ b/sheep/vdi.c
@@ -30,125 +30,11 @@ struct vdi_state_entry {
 	int nr_participants;
 	enum shared_lock_state participants_state[SD_MAX_COPIES];
 	struct node_id participants[SD_MAX_COPIES];
-
-	struct vdi_family_member *family_member;
 };
 
 static struct rb_root vdi_state_root = RB_ROOT;
 static struct sd_rw_lock vdi_state_lock = SD_RW_LOCK_INITIALIZER;
 
-struct vdi_family_member {
-	uint32_t vid, parent_vid;
-	struct vdi_family_member *parent;
-	struct vdi_state_entry *entry;
-
-	struct list_node roots_list; /* only used for root VDIs */
-
-	struct list_head child_list_head;
-	struct list_node child_list_node;
-};
-
-static LIST_HEAD(vdi_family_roots);
-static LIST_HEAD(vdi_family_temporal_orphans);
-static struct sd_mutex vdi_family_mutex = SD_MUTEX_INITIALIZER;
-
-static struct vdi_family_member *lookup_vdi_family_member(uint32_t vid,
-				  struct vdi_family_member *family_member)
-{
-	/* FIXME: more effective data structure */
-	struct vdi_family_member *vdi;
-
-	if (family_member->vid == vid)
-		return family_member;
-
-	list_for_each_entry(vdi, &family_member->child_list_head,
-			    child_list_node) {
-		struct vdi_family_member *ret;
-
-		ret = lookup_vdi_family_member(vid, vdi);
-		if (ret)
-			return ret;
-	}
-
-	return NULL;
-}
-
-static void update_vdi_family(uint32_t parent_vid,
-			      struct vdi_state_entry *entry, bool unordered)
-{
-	uint32_t vid = entry->vid;
-	struct vdi_family_member *new, *vdi, *parent;
-
-	sd_mutex_lock(&vdi_family_mutex);
-
-	if (!parent_vid) {
-		new = xzalloc(sizeof(*new));
-		new->vid = vid;
-		new->entry = entry;
-		entry->family_member = new;
-
-		INIT_LIST_NODE(&new->roots_list);
-		INIT_LIST_HEAD(&new->child_list_head);
-
-		list_add_tail(&new->roots_list, &vdi_family_roots);
-
-		sd_debug("new vid %"PRIx32 " is added as a root VDI", vid);
-		goto out;
-	}
-
-	new = xzalloc(sizeof(*new));
-	new->vid = vid;
-	new->parent_vid = parent_vid;
-	new->entry = entry;
-	entry->family_member = new;
-
-	INIT_LIST_HEAD(&new->child_list_head);
-	INIT_LIST_NODE(&new->child_list_node);
-
-	list_for_each_entry(vdi, &vdi_family_roots, roots_list) {
-		parent = lookup_vdi_family_member(parent_vid, vdi);
-		if (parent) {
-			new->parent = parent;
-			goto found;
-		}
-	}
-
-	if (unordered) {
-		sd_debug("parent of VID: %"PRIx32" (%"PRIx32") is not"
-			 " initialized yet", vid, parent_vid);
-
-		list_add_tail(&new->child_list_node,
-			      &vdi_family_temporal_orphans);
-		goto ret;
-	}
-
-	panic("parent VID: %"PRIx32" not found", parent_vid);
-
-found:
-	list_add_tail(&new->child_list_node, &parent->child_list_head);
-	sd_debug("new child vid %"PRIx32" is added to parent %"PRIx32
-		 " correctly", vid, parent_vid);
-
-out:
-	/* correct children from orphan list */
-
-	list_for_each_entry(vdi, &vdi_family_temporal_orphans,
-			    child_list_node) {
-		if (vdi->parent_vid != vid)
-			continue;
-
-		list_del(&vdi->child_list_node);
-		list_add_tail(&vdi->child_list_node, &new->child_list_head);
-		vdi->parent = new;
-
-		sd_debug("new vid %"PRIx32" rescued orphan vid %"PRIx32"",
-			 vid, vdi->vid);
-	}
-
-ret:
-	sd_mutex_unlock(&vdi_family_mutex);
-}
-
 /*
  * ec_max_data_strip represent max number of data strips in the cluster. When
  * nr_zones < it, we don't purge the stale objects because for erasure coding,
@@ -303,12 +189,10 @@ int get_req_copy_number(struct request *req)
 	return nr_copies;
 }
 
-static int do_add_vdi_state(uint32_t vid, int nr_copies, bool snapshot,
-			    uint8_t cp, uint8_t block_size_shift,
-			    uint32_t parent_vid, bool unordered)
+int add_vdi_state(uint32_t vid, int nr_copies, bool snapshot,
+		  uint8_t cp, uint8_t block_size_shift, uint32_t parent_vid)
 {
 	struct vdi_state_entry *entry, *old;
-	bool already_exists = false;
 
 	entry = xzalloc(sizeof(*entry));
 	entry->vid = vid;
@@ -332,8 +216,8 @@ static int do_add_vdi_state(uint32_t vid, int nr_copies, bool snapshot,
 		sd_mutex_unlock(&m);
 	}
 
-	sd_debug("%" PRIx32 ", %d, %d, %"PRIu8", %"PRIx32,
-		 vid, nr_copies, cp, block_size_shift, parent_vid);
+	sd_debug("%" PRIx32 ", %d, %d, %"PRIu8,
+		 vid, nr_copies, cp, block_size_shift);
 
 	sd_write_lock(&vdi_state_lock);
 	old = vdi_state_insert(&vdi_state_root, entry);
@@ -354,32 +238,13 @@ static int do_add_vdi_state(uint32_t vid, int nr_copies, bool snapshot,
 
 			entry->parent_vid = parent_vid;
 		}
-
-		already_exists = true;
 	}
 
-	if (!already_exists)
-		update_vdi_family(parent_vid, entry, unordered);
-
 	sd_rw_unlock(&vdi_state_lock);
 
 	return SD_RES_SUCCESS;
 }
 
-int add_vdi_state(uint32_t vid, int nr_copies, bool snapshot,
-		  uint8_t cp, uint8_t block_size_shift, uint32_t parent_vid)
-{
-	return do_add_vdi_state(vid, nr_copies, snapshot, cp, block_size_shift,
-				parent_vid, false);
-}
-
-int add_vdi_state_unordered(uint32_t vid, int nr_copies, bool snapshot,
-		  uint8_t cp, uint8_t block_size_shift, uint32_t parent_vid)
-{
-	return do_add_vdi_state(vid, nr_copies, snapshot, cp, block_size_shift,
-				parent_vid, true);
-}
-
 int fill_vdi_state_list(const struct sd_req *hdr,
 			struct sd_rsp *rsp, void *data)
 {
@@ -1524,8 +1389,7 @@ int vdi_create(const struct vdi_iocb *iocb, uint32_t *new_vid)
 	if (info.snapid == 0)
 		info.snapid = 1;
 	*new_vid = info.free_bit;
-	ret = notify_vdi_add(*new_vid, iocb->nr_copies,
-			     iocb->base_vid == 0 ? info.vid : iocb->base_vid,
+	ret = notify_vdi_add(*new_vid, iocb->nr_copies, info.vid,
 			     iocb->copy_policy, iocb->block_size_shift);
 	if (ret != SD_RES_SUCCESS)
 		return ret;
-- 
1.9.1




More information about the sheepdog mailing list