[sheepdog] [PATCH] sheep: split create_vdi_obj() into 4 functions
Liu Yuan
namei.unix at gmail.com
Thu Aug 22 10:57:30 CEST 2013
On Thu, Aug 22, 2013 at 04:53:48PM +0900, MORITA Kazutaka wrote:
> From: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp>
>
> create_vdi_obj() is very complex because it contains four kinds of
> operations:
>
> - create fresh vdi
> - clone vdi
> - snapshot vdi
> - rebase vdi (rollback)
>
> Splitting them apart make the code much easier to read.
>
> This patch is just a cleanup and doesn't change its logic at all.
>
> Signed-off-by: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp>
> ---
> sheep/ops.c | 10 +-
> sheep/sheep_priv.h | 4 +-
> sheep/vdi.c | 356 ++++++++++++++++++++++++++++++++++++++--------------
> 3 files changed, 277 insertions(+), 93 deletions(-)
>
> diff --git a/sheep/ops.c b/sheep/ops.c
> index 4c0f975..76ff611 100644
> --- a/sheep/ops.c
> +++ b/sheep/ops.c
> @@ -67,6 +67,10 @@ static int cluster_new_vdi(struct request *req)
> struct sd_rsp *rsp = &req->rp;
> uint32_t vid;
> int ret;
> + struct timeval tv;
> +
> + gettimeofday(&tv, NULL);
> +
> struct vdi_iocb iocb = {
> .name = req->data,
> .data_len = hdr->data_length,
> @@ -75,12 +79,16 @@ static int cluster_new_vdi(struct request *req)
> .create_snapshot = !!hdr->vdi.snapid,
> .nr_copies = hdr->vdi.copies ? hdr->vdi.copies :
> sys->cinfo.nr_copies,
> + .time = (uint64_t) tv.tv_sec << 32 | tv.tv_usec * 1000,
> };
>
> if (hdr->data_length != SD_MAX_VDI_LEN)
> return SD_RES_INVALID_PARMS;
>
> - ret = vdi_create(&iocb, &vid);
> + if (iocb.create_snapshot)
> + ret = sd_snapshot_create(&iocb, &vid);
> + else
> + ret = sd_vdi_create(&iocb, &vid);
>
> rsp->vdi.vdi_id = vid;
> rsp->vdi.copies = iocb.nr_copies;
> diff --git a/sheep/sheep_priv.h b/sheep/sheep_priv.h
> index 35c067e..b78afc8 100644
> --- a/sheep/sheep_priv.h
> +++ b/sheep/sheep_priv.h
> @@ -171,6 +171,7 @@ struct vdi_iocb {
> uint32_t snapid;
> bool create_snapshot;
> int nr_copies;
> + uint64_t time;
> };
>
> struct vdi_info {
> @@ -276,7 +277,8 @@ int get_max_copy_number(void);
> int get_req_copy_number(struct request *req);
> int add_vdi_state(uint32_t vid, int nr_copies, bool snapshot);
> int vdi_exist(uint32_t vid);
> -int vdi_create(struct vdi_iocb *iocb, uint32_t *new_vid);
> +int sd_vdi_create(struct vdi_iocb *iocb, uint32_t *new_vid);
> +int sd_snapshot_create(struct vdi_iocb *iocb, uint32_t *new_vid);
sd_{vdi,snapshot}_create share almost the same logic, how about merge them
into one function? Either ask sd_{vdi,snapshot}_create call the shared helper
or use single sd_vdi_create() function
Thanks
Yuan
More information about the sheepdog
mailing list