[sheepdog] [PATCH 1/2] dog: add a new option for reducing identical snapshots

Hitoshi Mitake mitake.hitoshi at lab.ntt.co.jp
Thu Feb 12 07:59:51 CET 2015


At Thu, 12 Feb 2015 14:38:37 +0800,
Liu Yuan wrote:
> 
> On Mon, Feb 09, 2015 at 05:25:48PM +0900, Hitoshi Mitake wrote:
> > Current "dog vdi snapshot" command creates a new snapshot
> > unconditionally, even if a working VDI doesn't have its own
> > objects. In such a case, the created snapshot is redundant because
> > same VDI is already existing.
> 
> What kind of use case will create two identical snapshots? This logic is simple
> and code is clean, but I doubt if there is real users of this option.

Generally speaking, taking snapshot periodically is an ordinal usecase
of enterprise SAN. Of course sheepdog can support this use case. In a
case of sheepdog, making cron job (e.g. daily) which invokes "dog vdi
snapshot" simply enables it.

But if a VDI doesn't have COWed objects, the snapshot will be
redundant. So I want to add this option.

Of course, vdi list will provide information about the COWed object
(used field). But vdi list is heavy operation in a cluster which has
many VDIs because it issues bunch of read requests for inode
headers. So avoiding vdi listing as much as possible is fine.

Thanks,
Hitoshi

> 
> > 
> > This patch adds a new option -R to the dog command for reducing
> > the identical snapshots.
> > 
> > Signed-off-by: Hitoshi Mitake <mitake.hitoshi at lab.ntt.co.jp>
> > ---
> >  dog/vdi.c | 48 +++++++++++++++++++++++++++++++++++++++++++++++-
> >  1 file changed, 47 insertions(+), 1 deletion(-)
> > 
> > diff --git a/dog/vdi.c b/dog/vdi.c
> > index 8e612af..ee465c2 100644
> > --- a/dog/vdi.c
> > +++ b/dog/vdi.c
> > @@ -40,6 +40,8 @@ static struct sd_option vdi_options[] = {
> >  	 "                          neither comparing nor repairing"},
> >  	{'z', "block_size_shift", true, "specify the bit shift num for"
> >  			       " data object size"},
> > +	{'R', "reduce-identical-snapshots", false, "do not create snapshot if "
> > +	 "working VDI doesn't have its own objects"},
> >  	{ 0, NULL, false, NULL },
> >  };
> >  
> > @@ -61,6 +63,7 @@ static struct vdi_cmd_data {
> >  	uint64_t oid;
> >  	bool no_share;
> >  	bool exist;
> > +	bool reduce_identical_snapshots;
> >  } vdi_cmd_data = { ~0, };
> >  
> >  struct get_vdi_info {
> > @@ -605,6 +608,31 @@ fail:
> >  	return NULL;
> >  }
> >  
> > +static bool has_own_objects(uint32_t vid, int *ret)
> 
> Traditionally, we'll have functions return SD_RES_xxx because in this way we
> could propragate the ret to upper callers.
> 
> So it is better to have has_own_objects return SD_RES_xxx for consistency.
> 
> Thanks,
> Yuan
> -- 
> sheepdog mailing list
> sheepdog at lists.wpkg.org
> https://lists.wpkg.org/mailman/listinfo/sheepdog



More information about the sheepdog mailing list