Re: [dm-devel] Multipath blacklist exceptions issues

From: Benjamin Marzinski <bmarzins redhat com>

To: device-mapper development <dm-devel redhat com>

Cc:

Subject: Re: [dm-devel] Multipath blacklist exceptions issues

Date: Thu, 15 Nov 2007 13:24:28 -0600

On Wed, Nov 14, 2007 at 03:44:56PM -0500, Kiyoshi Ueda wrote:
>
> Why do you need to separate the first stage and the second stage?
> I don't think we need to separate them.
> I think the point is whether execute getuid callout or not.
> So we should need just 2 stages like below:
> (The keyword "pre_getuid_filter" is not so good, just a example.)
>
> ----------------------- /etc/multipath.conf -------------------------
> # First stage filter. Drop unneeded devices on this stage
> pre_getuid_filter {
> whitelist_driver "scsi|cciss"
> whitelist_device {
> vendor "IBM"
> model "S/390 DASD ECKD"
> }
> blacklist_driver "*"
> }
>
> # Second stage filter
> filter {
> blacklist_devnode "sda"
> whitelist_wwid "012345"
> blacklist_wwid "*"
> # only wwid filter may be enough in this stage
> }
> ---------------------------------------------------------------------
>
> ---------------------------- multipathd -----------------------------
> for_each_devnode in /sys/block {
> o gather all sysfs information including vendor and model
> o decide whether it is needed using the first stage filter
> (the matching rule is that first match is used)
> o store it in pathvec if needed
> }
>
> for_each_remained_devnode in pathvec {
> o run getuid callout
> o decide whether it should be used for map by the second stage filter
> (the matching rule is that first match is used)
> }
> ---------------------------------------------------------------------
>
> What do you think?
This method has a lot going for it. I like the ability to override the
default blacklisted drivers, even if it's almost never used, which you
couldn't do with an "invalid_drivers" section. I also like the finer
granularity on which devices to run the getuid callout on.
On the other hand, I agree with Stefan that there will be issues with
trying to gather the sysfs information for devices that just don't have
it. Like he said, you can ignore them, but I wonder if this might cause
problems for the rare, but still possible, case where you expect that
a device should properly provide all its sysfs information, but for some
reason, you can't get it. In this case the device would most likely be
silently ignored. Obviously, we can provide the information if you run
the commands with a higher verbosity.
The bigger issue I have is that there should be a way to tell multipath,
"Don't do anything." Many people have a multipath package installed on
their systems that they don't even know about, and they don't want it to
do anything. Right now, if you have
blacklist {
devnode ".*"
}
You pretty much get that behaviour. If anything on their system happens
to run the multipath command, nothing much really happens. With this
method, your adding more things that multipath has to do before if
realizes that it shouldn't be doing anything. Of course this could
easily be solved by adding the parameter to the defaults section of
multipath.conf.
defaults {
disable yes
}
This would allow multipath to quit immediately after reading the config
file, and it would seperate the choice to disable multipath from the
blacklist setup.
-Ben
> Thanks,
> Kiyoshi Ueda
>
> --
> dm-devel mailing list
> dm-devel redhat com
> https://www.redhat.com/mailman/listinfo/dm-devel