[sheepdog] [PATCH 3/3] sheep: remove vnode_info from vdi path completely
levin li
levin108 at gmail.com
Sun Jun 24 15:24:56 CEST 2012
From: levin li <xingke.lwp at taobao.com>
Since vnode_info is only used for forward_*_obj_req() in the old
code, it's no need to keep it any more.
Signed-off-by: levin li <xingke.lwp at taobao.com>
---
sheep/ops.c | 10 +++---
sheep/sheep_priv.h | 20 +++++------
sheep/vdi.c | 93 +++++++++++++++-------------------------------------
3 files changed, 39 insertions(+), 84 deletions(-)
diff --git a/sheep/ops.c b/sheep/ops.c
index 4ebd4d6..7dd1be8 100644
--- a/sheep/ops.c
+++ b/sheep/ops.c
@@ -112,7 +112,7 @@ static int cluster_new_vdi(struct request *req)
uint32_t vid = 0, nr_copies = sys->nr_copies;
int ret;
- ret = add_vdi(req->vnodes, hdr->epoch, req->data, hdr->data_length,
+ ret = add_vdi(req->data, hdr->data_length,
hdr->vdi.vdi_size, &vid, hdr->vdi.base_vdi_id,
hdr->vdi.copies, hdr->vdi.snapid, &nr_copies);
@@ -141,7 +141,7 @@ static int cluster_del_vdi(struct request *req)
uint32_t vid = 0, nr_copies = sys->nr_copies;
int ret;
- ret = del_vdi(req->vnodes, hdr->epoch, req->data, hdr->data_length,
+ ret = del_vdi(req->data, hdr->data_length,
&vid, hdr->vdi.snapid, &nr_copies);
if (sys->enable_write_cache && ret == SD_RES_SUCCESS)
@@ -171,7 +171,7 @@ static int cluster_get_vdi_info(struct request *req)
else
return SD_RES_INVALID_PARMS;
- ret = lookup_vdi(req->vnodes, hdr->epoch, req->data, tag, &vid,
+ ret = lookup_vdi(req->data, tag, &vid,
hdr->vdi.snapid, &nr_copies, NULL);
if (ret != SD_RES_SUCCESS)
return ret;
@@ -271,7 +271,7 @@ static int cluster_get_vdi_attr(struct request *req)
struct sheepdog_vdi_attr *vattr;
vattr = req->data;
- ret = lookup_vdi(req->vnodes, hdr->epoch, vattr->name, vattr->tag,
+ ret = lookup_vdi(vattr->name, vattr->tag,
&vid, hdr->vdi.snapid, &nr_copies, &created_time);
if (ret != SD_RES_SUCCESS)
return ret;
@@ -280,7 +280,7 @@ static int cluster_get_vdi_attr(struct request *req)
so we use the hash value of the VDI name as the VDI id */
vid = fnv_64a_buf(vattr->name, strlen(vattr->name), FNV1A_64_INIT);
vid &= SD_NR_VDIS - 1;
- ret = get_vdi_attr(req->vnodes, hdr->epoch, req->data, hdr->data_length,
+ ret = get_vdi_attr(req->data, hdr->data_length,
vid, &attrid, nr_copies, created_time,
hdr->flags & SD_FLAG_CMD_CREAT,
hdr->flags & SD_FLAG_CMD_EXCL,
diff --git a/sheep/sheep_priv.h b/sheep/sheep_priv.h
index 290ea82..0d80706 100644
--- a/sheep/sheep_priv.h
+++ b/sheep/sheep_priv.h
@@ -204,23 +204,19 @@ int create_listen_port(int port, void *data);
int init_store(const char *dir, int enable_write_cache);
int init_base_path(const char *dir);
-int add_vdi(struct vnode_info *vnode_info, uint32_t epoch, char *data,
- int data_len, uint64_t size, uint32_t *new_vid,
- uint32_t base_vid, uint32_t copies, int is_snapshot,
- unsigned int *nr_copies);
+int add_vdi(char *data, int data_len, uint64_t size, uint32_t *new_vid,
+ uint32_t base_vid, uint32_t copies, int is_snapshot,
+ unsigned int *nr_copies);
-int del_vdi(struct vnode_info *vnode_info, uint32_t epoch, char *data,
- int data_len, uint32_t *vid, uint32_t snapid,
- unsigned int *nr_copies);
+int del_vdi(char *data, int data_len, uint32_t *vid, uint32_t snapid,
+ unsigned int *nr_copies);
-int lookup_vdi(struct vnode_info *vnode_info, uint32_t epoch, char *name,
- char *tag, uint32_t *vid, uint32_t snapid,
- unsigned int *nr_copies, uint64_t *ctime);
+int lookup_vdi(char *name, char *tag, uint32_t *vid, uint32_t snapid,
+ unsigned int *nr_copies, uint64_t *ctime);
int read_vdis(char *data, int len, unsigned int *rsp_len);
-int get_vdi_attr(struct vnode_info *vnode_info, uint32_t epoch,
- struct sheepdog_vdi_attr *vattr, int data_len, uint32_t vid,
+int get_vdi_attr(struct sheepdog_vdi_attr *vattr, int data_len, uint32_t vid,
uint32_t *attrid, int copies, uint64_t ctime, int write,
int excl, int delete);
diff --git a/sheep/vdi.c b/sheep/vdi.c
index 300cf89..cee973a 100644
--- a/sheep/vdi.c
+++ b/sheep/vdi.c
@@ -17,17 +17,15 @@
/* TODO: should be performed atomically */
-static int create_vdi_obj(struct vnode_info *vnode_info, uint32_t epoch,
- char *name, uint32_t new_vid, uint64_t size, uint32_t base_vid,
- uint32_t cur_vid, uint32_t copies, uint32_t snapid,
- int is_snapshot)
+static int create_vdi_obj(char *name, uint32_t new_vid, uint64_t size,
+ uint32_t base_vid, uint32_t cur_vid,
+ uint32_t copies, uint32_t snapid, int is_snapshot)
{
/* we are not called concurrently */
struct sheepdog_inode *new = NULL, *base = NULL, *cur = NULL;
struct timeval tv;
int ret = SD_RES_NO_MEM;
unsigned long block_size = SD_DATA_OBJ_SIZE;
- int nr_copies;
new = zalloc(sizeof(*new));
if (!new) {
@@ -51,10 +49,6 @@ static int create_vdi_obj(struct vnode_info *vnode_info, uint32_t epoch,
}
}
- nr_copies = get_nr_copies(vnode_info);
- if (nr_copies > copies)
- nr_copies = copies;
-
if (base_vid) {
ret = read_object(vid_to_vdi_oid(base_vid), (char *)base,
sizeof(*base), 0);
@@ -144,15 +138,14 @@ out:
return ret;
}
-static int find_first_vdi(struct vnode_info *vnode_info, uint32_t epoch,
- unsigned long start, unsigned long end, char *name, char *tag,
- uint32_t snapid, uint32_t *vid, unsigned long *deleted_nr,
- uint32_t *next_snap, unsigned int *inode_nr_copies,
- uint64_t *ctime)
+static int find_first_vdi(unsigned long start, unsigned long end,
+ char *name, char *tag, uint32_t snapid,
+ uint32_t *vid, unsigned long *deleted_nr,
+ uint32_t *next_snap, unsigned int *inode_nr_copies,
+ uint64_t *ctime)
{
struct sheepdog_inode *inode = NULL;
unsigned long i;
- int nr_copies;
int ret = SD_RES_NO_MEM;
int vdi_found = 0;
@@ -162,8 +155,6 @@ static int find_first_vdi(struct vnode_info *vnode_info, uint32_t epoch,
goto out;
}
- nr_copies = get_nr_copies(vnode_info);
-
for (i = start; i >= end; i--) {
ret = read_object(vid_to_vdi_oid(i), (char *)inode,
SD_INODE_HEADER_SIZE, 0);
@@ -206,8 +197,7 @@ out:
return ret;
}
-static int do_lookup_vdi(struct vnode_info *vnode_info, uint32_t epoch,
- char *name, int namelen, uint32_t *vid, char *tag,
+static int do_lookup_vdi(char *name, int namelen, uint32_t *vid, char *tag,
uint32_t snapid, uint32_t *next_snapid, unsigned long *right_nr,
unsigned long *deleted_nr, unsigned int *nr_copies,
uint64_t *ctime)
@@ -227,7 +217,7 @@ static int do_lookup_vdi(struct vnode_info *vnode_info, uint32_t epoch,
} else if (nr < SD_NR_VDIS) {
right_side:
/* look up on the right side of the hash point */
- ret = find_first_vdi(vnode_info, epoch, nr - 1, start_nr, name,
+ ret = find_first_vdi(nr - 1, start_nr, name,
tag, snapid, vid, deleted_nr, next_snapid,
nr_copies, ctime);
return ret;
@@ -239,7 +229,7 @@ static int do_lookup_vdi(struct vnode_info *vnode_info, uint32_t epoch,
return SD_RES_FULL_VDI;
else if (nr) {
/* look up on the left side of the hash point */
- ret = find_first_vdi(vnode_info, epoch, nr - 1, 0, name,
+ ret = find_first_vdi(nr - 1, 0, name,
tag, snapid, vid, deleted_nr,
next_snapid, nr_copies, ctime);
if (ret == SD_RES_NO_VDI)
@@ -253,21 +243,20 @@ static int do_lookup_vdi(struct vnode_info *vnode_info, uint32_t epoch,
}
}
-int lookup_vdi(struct vnode_info *vnode_info, uint32_t epoch, char *name,
- char *tag, uint32_t *vid, uint32_t snapid,
- unsigned int *nr_copies, uint64_t *ctime)
+int lookup_vdi(char *name, char *tag, uint32_t *vid, uint32_t snapid,
+ unsigned int *nr_copies, uint64_t *ctime)
{
uint32_t dummy0;
unsigned long dummy1, dummy2;
- return do_lookup_vdi(vnode_info, epoch, name, strlen(name), vid, tag,
+ return do_lookup_vdi(name, strlen(name), vid, tag,
snapid, &dummy0, &dummy1, &dummy2, nr_copies,
ctime);
}
-int add_vdi(struct vnode_info *vnode_info, uint32_t epoch, char *data,
- int data_len, uint64_t size, uint32_t *new_vid, uint32_t base_vid,
- uint32_t copies, int is_snapshot, unsigned int *nr_copies)
+int add_vdi(char *data, int data_len, uint64_t size, uint32_t *new_vid,
+ uint32_t base_vid, uint32_t copies, int is_snapshot,
+ unsigned int *nr_copies)
{
uint32_t cur_vid = 0;
uint32_t next_snapid;
@@ -280,7 +269,7 @@ int add_vdi(struct vnode_info *vnode_info, uint32_t epoch, char *data,
name = data;
- ret = do_lookup_vdi(vnode_info, epoch, name, strlen(name), &cur_vid,
+ ret = do_lookup_vdi(name, strlen(name), &cur_vid,
NULL, 0, &next_snapid, &right_nr, &deleted_nr,
nr_copies, NULL);
@@ -321,17 +310,15 @@ int add_vdi(struct vnode_info *vnode_info, uint32_t epoch, char *data,
copies = sys->nr_copies;
}
- return create_vdi_obj(vnode_info, epoch, name, *new_vid, size,
+ return create_vdi_obj(name, *new_vid, size,
base_vid, cur_vid, copies, next_snapid,
is_snapshot);
}
-static int start_deletion(struct vnode_info *vnode_info, uint32_t vid,
- uint32_t epoch);
+static int start_deletion(uint32_t vid);
-int del_vdi(struct vnode_info *vnode_info, uint32_t epoch, char *data,
- int data_len, uint32_t *vid, uint32_t snapid,
- unsigned int *nr_copies)
+int del_vdi(char *data, int data_len, uint32_t *vid, uint32_t snapid,
+ unsigned int *nr_copies)
{
char *name = data, *tag;
uint32_t dummy0;
@@ -347,12 +334,12 @@ int del_vdi(struct vnode_info *vnode_info, uint32_t epoch, char *data,
goto out;
}
- ret = do_lookup_vdi(vnode_info, epoch, name, strlen(name), vid, tag,
+ ret = do_lookup_vdi(name, strlen(name), vid, tag,
snapid, &dummy0, &dummy1, &dummy2, nr_copies, NULL);
if (ret != SD_RES_SUCCESS)
goto out;
- ret = start_deletion(vnode_info, *vid, epoch);
+ ret = start_deletion(*vid);
out:
return ret;
}
@@ -370,7 +357,6 @@ int read_vdis(char *data, int len, unsigned int *rsp_len)
struct deletion_work {
uint32_t done;
- uint32_t epoch;
struct work work;
struct list_head dw_siblings;
@@ -380,7 +366,6 @@ struct deletion_work {
int count;
uint32_t *buf;
- struct vnode_info *vnodes;
int delete_error;
};
@@ -390,7 +375,6 @@ static int delete_inode(struct deletion_work *dw)
{
struct sheepdog_inode *inode = NULL;
int ret = SD_RES_SUCCESS;
- int nr_copies;
inode = zalloc(sizeof(*inode));
if (!inode) {
@@ -398,8 +382,6 @@ static int delete_inode(struct deletion_work *dw)
goto out;
}
- nr_copies = get_nr_copies(dw->vnodes);
-
ret = read_object(vid_to_vdi_oid(dw->vid), (char *)inode,
SD_INODE_HEADER_SIZE, 0);
if (ret != SD_RES_SUCCESS) {
@@ -428,7 +410,6 @@ static void delete_one(struct work *work)
uint32_t vdi_id = *(dw->buf + dw->count - dw->done - 1);
int ret, i;
struct sheepdog_inode *inode = NULL;
- int nr_copies;
eprintf("%d %d, %16x\n", dw->done, dw->count, vdi_id);
@@ -438,8 +419,6 @@ static void delete_one(struct work *work)
goto out;
}
- nr_copies = get_nr_copies(dw->vnodes);
-
ret = read_object(vid_to_vdi_oid(vdi_id),
(void *)inode, sizeof(*inode), 0);
@@ -494,7 +473,6 @@ static void delete_one_done(struct work *work)
list_del(&dw->dw_siblings);
- put_vnode_info(dw->vnodes);
free(dw->buf);
free(dw);
@@ -512,9 +490,6 @@ static int fill_vdi_list(struct deletion_work *dw, uint32_t root_vid)
struct sheepdog_inode *inode = NULL;
int done = dw->count;
uint32_t vid;
- int nr_copies;
-
- nr_copies = get_nr_copies(dw->vnodes);
inode = malloc(SD_INODE_HEADER_SIZE);
if (!inode) {
@@ -596,8 +571,7 @@ out:
return vid;
}
-static int start_deletion(struct vnode_info *vnode_info, uint32_t vid,
- uint32_t epoch)
+static int start_deletion(uint32_t vid)
{
struct deletion_work *dw = NULL;
int ret = SD_RES_NO_MEM, cloned;
@@ -614,13 +588,10 @@ static int start_deletion(struct vnode_info *vnode_info, uint32_t vid,
dw->count = 0;
dw->vid = vid;
- dw->epoch = epoch;
dw->work.fn = delete_one;
dw->work.done = delete_one_done;
- dw->vnodes = vnode_info;
-
root_vid = get_vdi_root(dw->vid, &cloned);
if (!root_vid) {
ret = SD_RES_EIO;
@@ -648,12 +619,6 @@ static int start_deletion(struct vnode_info *vnode_info, uint32_t vid,
if (dw->count == 0)
goto out;
- /*
- * Only grab the vnode_info reference once we know that we can't fail in
- * this helper thread.
- */
- grab_vnode_info(dw->vnodes);
-
if (!list_empty(&deletion_work_list)) {
list_add_tail(&dw->dw_siblings, &deletion_work_list);
goto out;
@@ -671,23 +636,17 @@ err:
return ret;
}
-int get_vdi_attr(struct vnode_info *vnode_info, uint32_t epoch,
- struct sheepdog_vdi_attr *vattr, int data_len,
+int get_vdi_attr(struct sheepdog_vdi_attr *vattr, int data_len,
uint32_t vid, uint32_t *attrid, int copies, uint64_t ctime,
int wr, int excl, int delete)
{
struct sheepdog_vdi_attr tmp_attr;
uint64_t oid, hval;
uint32_t end;
- int nr_copies;
int ret;
vattr->ctime = ctime;
- nr_copies = get_nr_copies(vnode_info);
- if (nr_copies > copies)
- nr_copies = copies;
-
/* we cannot include value_len for calculating the hash value */
hval = fnv_64a_buf(vattr->name, sizeof(vattr->name), FNV1A_64_INIT);
hval = fnv_64a_buf(vattr->tag, sizeof(vattr->tag), hval);
--
1.7.10
More information about the sheepdog
mailing list