On 15:17 Wed 07 Jul , Iustin Pop wrote:
> On Wed, Jul 07, 2010 at 03:06:18PM +0300, Apollon Oikonomopoulos wrote:
> > On 10:15 Wed 07 Jul , Iustin Pop wrote:
> > See the revised patch for that. Just two questions:
> >
> > 1. The behaviour I chose is to filter out all paths that are not under
> > /dev and return data about the valid paths, only warning that some
> > devices where not under constants.BLOCKDEV_ROOT. Is this an
> > acceptable behaviour (silently dropping invalid paths), or should an
> > exception be raised?
>
> I think it's better to raise an exception, as otherwise the rpc client
> has to check manually and warn (to the job log) that some paths were
> invalid, etc.
I was thinking of the same. Will do, thanks.
>
> > 2. I chose to default to an empty list if devices is not given (see
> > call_bdev_list at lib/rpc.py) at the RPC level. Is this OK? Should I
> > also default on that on the backend level (GetBlockdevList at
> > lib/blockdev.py)?
>
> No, this is not good. Check the other RPC calls, there are no default
> parameters (we can get into the discussion why, but for the patch, just
> require it). The same should stand, I think, for backend (so it's find
> as it is now).
>
> > + # Normalize the rootpath and append a slash, so that we can use a
> > simple
> > + # substring match against device paths. os.path.commonprefix does not
> > seem to
> > + # fit, as os.path.commonprefix(['/some/path/a', '/some/patha']) =
> > '/some/path'
> > + blockdev_root = os.path.normpath(constants.BLOCKDEV_ROOT) + '/'
>
> Wouldn't it be simpler to list the BLOCKDEV_ROOT with a slash at the end
> in constants? We do this for other directories too.
We could, but also add a suitable comment that it should have a trailing
slash. Apart from constants.LOG_DIR, all other directories have no
trailing slash as far as I see.
> > +
> > + if devices:
> > + devpaths = filter(lambda x:
> > os.path.abspath(x).startswith(blockdev_root),
> > + devices)
>
> Please move this to a list comprehension:
>
> [v for v in devices if os.path.abspath(v).startswith…]
I was in doubt about filter vs comprehension as well, thanks.
>
> > + if len(devpaths) != len(devices):
> > + logging.warn("Some paths do not lie under %s and have been skipped."
> > %
> > + constants.BLOCKDEV_ROOT)
>
> Once you change this into an exception, and remove the default devices=[]
> from rpc.py, this can go in.
Should I do the same if the specified paths are not block devices? What
about the warning when blockdev --getsize64 fails?
>
> thanks,
> iustin
Apollon