If lvm2 is run in an event-driven environment, the idea is for it to
give up all its device scanning and filtering. It will hand over
control of what devices to use to an external module shared by
everything that needs to know about devices - including mdadm,
initscripts, mount, hal, udev etc. [What owns this module is irrelevant
but udev is an obvious candidate.]
When udev sees a new device, it will inform each subsystem of the
device.
lvm2 will provide an interface that is given a device and, if a PV is
present on it, lvm2 will pass information about it (including its UUID)
to the external module for storage.
The external module will have an interface capable of being told
by lvm2 (at any time) 'Devices with UUIDs X, Y and Z form a volume
group called VGn'.
Triggers can be defined so that when all the PV UUIDs are present
for a volume group with name VGn, an lvm2 command (like 'vgchange -ay
VGn') gets invoked.
You can see how md, mount etc. can work in a similar event-driven
fashion.