Re: Introduce Storage Instantiation Daemon - Fedora 33 System-Wide Change proposal

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

 



On 7/1/20 2:03 PM, Neal Gompa wrote:
> On Wed, Jul 1, 2020 at 8:00 AM Peter Rajnoha <prajnoha@xxxxxxxxxx> wrote:
>>
>> On 6/30/20 9:35 PM, Igor Raits wrote:
>>> On Tue, 2020-06-30 at 15:18 -0400, Ben Cotton wrote:
>>>> https://fedoraproject.org/wiki/Changes/SID
>>>
>>>> == Summary ==
>>>> Introduce Storage Instantiation Daemon (SID) that aims to provide a
>>>> central event-driven engine to write modules for identifying specific
>>>> Linux storage devices, their dependencies, collecting information and
>>>> state tracking while
>>>> being aware of device groups forming layers and layers forming whole
>>>> stacks or simply creating custom groups of enumerated devices. SID
>>>> will provide mechanisms to retrieve and query collected information
>>>> and a possibility to bind predefined or custom triggers with actions
>>>> for each group.
>>>
>>>> == Owner ==
>>>> * Name: [[User:prajnoha | Peter Rajnoha]]
>>>> * Email: prajnoha@xxxxxxxxxx
>>>
>>>> == Detailed Description ==
>>>> Over the years, various storage subsystems have been installing hooks
>>>> within udev rules and calling out numerous external commands for them
>>>> to be able to react on events like device presence, removal or a
>>>> change in general. However, this approach ended up with very complex
>>>> rules that are hard to maintain and debug if we are considering
>>>> storage setups where we build layers consisting of several underlying
>>>> devices (horizontal scope) and where we can stack one layer on top of
>>>> another (vertical scope), building up diverse storage stacks where we
>>>> also need to track progression of states either at device level or
>>>> group level.
>>>
>>>> SID extends udevd functionality here in a way that it incorporates a
>>>> notion of device grouping directly in its core which helps with
>>>> tracking devices in storage subsystems like LVM, multipath, MD...
>>>> Also, it provides its own database where records are separated into
>>>> per-device, per-module, global or udev namespace. The udev namespace
>>>> keeps per-device records that are imported and/or exported to/from
>>>> udev environment and this is used as compatible communication channel
>>>> with udevd. The records can be marked with restriction flags that aid
>>>> record separation and it prevents other modules to read, write or
>>>> create a record with the same key, hence making sure that only a
>>>> single module can create the records with certain keys (reserving a
>>>> key).
>>>
>>>> Currently, SID project provides a companion command called 'usid'
>>>> which is used for communication between udev and SID itself. After
>>>> calling the usid command in a udev rule, device processing is
>>>> transferred to SID and SID strictly separates the processing into
>>>> discrete phases (device identificaton, pre-scan, device scan,
>>>> post-scan). Within these phases, it is possible to decide whether the
>>>> next phase is executed and it is possible to schedule delayed actions
>>>> or set records in the database that can fire triggers with associated
>>>> actions or records which are then exported to udev environment
>>>> (mainly
>>>> for backwards compatibility and for other udev rules to have a chance
>>>> to react). The scheduled actions and triggers are executed out of
>>>> udev
>>>> context and hence not delaying the udev processing itself and
>>>> improving issues with udev timeouts where unnecessary work is done.
>>>
>>>> A module writer can hook into the processing phases and use SID's API
>>>> to access the database as well as set the triggers with actions or
>>>> schedule separate actions and mark devices as ready or not for use in
>>>> next layers. The database can be used within any phase to retrieve
>>>> and
>>>> store key-value records (where value could be any binary value in
>>>> general) and the records can be marked as transient (only available
>>>> during processing phases for current event) or persistent so they can
>>>> be accessed while processing subsequent events.
>>>
>>>> == Benefit to Fedora ==
>>>> The main benefit is all about centralizing the solution to solve
>>>> issues that storage subsystem maintainers have been hitting with
>>>> udev,
>>>> that is:
>>>
>>>> * providing a central infrastructure for storage event processing,
>>>> currently targeted at udev events
>>>
>>>> * improving the way storage events and their sequences are recognized
>>>> and for which complex udev rules were applied before
>>>
>>>> * single notion of device readiness shared among various storage
>>>> subsystems (single API to set the state instead of setting various
>>>> variables by different subsystems)
>>>
>>>> * providing more enhanced possibilities to store and retrieve
>>>> storage-device-related records when compared to udev database
>>>
>>>> * direct support for generic device grouping (matching
>>>> subsystem-related groups like LVM, multipath, MD... or creating
>>>> arbitrary groups of devices)
>>>
>>>> * centralized solution for scheduling triggers with associated
>>>> actions
>>>> defined on groups of storage devices
>>>
>>>> * adding a centralized solution for delayed actions on storage
>>>> devices
>>>> and groups of devices (avoiding unnecessary work done within udev
>>>> context and hence avoiding frequent udev timeouts when processing
>>>> events for such devices)
>>>
>>> Is this purely about adding some package into the repositories and just
>>> to raise awarness that such tool exist?
>>>
>>
>> It's introducing a new mechanism we could use to better handle events for
>> storage devices - so yes, also raising awareness. At this moment, adding a new
>> package with the daemon and accompanying tools and the functionality disabled
>> by default. Then filling it up with modules, then thinking about making it
>> enabled by default, getting there step-by-step...
>>
> 
> I'll be honest, I don't get why this exists. Most folks expect this to
> be an aspect of UDisks, so why isn't it?
> 

Udisks doesn't solve instantiation - activation, deactivation (currently a
mixture of various udev rules and various external tools do that in
decentralized way, each subsystem its own way). UDisks enumerates existing
devices and manipulates them. SID provides an abstraction on top of udev to
handle events in a way we need for storage (e.g. the grouping part and the
trigger/action part).

To put it in a picture - udev is at the very bottom level (simple properties,
single devs, simple rules), SID sits on top of udev providing those
extensions, then udisks would be using SID to have better view of layers and
stacks, knowing which devices are usable or not.

-- 
Peter
_______________________________________________
devel mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxx
To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxx
Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: https://lists.fedoraproject.org/archives/list/devel@xxxxxxxxxxxxxxxxxxxxxxx




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Fedora Announce]     [Fedora Users]     [Fedora Kernel]     [Fedora Testing]     [Fedora Formulas]     [Fedora PHP Devel]     [Kernel Development]     [Fedora Legacy]     [Fedora Maintainers]     [Fedora Desktop]     [PAM]     [Red Hat Development]     [Gimp]     [Yosemite News]

  Powered by Linux