RE: A policy frame work for mdadm (incorporating domains and hotplug and such)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Is there a chance to see policy framework code?
Thanks,
Marcin

> -----Original Message-----
> From: Neil Brown [mailto:neilb@xxxxxxx]
> Sent: Wednesday, July 07, 2010 12:40 AM
> To: Labun, Marcin
> Cc: Williams, Dan J; Doug Ledford; Czarnowska, Anna; Hawrylewicz
> Czarnowski, Przemyslaw; Ciechanowski, Ed; Healey, Douglas D; Neubauer,
> Wojciech; linux-raid@xxxxxxxxxxxxxxx
> Subject: Re: A policy frame work for mdadm (incorporating domains and
> hotplug and such)
> 
> On Tue, 6 Jul 2010 15:03:07 +0100
> "Labun, Marcin" <Marcin.Labun@xxxxxxxxx> wrote:
> 
> >
> > > -----Original Message-----
> > > From: Neil Brown [mailto:neilb@xxxxxxx]
> > > Sent: Thursday, July 01, 2010 8:50 AM
> > > To: Williams, Dan J; Doug Ledford
> > > Cc: Labun, Marcin; Czarnowska, Anna; Hawrylewicz Czarnowski,
> > > Przemyslaw; Ciechanowski, Ed; Healey, Douglas D; Neubauer,
> Wojciech;
> > > linux-raid@xxxxxxxxxxxxxxx
> > > Subject: A policy frame work for mdadm (incorporating domains and
> > > hotplug and such)
> >
> > [cut]
> >
> >
> > >
> > >  Point 2 is that policy revolves primarily around devices (rather
> than
> > >  arrays) and to a lesser extent around metadata types.
> > >  It is devices that are migrated, devices that arrays are built
> from,
> > > devices
> > >  that are automatically made into spares etc.
> > >  Metadata types often encode some specific policy in the metadata,
> so
> > > they
> > >  need some fairly strong role in the policy framework too.  Often
> the
> > >  metadata type is like a parameter to a policy.  "You can
> incorporate
> > > this
> > >  device in any imsm array".
> > >
> > >  So Abstraction 1 is a "Policy statement".
> > >
> > >  A policy statement applies to a particular device, possibly in the
> > > context
> > >  of a particular metadata, and asserts that a particular name has a
> > >  particular value.
> > >      action=spare (ddf1)
> > >  might be a policy statement about a device.  It says that where
> ddf1
> > >  metadata is involved, the device can be made a hot-spare when it
> is
> > >  hot-plugged.
> > >      auto=homehost (0.90)
> > >  might be another which says that auto-assembly may use a non-
> > > disambiguated
> > >  name (no trailing _NN) when assembling this device into a
> > > metadata=0.90
> > >  array providing the homehost information in the metadata matches
> this
> > > host.
> > >
> > >  A statement might not have any metadata type associated.
> > >      action=ignore
> > >  applies irrespective of metadata type.
> > >
> > >  The policy names that I currently envisage are:
> > >
> > >    action=  ignore, include, spare, force-spare
> > >
> > >      which covers the hotplug actions that --incremental might
> perform.
> > >
> > >    auto=  yes, homehost, no
> > >
> > >      which covers the functionality currently in the AUTO
> mdadm.conf
> > > line
> > >
> > >    domain=  arbitrary-string
> > >
> > >      This provides the 'domain' isolation functionality.
> > >      The semantics I have in mind (and the precise details here are
> > > fairly
> > >      important so this cannot be changed lightly) are:
> > >        A device can have a number of domains, possibly from various
> > > sources.
> > >        An array can have a number of domains, from the devices plus
> > > from
> > >        spare-group
> > >
> > >       A device may be attached to an array if all of the domains of
> the
> > > device
> > >       are also domains of the array.  The array may have extra
> domains.
> > > The
> > >       device may not.
> > >
> > >       This requires that if there are overlapping domains, they
> must
> > > properly
> > >       nest. i.e. the intersection of two domains must be empty, or
> one
> > > of the
> > >       domains.  It might make sense to have a domain 'global' which
> all
> > >       devices have, and some other domains which just subsets have.
> > >
> >
> > What is the usage of domain name?
> 
> They determine whether a device may be attached to an array.
> Both the device and the array have domain names.
> A device may only be attached to an array if all of the domain names
> it has also belong to the array.
> 
> The exact mechanism for assigning domain names to arrays is not
> finalised,
> but the first-estimate is that it is the union of the domain names of
> all
> current members.
> 
> > I understand that each policy line can have a domain token.
> 
> "can" yes.  However some policy lines may not.
> 
> > In this case each device that matches "match" keyword gains another
> domain.
> > But how it can use it?
> 
> The domains will typically be subset one of another.
> 
> We might have three sets of devices.
> All are given domain=global
> First set is given domain=first
> second set is given domain=second
> 
> Then we create two arrays, one from devices in the first set, one from
> devices in the second set.
> Now any spare in the first set can be use in the first array
> Any spare in the second set can be used in the second array
> Any spare in the third set can be used in any array.
> 
> >
> > If each policy line has its own domain, so we have explicit relation
> > one-to-one between POLICY line and domain name.
> 
> No, each policy line does not its own domain.  Some do, some don't.
> 
> > Can different POLICY line share the same domain name?
> 
> Definitely.
> 
> >
> > Another questions is domain intersection.
> > It seems to me that the plan is test if "matching" keyword intersect.
> 
> I don't currently foresee any explicit testing for intersection.
> Certainly some devices will match several policy lines, and those
> policy
> lines might make related statements - e.g. that might both give
> different
> domains to the device, or they might even give the same domain to a
> device.
> 
> In generally policy can accumulate.  As mentioned above having multiple
> domains associated with a device is perfectly fine.
> 
> I'm not sure yet how "action=" policies would accumulate.  I suspect
> that the
> most permissive would apply, but I'm not satisfied that I have explored
> all
> the possibilities yet so I'm not sure.
> 
> > In case domain would have non-empty intersection if the path globs
> overlap?
> 
> Yes, domains can have non-empty intersections.  This will normally mean
> that
> one is a subset of another, though that isn't strictly necessary.
> 
> > What else? Type (disk, partition) Metadata name?
> 
> Sorry, I don't know what you are asking here.
> 
> >
> >
> > Matching multiple policy lines that define conflicting policy names
> assignment is invalid configuration, right?
> > (for instance one policy defines action=ignore and the other include
> and disk matches both POLICY line)
> > How to deal with it?
> 
> Good question.
> I'm beginning to think that "action=ignore" isn't something we really
> want.
> It seems appropriate at first glance, but it is inconsistent with the
> other
> possible actions as it forbids rather than allows.
> So we might just discard 'action=ignore'.  If we don't want to consider
> certain devices for md at all, then tell udev not to run mdadm -I on
> them.
> 
> That leave
>   action=include    # include this in the array if it appears to be a
> current
>                     # member
>   action=re-add     # include this in the array if it appears to be a
> current
>                     # member or a member that was recently removed
>   action=spare      # include this if either of the above apply, or if
> it is
>                     # a bare device, make it a spare
>   action=force-space# as above, but if that doesn't succeed, make is a
> spare
>                     # anyway
> 
> Then if multiple action policies apply to the same device, we simply
> take
> the most permissive - the last one in the above list.
> 
> I'm actually wondering if these 'action's should apply during --
> assemble as
> well.
> Normally Assemble will only include devices that are current members.
> Anything that is a bit old is rejected (by the kernel). i.e.
> action=include.
> Probably if action=re-add were in-force, then those rejected devices
> should be
> immediately re-added.
> Can that be extended to other devices? If there are other devices which
> don't
> have a domain conflict and which are bare and have action=spare, should
> they
> be immediately added as spare devices?
> 
> I'm not at all sure about force-space though... it seems just too easy
> for it
> to destroy data.
> 
> Thanks,
> NeilBrown
--
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux