summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTony Asleson <tasleson@redhat.com>2016-11-01 17:52:18 -0500
committerTony Asleson <tasleson@redhat.com>2016-11-02 16:39:03 -0500
commit60de09b00caf034367278adea420b67700c01b71 (patch)
treeb5a641c1f7a2817fec9cddf71b76b82100e7b8f3
parent38dd79307a51faedb75e092a7913781e6eb88902 (diff)
downloadlvm2-60de09b00caf034367278adea420b67700c01b71.tar.gz
lvmdbusd: Don't use dbus lib in worker thread
Simplify the code paths so that we don't utilize the dbus library code when we are in worker thread context. ref. https://bugs.freedesktop.org/show_bug.cgi?id=98521
-rw-r--r--daemons/lvmdbusd/lv.py24
-rw-r--r--daemons/lvmdbusd/manager.py16
-rw-r--r--daemons/lvmdbusd/pv.py6
-rw-r--r--daemons/lvmdbusd/vg.py13
4 files changed, 16 insertions, 43 deletions
diff --git a/daemons/lvmdbusd/lv.py b/daemons/lvmdbusd/lv.py
index c356799aa..e130ae490 100644
--- a/daemons/lvmdbusd/lv.py
+++ b/daemons/lvmdbusd/lv.py
@@ -21,7 +21,7 @@ from .utils import n, n32
from .loader import common
from .state import State
from . import background
-from .utils import round_size
+from .utils import round_size, mt_remove_dbus_objects
from .job import JobState
@@ -415,7 +415,6 @@ class Lv(LvCommon):
rc, out, err = cmdhandler.lv_remove(lv_name, remove_options)
if rc == 0:
- cfg.om.remove_object(dbo, True)
cfg.load()
else:
# Need to work on error handling, need consistent
@@ -515,15 +514,9 @@ class Lv(LvCommon):
rc, out, err = cmdhandler.vg_lv_snapshot(
lv_name, snapshot_options, name, optional_size)
if rc == 0:
- return_path = '/'
+ cfg.load()
full_name = "%s/%s" % (dbo.vg_name_lookup(), name)
- lvs = load_lvs([full_name], emit_signal=True)[0]
- for l in lvs:
- return_path = l.dbus_object_path()
-
- # Refresh self and all included PVs
- cfg.load(cache_refresh=False)
- return return_path
+ return cfg.om.get_object_path_by_lvm_id(full_name)
else:
raise dbus.exceptions.DBusException(
LV_INTERFACE,
@@ -752,9 +745,8 @@ class LvThinPool(Lv):
lv_name, create_options, name, size_bytes)
if rc == 0:
full_name = "%s/%s" % (dbo.vg_name_lookup(), name)
- lvs = load_lvs([full_name], emit_signal=True)[0]
- for l in lvs:
- lv_created = l.dbus_object_path()
+ cfg.load()
+ lv_created = cfg.om.get_object_path_by_lvm_id(full_name)
else:
raise dbus.exceptions.DBusException(
LV_INTERFACE,
@@ -816,8 +808,7 @@ class LvCachePool(Lv):
# When we cache an LV, the cache pool and the lv that is getting
# cached need to be removed from the object manager and
# re-created as their interfaces have changed!
- cfg.om.remove_object(dbo, emit_signal=True)
- cfg.om.remove_object(lv_to_cache, emit_signal=True)
+ mt_remove_dbus_objects((dbo, lv_to_cache))
cfg.load()
lv_converted = cfg.om.get_object_path_by_lvm_id(fcn)
@@ -879,8 +870,7 @@ class LvCacheLv(Lv):
if rc == 0:
# The cache pool gets removed as hidden and put back to
# visible, so lets delete
- cfg.om.remove_object(cache_pool, emit_signal=True)
- cfg.om.remove_object(dbo, emit_signal=True)
+ mt_remove_dbus_objects((cache_pool, dbo))
cfg.load()
uncached_lv_path = cfg.om.get_object_path_by_lvm_id(lv_name)
diff --git a/daemons/lvmdbusd/manager.py b/daemons/lvmdbusd/manager.py
index e3774425b..e81ee1f05 100644
--- a/daemons/lvmdbusd/manager.py
+++ b/daemons/lvmdbusd/manager.py
@@ -42,12 +42,10 @@ class Manager(AutomatedProperties):
raise dbus.exceptions.DBusException(
MANAGER_INTERFACE, "PV Already exists!")
- created_pv = []
rc, out, err = cmdhandler.pv_create(create_options, [device])
if rc == 0:
- pvs = load_pvs([device], emit_signal=True)[0]
- for p in pvs:
- created_pv = p.dbus_object_path()
+ cfg.load()
+ created_pv = cfg.om.get_object_path_by_lvm_id(device)
else:
raise dbus.exceptions.DBusException(
MANAGER_INTERFACE,
@@ -80,20 +78,14 @@ class Manager(AutomatedProperties):
MANAGER_INTERFACE, 'object path = %s not found' % p)
rc, out, err = cmdhandler.vg_create(create_options, pv_devices, name)
- created_vg = "/"
if rc == 0:
- vgs = load_vgs([name], emit_signal=True)[0]
- for v in vgs:
- created_vg = v.dbus_object_path()
-
- # Update the PVS
- load_pvs(refresh=True, emit_signal=True, cache_refresh=False)
+ cfg.load()
+ return cfg.om.get_object_path_by_lvm_id(name)
else:
raise dbus.exceptions.DBusException(
MANAGER_INTERFACE,
'Exit code %s, stderr = %s' % (str(rc), err))
- return created_vg
@dbus.service.method(
dbus_interface=MANAGER_INTERFACE,
diff --git a/daemons/lvmdbusd/pv.py b/daemons/lvmdbusd/pv.py
index ad8d8b36f..fa07f98d1 100644
--- a/daemons/lvmdbusd/pv.py
+++ b/daemons/lvmdbusd/pv.py
@@ -18,7 +18,7 @@ from .utils import vg_obj_path_generate, n, pv_obj_path_generate, \
from .loader import common
from .request import RequestEntry
from .state import State
-from .utils import round_size
+from .utils import round_size, mt_remove_dbus_objects
# noinspection PyUnusedLocal
@@ -140,7 +140,7 @@ class Pv(AutomatedProperties):
if dbo:
rc, out, err = cmdhandler.pv_remove(pv_name, remove_options)
if rc == 0:
- cfg.om.remove_object(dbo, True)
+ mt_remove_dbus_objects((dbo,))
else:
# Need to work on error handling, need consistent
raise dbus.exceptions.DBusException(
@@ -174,7 +174,7 @@ class Pv(AutomatedProperties):
rc, out, err = cmdhandler.pv_resize(pv_name, new_size_bytes,
resize_options)
if rc == 0:
- dbo.refresh()
+ cfg.load()
else:
raise dbus.exceptions.DBusException(
PV_INTERFACE,
diff --git a/daemons/lvmdbusd/vg.py b/daemons/lvmdbusd/vg.py
index 70ccad6f2..d84bb75a9 100644
--- a/daemons/lvmdbusd/vg.py
+++ b/daemons/lvmdbusd/vg.py
@@ -19,7 +19,7 @@ from .request import RequestEntry
from .loader import common
from .state import State
from . import background
-from .utils import round_size
+from .utils import round_size, mt_remove_dbus_objects
from .job import JobState
@@ -191,14 +191,7 @@ class Vg(AutomatedProperties):
rc, out, err = cmdhandler.vg_remove(vg_name, remove_options)
if rc == 0:
- # Remove the VG
- cfg.om.remove_object(dbo, True)
-
- # If an LV has hidden LVs, things can get quite involved,
- # especially if it's the last thin pool to get removed, so
- # lets refresh all
cfg.load()
-
else:
# Need to work on error handling, need consistent
raise dbus.exceptions.DBusException(
@@ -605,9 +598,7 @@ class Vg(AutomatedProperties):
rc, out, err = create_method(
md.lv_full_name(), data.lv_full_name(), create_options)
if rc == 0:
- cfg.om.remove_object(md, emit_signal=True)
- cfg.om.remove_object(data, emit_signal=True)
-
+ mt_remove_dbus_objects((md, data))
cache_pool_lv = Vg.fetch_new_lv(vg_name, new_name)
else:
raise dbus.exceptions.DBusException(