[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