think
This commit is contained in:
parent
adf62d4483
commit
b43f17f655
1 changed files with 80 additions and 0 deletions
80
THOUGHTS.txt
80
THOUGHTS.txt
|
@ -4563,3 +4563,83 @@ plan:
|
|||
introduce uevent-watcher command, update test to use it
|
||||
|
||||
make mount service use it
|
||||
|
||||
Tue Apr 16 18:59:25 BST 2024
|
||||
|
||||
Another idea for maybe-not-now: tftp local/peer addresses could be
|
||||
provided as top-level params (e.g. to nix-build).
|
||||
|
||||
Wed Apr 17 18:57:49 BST 2024
|
||||
|
||||
I hatched a plan (and forgot to save this file) to build a service
|
||||
that subscribes to uevents and retains state so that other services
|
||||
can know about things that happened before they started. I'm wondering
|
||||
if it's really needed though, because there could be one process to
|
||||
read the socket and start/stop *all* the udev triggered services. Not
|
||||
sure how we'd describe this in nix though: how do all the other
|
||||
services
|
||||
|
||||
How we would do a uevent database service (sysfsq):
|
||||
|
||||
for each event e from socket
|
||||
|
||||
if e.action in (add, change)
|
||||
path[e.path] = e.attribues
|
||||
|
||||
if e.action == 'remove'
|
||||
path.remove e.path
|
||||
|
||||
(update-indices e)
|
||||
|
||||
|
||||
(fn update-indices [event]
|
||||
for each k in (keys event)
|
||||
index.k.v += e)
|
||||
|
||||
we also want to not maintain indexes when there are so many values in
|
||||
the index entry to make searching it worthless.
|
||||
|
||||
to retrieve, look at each criterion that has an index and choose the
|
||||
index with fewest elements in the value. scan that index for the other
|
||||
criteria
|
||||
|
||||
there are 813 uevent files in sysfs on arhcive, is this all overkill?
|
||||
maybe we could simplify using a hardcoded stopword list - e.g. don't
|
||||
have indices for MAJOR, MINOR
|
||||
|
||||
what are we going to use for querying? can't be netlink because that's
|
||||
a shared medium (broadcast/multicast). unix dgram socket? alternative
|
||||
would be to somehow use the filesystem as a database
|
||||
|
||||
Wed Apr 17 22:00:29 BST 2024
|
||||
|
||||
tests. assuming the sysfs setup from all-events.txt, we can write tests lik
|
||||
|
||||
- there is a path for $foo
|
||||
- the attributes are x, y, z
|
||||
|
||||
- when I add a device with $attributes, I can recall it
|
||||
- by path
|
||||
- by attribute value
|
||||
|
||||
- when I remove it again, I cannot access it by path or attributes
|
||||
|
||||
- when I add a device with $attributes major minor foo bar baz
|
||||
it is added to indices for foo bar baz but not major minor
|
||||
|
||||
- when I remove it, it is gone (or marked as unfindable) from all
|
||||
indices
|
||||
|
||||
- when I query with multiple attributes, the search is performed
|
||||
using the most specific attribute (= the attribute whose
|
||||
value at this key has fewest elements)
|
||||
|
||||
|
||||
|
||||
I am still looking for ways to avoid doing this, but it is potentially
|
||||
the first of several "database" services that triggers could want to
|
||||
use so maybe it's an emerging pattern.
|
||||
|
||||
|
||||
https://github.com/philanc/minisock useful? we could almost replace
|
||||
nellie with it only not quite
|
||||
|
|
Loading…
Reference in a new issue