master - test/lib/aux.sh: Remove incorrect comment
by tasleson
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=756f51eac8f42c...
Commit: 756f51eac8f42c85f091ebbc4dc8bb2f1569a38e
Parent: 7c386bf4d44121afdaebbbe03569155d1f5f7569
Author: Tony Asleson <tasleson(a)redhat.com>
AuthorDate: Mon Aug 29 14:29:12 2016 -0500
Committer: Tony Asleson <tasleson(a)redhat.com>
CommitterDate: Mon Aug 29 15:26:56 2016 -0500
test/lib/aux.sh: Remove incorrect comment
The dbus service needs to use the system bus. The test environment does
not allow work with session bus environment.
---
test/lib/aux.sh | 1 -
1 files changed, 0 insertions(+), 1 deletions(-)
diff --git a/test/lib/aux.sh b/test/lib/aux.sh
index 26b4ec1..7dffdcb 100644
--- a/test/lib/aux.sh
+++ b/test/lib/aux.sh
@@ -329,7 +329,6 @@ prepare_lvmdbusd() {
which python3 >/dev/null || skip "Missing python3"
python3 -c "import pyudev, dbus, gi.repository" || skip "Missing python modules"
- # TODO: Tests should use session bus instead of system bus
# Copy the needed file to run on the system bus if it doesn't
# already exist
if [ ! -f /etc/dbus-1/system.d/com.redhat.lvmdbus1.conf ]; then
7 years, 7 months
master - test/lib/aux.sh: Remove '--udev' for lvmdbusd start
by tasleson
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=7c386bf4d44121...
Commit: 7c386bf4d44121afdaebbbe03569155d1f5f7569
Parent: 70d4e2e8d50a1d095b2ba1a4286fdcaeb8aa321e
Author: Tony Asleson <tasleson(a)redhat.com>
AuthorDate: Mon Aug 29 14:28:12 2016 -0500
Committer: Tony Asleson <tasleson(a)redhat.com>
CommitterDate: Mon Aug 29 15:26:56 2016 -0500
test/lib/aux.sh: Remove '--udev' for lvmdbusd start
The service will start up with udev monitoring and disable it if lvm
starts calling ExternalEvent.
---
test/lib/aux.sh | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/test/lib/aux.sh b/test/lib/aux.sh
index 726cfe3..26b4ec1 100644
--- a/test/lib/aux.sh
+++ b/test/lib/aux.sh
@@ -337,7 +337,7 @@ prepare_lvmdbusd() {
fi
echo "preparing lvmdbusd..."
- "$daemon" --debug --udev > debug.log_LVMDBUSD_out 2>&1 &
+ "$daemon" --debug > debug.log_LVMDBUSD_out 2>&1 &
local pid=$!
sleep 1
7 years, 7 months
master - lvmdbusd: Handle different daemon options
by tasleson
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=70d4e2e8d50a1d...
Commit: 70d4e2e8d50a1d095b2ba1a4286fdcaeb8aa321e
Parent: 1d1fe008468bfbab7285b0a559803cf351472e7c
Author: Tony Asleson <tasleson(a)redhat.com>
AuthorDate: Mon Aug 29 14:26:16 2016 -0500
Committer: Tony Asleson <tasleson(a)redhat.com>
CommitterDate: Mon Aug 29 15:26:56 2016 -0500
lvmdbusd: Handle different daemon options
- Prevent --lvmshell with --nojson, not a valid combination
- If user is preventing json, then no lvmshell usage
- Return boolean on Manager.UseLvmShell
---
daemons/lvmdbusd/cmdhandler.py | 10 ++++++++--
daemons/lvmdbusd/lvmdb.py | 4 ++--
daemons/lvmdbusd/main.py | 13 ++++++++++---
daemons/lvmdbusd/manager.py | 4 ++--
test/dbus/lvmdbustest.py | 11 ++++++++---
5 files changed, 30 insertions(+), 12 deletions(-)
diff --git a/daemons/lvmdbusd/cmdhandler.py b/daemons/lvmdbusd/cmdhandler.py
index 5815031..877f17c 100644
--- a/daemons/lvmdbusd/cmdhandler.py
+++ b/daemons/lvmdbusd/cmdhandler.py
@@ -126,11 +126,13 @@ def _shell_cfg():
lvm_shell = LVMShellProxy()
_t_call = lvm_shell.call_lvm
cfg.SHELL_IN_USE = lvm_shell
+ return True
except Exception:
_t_call = call_lvm
cfg.SHELL_IN_USE = None
log_error(traceback.format_exc())
log_error("Unable to utilize lvm shell, dropping back to fork & exec")
+ return False
def set_execution(shell):
@@ -139,7 +141,7 @@ def set_execution(shell):
# If the user requested lvm shell and we are currently setup that
# way, just return
if cfg.SHELL_IN_USE and shell:
- return
+ return True
else:
if not shell and cfg.SHELL_IN_USE:
cfg.SHELL_IN_USE.exit_shell()
@@ -147,7 +149,11 @@ def set_execution(shell):
_t_call = call_lvm
if shell:
- _shell_cfg()
+ if cfg.args.use_json:
+ return _shell_cfg()
+ else:
+ return False
+ return True
def time_wrapper(command, debug=False):
diff --git a/daemons/lvmdbusd/lvmdb.py b/daemons/lvmdbusd/lvmdb.py
index 2dc593b..187a930 100755
--- a/daemons/lvmdbusd/lvmdb.py
+++ b/daemons/lvmdbusd/lvmdb.py
@@ -24,7 +24,7 @@ except SystemError:
class DataStore(object):
- def __init__(self, usejson=None):
+ def __init__(self, usejson=True):
self.pvs = {}
self.vgs = {}
self.lvs = {}
@@ -42,7 +42,7 @@ class DataStore(object):
# self.refresh()
self.num_refreshes = 0
- if usejson is None:
+ if usejson:
self.json = cmdhandler.supports_json()
else:
self.json = usejson
diff --git a/daemons/lvmdbusd/main.py b/daemons/lvmdbusd/main.py
index d76b5c3..5cf522d 100644
--- a/daemons/lvmdbusd/main.py
+++ b/daemons/lvmdbusd/main.py
@@ -25,9 +25,10 @@ from .background import background_reaper
import traceback
import queue
from . import udevwatch
-from .utils import log_debug
+from .utils import log_debug, log_error
import argparse
import os
+import sys
from .refresh import handle_external_event, event_complete
@@ -102,10 +103,12 @@ def main():
help="Dump debug messages", default=False,
dest='debug')
parser.add_argument("--nojson", action='store_false',
- help="Do not use LVM JSON output", default=None,
+ help="Do not use LVM JSON output (Note: This "
+ "does not work with --lvmshell", default=True,
dest='use_json')
parser.add_argument("--lvmshell", action='store_true',
- help="Use the lvm shell, not fork & exec lvm", default=False,
+ help="Use the lvm shell, not fork & exec lvm",
+ default=False,
dest='use_lvm_shell')
use_session = os.getenv('LVMDBUSD_USE_SESSION', False)
@@ -115,6 +118,10 @@ def main():
cfg.args = parser.parse_args()
+ if cfg.args.use_lvm_shell and not cfg.args.use_json:
+ log_error("You cannot specify --lvmshell and --nojson")
+ sys.exit(1)
+
cmdhandler.set_execution(cfg.args.use_lvm_shell)
# List of threads that we start up
diff --git a/daemons/lvmdbusd/manager.py b/daemons/lvmdbusd/manager.py
index e0da824..b141929 100644
--- a/daemons/lvmdbusd/manager.py
+++ b/daemons/lvmdbusd/manager.py
@@ -167,14 +167,14 @@ class Manager(AutomatedProperties):
@dbus.service.method(
dbus_interface=MANAGER_INTERFACE,
- in_signature='b')
+ in_signature='b', out_signature='b')
def UseLvmShell(self, yes_no):
"""
Allow the client to enable/disable lvm shell, used for testing
:param yes_no:
:return: Nothing
"""
- cmdhandler.set_execution(yes_no)
+ return dbus.Boolean(cmdhandler.set_execution(yes_no))
@dbus.service.method(
dbus_interface=MANAGER_INTERFACE,
diff --git a/test/dbus/lvmdbustest.py b/test/dbus/lvmdbustest.py
index 4d0143c..4327a96 100755
--- a/test/dbus/lvmdbustest.py
+++ b/test/dbus/lvmdbustest.py
@@ -50,7 +50,7 @@ def set_execution(lvmshell):
lvm_manager = dbus.Interface(bus.get_object(
BUSNAME, "/com/redhat/lvmdbus1/Manager"),
"com.redhat.lvmdbus1.Manager")
- lvm_manager.UseLvmShell(lvmshell)
+ return lvm_manager.UseLvmShell(lvmshell)
# noinspection PyUnresolvedReferences
@@ -1155,13 +1155,18 @@ if __name__ == '__main__':
# Test forking & exec new each time
test_shell = os.getenv('LVM_DBUS_TEST_SHELL', 1)
+ # Default to no lvm shell
set_execution(False)
if test_shell == 0:
unittest.main(exit=True)
else:
+ print('\n *** Testing fork & exec *** \n')
unittest.main(exit=False)
# Test lvm shell
print('\n *** Testing lvm shell *** \n')
- set_execution(True)
- unittest.main()
+ if set_execution(True):
+ unittest.main()
+ else:
+ print("WARNING: Unable to dynamically configure "
+ "service to use lvm shell!")
7 years, 7 months
master - lvmdbusd: Include lvm shell testing as the default
by tasleson
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=1d1fe008468bfb...
Commit: 1d1fe008468bfbab7285b0a559803cf351472e7c
Parent: 313c40ed09d4eedba208a50c783d8d20e32de92e
Author: Tony Asleson <tasleson(a)redhat.com>
AuthorDate: Mon Aug 29 13:19:01 2016 -0500
Committer: Tony Asleson <tasleson(a)redhat.com>
CommitterDate: Mon Aug 29 15:26:56 2016 -0500
lvmdbusd: Include lvm shell testing as the default
---
test/dbus/lvmdbustest.py | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/test/dbus/lvmdbustest.py b/test/dbus/lvmdbustest.py
index ced49a0..4d0143c 100755
--- a/test/dbus/lvmdbustest.py
+++ b/test/dbus/lvmdbustest.py
@@ -1153,7 +1153,7 @@ class TestDbusService(unittest.TestCase):
if __name__ == '__main__':
# Test forking & exec new each time
- test_shell = os.getenv('LVM_DBUS_TEST_SHELL', 0)
+ test_shell = os.getenv('LVM_DBUS_TEST_SHELL', 1)
set_execution(False)
7 years, 7 months
master - dbus/testlib.py: Improve type checking
by tasleson
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=313c40ed09d4ee...
Commit: 313c40ed09d4eedba208a50c783d8d20e32de92e
Parent: 9241dbdf57c997bcb8467b823cae6aee7faab03b
Author: Tony Asleson <tasleson(a)redhat.com>
AuthorDate: Mon Aug 29 12:34:19 2016 -0500
Committer: Tony Asleson <tasleson(a)redhat.com>
CommitterDate: Mon Aug 29 15:26:56 2016 -0500
dbus/testlib.py: Improve type checking
Leverage the introspection data to ensure that the service is returning
what is says it will be returning for methods and properties.
---
test/dbus/testlib.py | 108 +++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 93 insertions(+), 15 deletions(-)
diff --git a/test/dbus/testlib.py b/test/dbus/testlib.py
index 550b0bf..712b13a 100644
--- a/test/dbus/testlib.py
+++ b/test/dbus/testlib.py
@@ -63,7 +63,7 @@ class DbusIntrospection(object):
if arg_dir == 'in':
n = arg.attrib['name']
else:
- n = None
+ n = 'RETURN_VALUE'
arg_type = arg.attrib['type']
@@ -86,20 +86,73 @@ class DbusIntrospection(object):
# print('Interfaces...')
# for k, v in list(interfaces.items()):
- # print('Interface %s' % k)
- # if v['methods']:
- # for m, args in list(v['methods'].items()):
- # print(' method: %s' % m)
- # for a, aa in args.items():
- # print(' method arg: %s' % (a))
- # if v['properties']:
- # for p, d in list(v['properties'].items()):
- # print(' Property: %s' % (p))
+ # print('Interface %s' % k)
+ # if v['methods']:
+ # for m, args in list(v['methods'].items()):
+ # print(' method: %s' % m)
+ # for a, aa in args.items():
+ # print(' method arg: %s type %s' %
+ # (a, aa['a_type']))
+ # if v['properties']:
+ # for p, d in list(v['properties'].items()):
+ # print(' Property: %s type= %s' % (p, d['p_type']))
# print('End interfaces')
return interfaces
+def btsr(value):
+ t = type(value)
+ if t == dbus.Boolean:
+ return 'b'
+ elif t == dbus.ObjectPath:
+ return 'o'
+ elif t == dbus.String:
+ return 's'
+ elif t == dbus.Byte:
+ return 'y'
+ elif t == dbus.Int16:
+ return 'n'
+ elif t == dbus.Int32:
+ return 'i'
+ elif t == dbus.Int64:
+ return 'x'
+ elif t == dbus.UInt16:
+ return 'q'
+ elif t == dbus.UInt32:
+ return 'u'
+ elif t == dbus.UInt64:
+ return 't'
+ elif t == dbus.Double:
+ return 'd'
+ elif t == dbus.Struct:
+ rc = '('
+ for vt in value:
+ rc += btsr(vt)
+ rc += ')'
+ return rc
+ elif t == dbus.Array:
+ rc = "a"
+ for i in value:
+ rc += btsr(i)
+ break
+ return rc
+ else:
+ raise RuntimeError("Unhandled type %s" % str(t))
+
+
+def verify_type(value, dbus_str_rep):
+ actual_str_rep = btsr(value)
+
+ if dbus_str_rep != actual_str_rep:
+ # print("%s ~= %s" % (dbus_str_rep, actual_str_rep))
+ # Unless we have a full filled out type we won't match exactly
+ if not dbus_str_rep.startswith(actual_str_rep):
+ raise RuntimeError("Incorrect type, expected= %s actual "
+ "= %s object= %s" %
+ (dbus_str_rep, actual_str_rep,
+ str(type(value))))
+
class RemoteObject(object):
def _set_props(self, props=None):
# print 'Fetching properties'
@@ -119,12 +172,16 @@ class RemoteObject(object):
raise dbe
if props:
for kl, vl in list(props.items()):
+ # Verify type is correct!
+ verify_type(vl,
+ self.introspect[self.interface]['properties'][kl]['p_type'])
setattr(self, kl, vl)
- def __init__(self, specified_bus, object_path, interface, properties=None):
+ def __init__(self, specified_bus, object_path, interface, introspect, properties=None):
self.object_path = object_path
self.interface = interface
self.bus = specified_bus
+ self.introspect = introspect
self.dbus_method = dbus.Interface(specified_bus.get_object(
BUSNAME, self.object_path), self.interface)
@@ -138,7 +195,18 @@ class RemoteObject(object):
return functools.partial(self, item)
def _wrapper(self, _method_name, *args, **kwargs):
- return getattr(self.dbus_method, _method_name)(*args, **kwargs)
+ result = getattr(self.dbus_method, _method_name)(*args, **kwargs)
+ #print("DEBUG: %s.%s result %s" %
+ # (self.interface, _method_name, str(type(result))))
+
+ if 'RETURN_VALUE' in \
+ self.introspect[self.interface]['methods'][_method_name]:
+ r_type = self.introspect[self.interface]['methods'] \
+ [_method_name]['RETURN_VALUE']['a_type']
+
+ verify_type(result, r_type)
+
+ return result
def update(self):
self._set_props()
@@ -152,16 +220,26 @@ class ClientProxy(object):
def __init__(self, specified_bus, object_path, interface=None, props=None):
i = dbus.Interface(specified_bus.get_object(
BUSNAME, object_path), 'org.freedesktop.DBus.Introspectable')
- self.intro_spect = DbusIntrospection.introspect(i.Introspect())
+
+ introspection_xml = i.Introspect()
+
+ # import xml.dom.minidom
+ #
+ # xml = xml.dom.minidom.parseString(introspection_xml)
+ # print(xml.toprettyxml())
+
+ self.intro_spect = DbusIntrospection.introspect(introspection_xml)
for k in self.intro_spect.keys():
sn = ClientProxy._intf_short_name(k)
# print('Client proxy has interface: %s %s' % (k, sn))
if interface and interface == k and props is not None:
- ro = RemoteObject(specified_bus, object_path, k, props)
+ ro = RemoteObject(specified_bus, object_path, k,
+ self.intro_spect, props)
else:
- ro = RemoteObject(specified_bus, object_path, k)
+ ro = RemoteObject(specified_bus, object_path, k,
+ self.intro_spect)
setattr(self, sn, ro)
7 years, 7 months
master - lvmdbusd: Correct return type for empty PeSegments
by tasleson
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=9241dbdf57c997...
Commit: 9241dbdf57c997bcb8467b823cae6aee7faab03b
Parent: 20318e4c6c389b5ee25b8897fb93aaa036878a95
Author: Tony Asleson <tasleson(a)redhat.com>
AuthorDate: Mon Aug 29 12:33:00 2016 -0500
Committer: Tony Asleson <tasleson(a)redhat.com>
CommitterDate: Mon Aug 29 15:26:56 2016 -0500
lvmdbusd: Correct return type for empty PeSegments
---
daemons/lvmdbusd/pv.py | 5 +----
1 files changed, 1 insertions(+), 4 deletions(-)
diff --git a/daemons/lvmdbusd/pv.py b/daemons/lvmdbusd/pv.py
index 0780179..ad8d8b3 100644
--- a/daemons/lvmdbusd/pv.py
+++ b/daemons/lvmdbusd/pv.py
@@ -55,9 +55,6 @@ class PvState(State):
return self.lvm_path
def _lv_object_list(self, vg_name):
-
- # Note we are returning "a(oa(tts))"
-
rc = []
if vg_name:
for lv in sorted(cfg.db.pv_contained_lv(self.lvm_id)):
@@ -242,7 +239,7 @@ class Pv(AutomatedProperties):
def PeSegments(self):
if len(self.state.pe_segments):
return dbus.Array(self.state.pe_segments, signature='(tt)')
- return dbus.Array([], 'a(tt)')
+ return dbus.Array([], '(tt)')
@property
def Exportable(self):
7 years, 7 months
master - lvmdbusd: Be more specific on return types for Lv
by tasleson
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=20318e4c6c389b...
Commit: 20318e4c6c389b5ee25b8897fb93aaa036878a95
Parent: 9aed18a57167451b20fa67a80052d39634447064
Author: Tony Asleson <tasleson(a)redhat.com>
AuthorDate: Mon Aug 29 12:32:20 2016 -0500
Committer: Tony Asleson <tasleson(a)redhat.com>
CommitterDate: Mon Aug 29 15:26:56 2016 -0500
lvmdbusd: Be more specific on return types for Lv
---
daemons/lvmdbusd/lv.py | 15 +++++++++++----
1 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/daemons/lvmdbusd/lv.py b/daemons/lvmdbusd/lv.py
index 6d994ac..3d0b78c 100644
--- a/daemons/lvmdbusd/lv.py
+++ b/daemons/lvmdbusd/lv.py
@@ -103,7 +103,14 @@ class LvState(State):
(pv_uuid, pv_name, pv_segs) = pv
pv_obj = cfg.om.get_object_path_by_uuid_lvm_id(
pv_uuid, pv_name, gen_new=False)
- rc.append((pv_obj, pv_segs))
+
+ segs_decorate = []
+ for i in pv_segs:
+ segs_decorate.append((dbus.UInt64(i[0]),
+ dbus.UInt64(i[1]),
+ dbus.String(i[2])))
+
+ rc.append((dbus.ObjectPath(pv_obj), segs_decorate))
return dbus.Array(rc, signature="(oa(tts))")
@@ -127,7 +134,7 @@ class LvState(State):
op = cfg.om.get_object_path_by_uuid_lvm_id(
l[0], full_name, gen_new=False)
assert op
- rc.append(op)
+ rc.append(dbus.ObjectPath(op))
return rc
def __init__(self, Uuid, Name, Path, SizeBytes,
@@ -140,9 +147,9 @@ class LvState(State):
# value
self._segs = dbus.Array([], signature='s')
if not isinstance(segtypes, list):
- self._segs.append(segtypes)
+ self._segs.append(dbus.String(segtypes))
else:
- self._segs.extend(set(segtypes))
+ self._segs.extend([dbus.String(x) for x in set(segtypes)])
self.Vg = cfg.om.get_object_path_by_uuid_lvm_id(
vg_uuid, vg_name, vg_obj_path_generate)
7 years, 7 months
master - lvmdbustest.py: Remove '-' from tag ch set
by tasleson
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=9aed18a5716745...
Commit: 9aed18a57167451b20fa67a80052d39634447064
Parent: 0985b2d0d45d82fbaac7112c0c575cb14792d021
Author: Tony Asleson <tasleson(a)redhat.com>
AuthorDate: Thu Aug 25 18:41:53 2016 -0500
Committer: Tony Asleson <tasleson(a)redhat.com>
CommitterDate: Mon Aug 29 15:26:55 2016 -0500
lvmdbustest.py: Remove '-' from tag ch set
---
test/dbus/lvmdbustest.py | 7 +++++--
1 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/test/dbus/lvmdbustest.py b/test/dbus/lvmdbustest.py
index 457db96..ced49a0 100755
--- a/test/dbus/lvmdbustest.py
+++ b/test/dbus/lvmdbustest.py
@@ -1107,10 +1107,13 @@ class TestDbusService(unittest.TestCase):
vg_proxy.Vg.LvCreateLinear(r + rs(8, '_lv'),
mib(4), False, -1, {})
- _ALLOWABLE_TAG_CH = string.ascii_letters + string.digits + "._-+/=!:&#"
+ # Wait until BZ https://bugzilla.redhat.com/show_bug.cgi?id=1370002
+ # is corrected before we add '-' in the allowable character set
+ #_ALLOWABLE_TAG_CH = string.ascii_letters + string.digits + "._-+/=!:&#"
+ _ALLOWABLE_TAG_CH = string.ascii_letters + string.digits + "._+/=!:&#"
def _invalid_tag_characters(self):
- bad_tag_ch_set = set(string.printable) - set(self._ALLOWABLE_TAG_CH)
+ bad_tag_ch_set = set(string.printable) - set(self._ALLOWABLE_TAG_CH + '-')
return ''.join(bad_tag_ch_set)
def test_invalid_tags(self):
7 years, 7 months
master - lvmdbusd: Make job.Percent a double
by tasleson
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=0985b2d0d45d82...
Commit: 0985b2d0d45d82fbaac7112c0c575cb14792d021
Parent: 2bb09b4015ec85bb11b68a52e326a01ce3c8f98f
Author: Tony Asleson <tasleson(a)redhat.com>
AuthorDate: Wed Aug 24 22:39:30 2016 -0500
Committer: Tony Asleson <tasleson(a)redhat.com>
CommitterDate: Mon Aug 29 15:26:55 2016 -0500
lvmdbusd: Make job.Percent a double
---
daemons/lvmdbusd/job.py | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/daemons/lvmdbusd/job.py b/daemons/lvmdbusd/job.py
index 7299583..ec286aa 100644
--- a/daemons/lvmdbusd/job.py
+++ b/daemons/lvmdbusd/job.py
@@ -105,7 +105,7 @@ class JobState(object):
# noinspection PyPep8Naming
class Job(AutomatedProperties):
- _Percent_meta = ('y', JOB_INTERFACE)
+ _Percent_meta = ('d', JOB_INTERFACE)
_Complete_meta = ('b', JOB_INTERFACE)
_Result_meta = ('o', JOB_INTERFACE)
_GetError_meta = ('(is)', JOB_INTERFACE)
@@ -121,7 +121,7 @@ class Job(AutomatedProperties):
@property
def Percent(self):
- return dbus.Byte(int(self.state.Percent))
+ return dbus.Double(float(self.state.Percent))
@Percent.setter
def Percent(self, value):
7 years, 7 months
master - lvmdbusd: Be more explicit on return values
by tasleson
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=2bb09b4015ec85...
Commit: 2bb09b4015ec85bb11b68a52e326a01ce3c8f98f
Parent: 4902034c895d26423564175c0636cff8ba4112e1
Author: Tony Asleson <tasleson(a)redhat.com>
AuthorDate: Wed Aug 24 18:31:15 2016 -0500
Committer: Tony Asleson <tasleson(a)redhat.com>
CommitterDate: Mon Aug 29 15:26:55 2016 -0500
lvmdbusd: Be more explicit on return values
The python dbus library tries to make best on what the dbus type is based on
python data type. Some times it gets this wrong, so we will be explicit.
---
daemons/lvmdbusd/job.py | 8 ++++----
daemons/lvmdbusd/lv.py | 40 +++++++++++++++++++++++-----------------
daemons/lvmdbusd/manager.py | 4 ++--
daemons/lvmdbusd/pv.py | 22 ++++++++--------------
daemons/lvmdbusd/utils.py | 2 +-
daemons/lvmdbusd/vg.py | 10 ++++------
6 files changed, 42 insertions(+), 44 deletions(-)
diff --git a/daemons/lvmdbusd/job.py b/daemons/lvmdbusd/job.py
index 520f9a8..7299583 100644
--- a/daemons/lvmdbusd/job.py
+++ b/daemons/lvmdbusd/job.py
@@ -121,7 +121,7 @@ class Job(AutomatedProperties):
@property
def Percent(self):
- return self.state.Percent
+ return dbus.Byte(int(self.state.Percent))
@Percent.setter
def Percent(self, value):
@@ -129,7 +129,7 @@ class Job(AutomatedProperties):
@property
def Complete(self):
- return self.state.Complete
+ return dbus.Boolean(self.state.Complete)
@Complete.setter
def Complete(self, value):
@@ -137,7 +137,7 @@ class Job(AutomatedProperties):
@property
def GetError(self):
- return self.state.GetError
+ return dbus.Struct(self.state.GetError, signature="(is)")
def set_result(self, ec, msg):
self.state.set_result(ec, msg)
@@ -160,7 +160,7 @@ class Job(AutomatedProperties):
@property
def Result(self):
- return self.state.Result
+ return dbus.ObjectPath(self.state.Result)
@property
def lvm_id(self):
diff --git a/daemons/lvmdbusd/lv.py b/daemons/lvmdbusd/lv.py
index 5658d29..6d994ac 100644
--- a/daemons/lvmdbusd/lv.py
+++ b/daemons/lvmdbusd/lv.py
@@ -252,14 +252,16 @@ class LvCommon(AutomatedProperties):
'V': 'thin Volume', 't': 'thin pool', 'T': 'Thin pool data',
'e': 'raid or pool metadata or pool metadata spare',
'-': 'Unspecified'}
- return (self.state.Attr[0], type_map[self.state.Attr[0]])
+ return dbus.Struct((self.state.Attr[0], type_map[self.state.Attr[0]]),
+ signature="as")
@property
def Permissions(self):
type_map = {'w': 'writable', 'r': 'read-only',
'R': 'Read-only activation of non-read-only volume',
'-': 'Unspecified'}
- return (self.state.Attr[1], type_map[self.state.Attr[1]])
+ return dbus.Struct((self.state.Attr[1], type_map[self.state.Attr[1]]),
+ signature="(ss)")
@property
def AllocationPolicy(self):
@@ -268,11 +270,12 @@ class LvCommon(AutomatedProperties):
'i': 'inherited', 'I': 'inherited locked',
'l': 'cling', 'L': 'cling locked',
'n': 'normal', 'N': 'normal locked', '-': 'Unspecified'}
- return (self.state.Attr[2], type_map[self.state.Attr[2]])
+ return dbus.Struct((self.state.Attr[2], type_map[self.state.Attr[2]]),
+ signature="(ss)")
@property
def FixedMinor(self):
- return self.state.Attr[3] == 'm'
+ return dbus.Boolean(self.state.Attr[3] == 'm')
@property
def State(self):
@@ -283,29 +286,32 @@ class LvCommon(AutomatedProperties):
'd': 'mapped device present without tables',
'i': 'mapped device present with inactive table',
'X': 'unknown', '-': 'Unspecified'}
- return (self.state.Attr[4], type_map[self.state.Attr[4]])
+ return dbus.Struct((self.state.Attr[4], type_map[self.state.Attr[4]]),
+ signature="(ss)")
@property
def TargetType(self):
type_map = {'C': 'Cache', 'm': 'mirror', 'r': 'raid',
's': 'snapshot', 't': 'thin', 'u': 'unknown',
'v': 'virtual', '-': 'Unspecified'}
- return (self.state.Attr[6], type_map[self.state.Attr[6]])
+ return dbus.Struct((self.state.Attr[6], type_map[self.state.Attr[6]]),
+ signature="(ss)")
@property
def ZeroBlocks(self):
- return self.state.Attr[7] == 'z'
+ return dbus.Boolean(self.state.Attr[7] == 'z')
@property
def Health(self):
type_map = {'p': 'partial', 'r': 'refresh',
'm': 'mismatches', 'w': 'writemostly',
'X': 'X unknown', '-': 'Unspecified'}
- return (self.state.Attr[8], type_map[self.state.Attr[8]])
+ return dbus.Struct((self.state.Attr[8], type_map[self.state.Attr[8]]),
+ signature="(ss)")
@property
def SkipActivation(self):
- return self.state.Attr[9] == 'k'
+ return dbus.Boolean(self.state.Attr[9] == 'k')
def vg_name_lookup(self):
return self.state.vg_name_lookup()
@@ -331,15 +337,15 @@ class LvCommon(AutomatedProperties):
@property
def IsThinVolume(self):
- return self.state.Attr[0] == 'V'
+ return dbus.Boolean(self.state.Attr[0] == 'V')
@property
def IsThinPool(self):
- return self.state.Attr[0] == 't'
+ return dbus.Boolean(self.state.Attr[0] == 't')
@property
def Active(self):
- return self.state.active == "active"
+ return dbus.Boolean(self.state.active == "active")
@dbus.service.method(
dbus_interface=LV_COMMON_INTERFACE,
@@ -698,11 +704,11 @@ class LvThinPool(Lv):
@property
def DataLv(self):
- return self._data_lv
+ return dbus.ObjectPath(self._data_lv)
@property
def MetaDataLv(self):
- return self._metadata_lv
+ return dbus.ObjectPath(self._metadata_lv)
@staticmethod
def _lv_create(lv_uuid, lv_name, name, size_bytes, create_options):
@@ -757,11 +763,11 @@ class LvCachePool(Lv):
@property
def DataLv(self):
- return self._data_lv
+ return dbus.ObjectPath(self._data_lv)
@property
def MetaDataLv(self):
- return self._metadata_lv
+ return dbus.ObjectPath(self._metadata_lv)
@staticmethod
def _cache_lv(lv_uuid, lv_name, lv_object_path, cache_options):
@@ -826,7 +832,7 @@ class LvCacheLv(Lv):
@property
def CachePool(self):
- return self.state.PoolLv
+ return dbus.ObjectPath(self.state.PoolLv)
@staticmethod
def _detach_lv(lv_uuid, lv_name, detach_options, destroy_cache):
diff --git a/daemons/lvmdbusd/manager.py b/daemons/lvmdbusd/manager.py
index 79254fe..e0da824 100644
--- a/daemons/lvmdbusd/manager.py
+++ b/daemons/lvmdbusd/manager.py
@@ -21,7 +21,7 @@ from . import udevwatch
# noinspection PyPep8Naming
class Manager(AutomatedProperties):
- _Version_meta = ("t", MANAGER_INTERFACE)
+ _Version_meta = ("s", MANAGER_INTERFACE)
def __init__(self, object_path):
super(Manager, self).__init__(object_path)
@@ -29,7 +29,7 @@ class Manager(AutomatedProperties):
@property
def Version(self):
- return '1.0.0'
+ return dbus.String('1.0.0')
@staticmethod
def _pv_create(device, create_options):
diff --git a/daemons/lvmdbusd/pv.py b/daemons/lvmdbusd/pv.py
index bbd76f1..0780179 100644
--- a/daemons/lvmdbusd/pv.py
+++ b/daemons/lvmdbusd/pv.py
@@ -69,7 +69,7 @@ class PvState(State):
lv_uuid, full_name, path_create)
rc.append((lv_path, segs))
- return dbus.Array(rc, signature="(oa(tts))")
+ return rc
# noinspection PyUnusedLocal,PyPep8Naming
def __init__(self, lvm_path, Uuid, Name,
@@ -241,26 +241,20 @@ class Pv(AutomatedProperties):
@property
def PeSegments(self):
if len(self.state.pe_segments):
- return self.state.pe_segments
- return dbus.Array([], '(tt)')
+ return dbus.Array(self.state.pe_segments, signature='(tt)')
+ return dbus.Array([], 'a(tt)')
@property
def Exportable(self):
- if self.state.attr[1] == 'x':
- return True
- return False
+ return dbus.Boolean(self.state.attr[1] == 'x')
@property
def Allocatable(self):
- if self.state.attr[0] == 'a':
- return True
- return False
+ return dbus.Boolean(self.state.attr[0] == 'a')
@property
def Missing(self):
- if self.state.attr[2] == 'm':
- return True
- return False
+ return dbus.Boolean(self.state.attr[2] == 'm')
def object_path(self):
return self._object_path
@@ -275,8 +269,8 @@ class Pv(AutomatedProperties):
@property
def Lv(self):
- return self.state.lv
+ return dbus.Array(self.state.lv, signature="(oa(tts))")
@property
def Vg(self):
- return self.state.vg_path
+ return dbus.ObjectPath(self.state.vg_path)
diff --git a/daemons/lvmdbusd/utils.py b/daemons/lvmdbusd/utils.py
index 65668fc..c80290f 100644
--- a/daemons/lvmdbusd/utils.py
+++ b/daemons/lvmdbusd/utils.py
@@ -236,7 +236,7 @@ def parse_tags(tags):
if len(tags):
if ',' in tags:
return tags.split(',')
- return sorted([tags])
+ return dbus.Array(sorted([tags]), signature='s')
return dbus.Array([], signature='s')
diff --git a/daemons/lvmdbusd/vg.py b/daemons/lvmdbusd/vg.py
index 4cc938e..3b35873 100644
--- a/daemons/lvmdbusd/vg.py
+++ b/daemons/lvmdbusd/vg.py
@@ -78,7 +78,7 @@ class VgState(State):
(pv_name, pv_uuid) = p
rc.append(cfg.om.get_object_path_by_uuid_lvm_id(
pv_uuid, pv_name, pv_obj_path_generate))
- return dbus.Array(rc, signature='o')
+ return rc
def __init__(self, Uuid, Name, Fmt,
SizeBytes, FreeBytes, SysId, ExtentSizeBytes,
@@ -840,9 +840,7 @@ class Vg(AutomatedProperties):
cfg.worker_q.put(r)
def _attribute(self, pos, ch):
- if self.state.attr[pos] == ch:
- return True
- return False
+ return dbus.Boolean(self.state.attr[pos] == ch)
@dbus.service.method(
dbus_interface=VG_INTERFACE,
@@ -908,11 +906,11 @@ class Vg(AutomatedProperties):
@property
def Pvs(self):
- return self.state.Pvs
+ return dbus.Array(self.state.Pvs, signature='o')
@property
def Lvs(self):
- return self.state.Lvs
+ return dbus.Array(self.state.Lvs, signature='o')
@property
def lvm_id(self):
7 years, 7 months