[Sheepdog] [PATCH] sheep: fix nr_copies calculation in delete_one

MORITA Kazutaka morita.kazutaka at gmail.com
Tue May 1 20:18:01 CEST 2012


At Tue, 1 May 2012 11:42:24 -0400,
Christoph Hellwig wrote:
> 
> On Mon, Apr 30, 2012 at 03:54:55PM +0800, Liu Yuan wrote:
> > +       nr_copies = get_nr_copies(dw->vnodes);
> > +       if (nr_copies > inode->nr_copies)
> > +               nr_copies = inode->nr_copies;
> > +
> >         ret = read_object(dw->vnodes, dw->epoch, vid_to_vdi_oid(vdi_id),
> >                           (void *)inode, sizeof(*inode),
> > -                         0, sys->nr_sobjs);
> > +                         0, nr_copies);
> 
> > I think it is really kind of mess and upset me. If we don't get a
> > overall understanding of the code, we shouldn't change the old code
> > WITHOUT a good reason.
> 
> I think the change very much makese sense modulo the bug fixed in this
> patch.
> 
> Let's get back and think about how nr_copies handling works now and
> should work.
> 
> On the VDI level:
> 
>  1) the user specifies a nr_copies level in the vdi creation call
>  2) we need to limit by nr_zones as an upper ceiling.   If the limit
>     is not handled we could either
> 
> 	a) refuse the creation or 
> 	b) only create with the higher number set in the inode, but
>            limiting the actual I/O later on
> 
>  3) all other VDI level I/O should use inode->nr_vnodes and limit it
>     by nr_zones
> 
> The big question is if we want to limit it by sys->nr_copies too, my
> patch did that because it makes little sense to create an object with
> more redudancy if system objects like the inode don't have it.  I think

If nr_copies has a larger value than inode->nr_copies, it should be a
bug.


> the big failure was to not document it.  We could also allow higher
> redundancy, but I don't see a real use case and it makes the code
> harder.

Ideally, sys->nr_copies should be used only when setting
inode->nr_copies in the case the user doesn't specify it.
So I think allowing higher redundancy doesn't make much difference
since sheep doesn't need to know the default redundancy level when
processing I/Os, no?

> 
> Now for the actual data I/O we expect the client to set hdr.copies
> from inode->nr_copies, which the client does, but we don't really
> respect it in sheep right now except for a single place in
> forward_read_obj_req.

I completely agree with changing the code to use hdr.copies.


Thanks,

Kazutaka



More information about the sheepdog mailing list