[sheepdog] [PATCH v2] dog: allow vdi snapshot without snapshot tag

Hitoshi Mitake mitake.hitoshi at lab.ntt.co.jp
Fri Sep 19 04:30:13 CEST 2014


At Fri, 19 Sep 2014 10:22:07 +0800,
Ruoyu wrote:
> 
> The problem is still existed.

Really? On my environment, I couldn't reproduce the problem. Can I see
your command sequence?

> How about disabling empty snapshot tag which will make it simple?

It introduces big incompatibility. I want to avoid it.

Thanks,
Hitoshi

> 
> 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