At Thu, 18 Sep 2014 18:47:24 +0800, Ruoyu wrote: > > > On 2014年09月18日 14:54, 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 <lian...@ucweb.com> > > Signed-off-by: Hitoshi Mitake <mitake.hito...@lab.ntt.co.jp> > Thanks Hitoshi. > The original purpose is to forbid duplicated snapshot tag. > But I found it is not implemented after applying your patch. > > $ dog/dog vdi snapshot test > liangry@linuxmint ~/github/sheepdog.orig $ dog/dog vdi list > Name Id Size Used Shared Creation time VDI id Copies Tag > s test 2 4.0 MB 0.0 MB 4.0 MB 2014-09-10 14:46 7c2b26 3 > s test 3 4.0 MB 0.0 MB 4.0 MB 2014-09-10 15:30 7c2b27 3 > s test 4 4.0 MB 0.0 MB 4.0 MB 2014-09-18 18:41 7c2b28 3 > s test 5 4.0 MB 0.0 MB 4.0 MB 2014-09-18 18:41 7c2b29 3 > test 0 4.0 MB 0.0 MB 4.0 MB 2014-09-18 18:43 7c2b2a 3
Thanks for your testing and sorry for my mistake, I should use dog_read_object() in a case of existing VDI instead of read_vdi_obj(). I'll send v2 soon. Thanks, Hitoshi > > > --- > > dog/vdi.c | 14 ++++++++++---- > > 1 file changed, 10 insertions(+), 4 deletions(-) > > > > diff --git a/dog/vdi.c b/dog/vdi.c > > index fa6130e..0a8a2e9 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,6 +585,15 @@ static int vdi_snapshot(int argc, char **argv) > > case SD_RES_NO_TAG: > > break; > > default: > > + 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 && 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, > > @@ -591,10 +601,6 @@ static int vdi_snapshot(int argc, char **argv) > > return EXIT_FAILURE; > > } > > > > - 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"); > > return EXIT_FAILURE; > > -- sheepdog mailing list sheepdog@lists.wpkg.org http://lists.wpkg.org/mailman/listinfo/sheepdog