mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-22 17:35:59 +03:00
4902034c89
The normal mode of operation will be to monitor for udev events until an ExternalEvent occurs. In that case the service will disable monitoring for udev events and use ExternalEvent exclusively. Note: User specifies --udev the service will always monitor udev regardless if ExternalEvent is being called too.
62 lines
1.4 KiB
Python
62 lines
1.4 KiB
Python
# Copyright (C) 2015-2016 Red Hat, Inc. All rights reserved.
|
|
#
|
|
# This copyrighted material is made available to anyone wishing to use,
|
|
# modify, copy, or redistribute it subject to the terms and conditions
|
|
# of the GNU General Public License v.2.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
import pyudev
|
|
import threading
|
|
from .refresh import event_add
|
|
from . import cfg
|
|
|
|
observer = None
|
|
observer_lock = threading.RLock()
|
|
|
|
|
|
# noinspection PyUnusedLocal
|
|
def filter_event(action, device):
|
|
# Filter for events of interest and add a request object to be processed
|
|
# when appropriate.
|
|
refresh = False
|
|
|
|
if '.ID_FS_TYPE_NEW' in device:
|
|
fs_type_new = device['.ID_FS_TYPE_NEW']
|
|
|
|
if 'LVM' in fs_type_new:
|
|
refresh = True
|
|
elif fs_type_new == '':
|
|
# Check to see if the device was one we knew about
|
|
if 'DEVNAME' in device:
|
|
found = cfg.om.get_object_by_lvm_id(device['DEVNAME'])
|
|
if found:
|
|
refresh = True
|
|
|
|
if 'DM_LV_NAME' in device:
|
|
refresh = True
|
|
|
|
if refresh:
|
|
event_add(('udev',))
|
|
|
|
|
|
def add():
|
|
with observer_lock:
|
|
global observer
|
|
context = pyudev.Context()
|
|
monitor = pyudev.Monitor.from_netlink(context)
|
|
monitor.filter_by('block')
|
|
observer = pyudev.MonitorObserver(monitor, filter_event)
|
|
observer.start()
|
|
|
|
|
|
def remove():
|
|
with observer_lock:
|
|
global observer
|
|
if observer:
|
|
observer.stop()
|
|
observer = None
|
|
return True
|
|
return False
|