[sheepdog] [PATCH v2] dog: allow vdi snapshot without snapshot tag
Ruoyu
liangry at ucweb.com
Fri Sep 19 04:22:07 CEST 2014
The problem is still existed.
How about disabling empty snapshot tag which will make it simple?
On 2014年09月19日 09:37, Hitoshi Mitake wrote:
> The commit a21bf27906b23448b92cca9943e1019105ffac2f makes
> $ dog vdi snapshot <vdi>
> fail if the <vdi> is an ordinal vdi because newly created VDIs have
> snapid 0. This patch avoids the failure with checking the VDI is
> snapshot or not.
>
> Cc: Ruoyu <liangry at ucweb.com>
> Signed-off-by: Hitoshi Mitake <mitake.hitoshi at lab.ntt.co.jp>
> ---
> dog/vdi.c | 30 ++++++++++++++++++++++--------
> 1 file changed, 22 insertions(+), 8 deletions(-)
>
> v2: correct vdi existence checking
>
> diff --git a/dog/vdi.c b/dog/vdi.c
> index fa6130e..58b0a71 100644
> --- a/dog/vdi.c
> +++ b/dog/vdi.c
> @@ -567,6 +567,7 @@ static int vdi_snapshot(int argc, char **argv)
> int vs_count = 0;
> struct node_id owners[SD_MAX_COPIES];
> int nr_owners = 0, nr_issued_prevent_inode_update = 0;
> + bool fail_if_snapshot = false;
>
> if (vdi_cmd_data.snapshot_id != 0) {
> sd_err("Please specify a non-integer value for "
> @@ -584,16 +585,29 @@ static int vdi_snapshot(int argc, char **argv)
> case SD_RES_NO_TAG:
> break;
> default:
> - sd_err("Failed to create snapshot for %s, maybe "
> - "snapshot id (%d) or tag (%s) is existed",
> - vdiname, vdi_cmd_data.snapshot_id,
> - vdi_cmd_data.snapshot_tag);
> - return EXIT_FAILURE;
> + fail_if_snapshot = true;
> + break;
> }
>
> - ret = read_vdi_obj(vdiname, 0, "", &vid, inode, SD_INODE_HEADER_SIZE);
> - if (ret != EXIT_SUCCESS)
> - return ret;
> + if (fail_if_snapshot) {
> + ret = dog_read_object(vid_to_vdi_oid(vid), inode,
> + SD_INODE_HEADER_SIZE, 0, true);
> + if (ret != EXIT_SUCCESS)
> + return ret;
> +
> + if (vdi_is_snapshot(inode)) {
> + sd_err("Failed to create snapshot for %s, maybe "
> + "snapshot id (%d) or tag (%s) is existed",
> + vdiname, vdi_cmd_data.snapshot_id,
> + vdi_cmd_data.snapshot_tag);
> + return EXIT_FAILURE;
> + }
> + } else {
> + ret = read_vdi_obj(vdiname, 0, "", &vid, inode,
> + SD_INODE_HEADER_SIZE);
> + if (ret != EXIT_SUCCESS)
> + return ret;
> + }
>
> if (inode->store_policy) {
> sd_err("creating a snapshot of hypervolume is not supported");
More information about the sheepdog
mailing list