Skip to content

Commit eece4fe

Browse files
committed
feat: allow dynamic instances of non-hotplug plugins
Signed-off-by: Adriaan Schmidt <adriaan.schmidt@siemens.com>
1 parent 38d4414 commit eece4fe

3 files changed

Lines changed: 21 additions & 8 deletions

File tree

tests/unit/plugins/test_base.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ def test_get_matching_devices(self):
6868
instance = self._plugin.create_instance(\
6969
'first_instance',0,'right_device*',None,'test','test',\
7070
{'default_option1':'default_value2'})
71+
instance.plugin.init_devices()
7172

7273
self.assertEqual(self._plugin._get_matching_devices(\
7374
instance,['bad_device','right_device1','right_device2']),\
@@ -77,6 +78,7 @@ def test_get_matching_devices(self):
7778
instance = self._plugin.create_instance(\
7879
'second_instance',0,'right_device*','device[1-2]','test','test',\
7980
{'default_option1':'default_value2'})
81+
instance.plugin.init_devices()
8082

8183
device1 = DummyDevice('device1',{'name':'device1'})
8284
device2 = DummyDevice('device2',{'name':'device2'})
@@ -177,6 +179,10 @@ def _get_config_options(self):
177179
def _instance_cleanup(self, instance):
178180
self.cleaned_instances.append(instance)
179181

182+
def _init_devices(self):
183+
super(DummyPlugin,self)._init_devices()
184+
self._devices_supported = True
185+
180186
def _get_device_objects(self, devices):
181187
objects = []
182188
for device in devices:

tuned/daemon/controller.py

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -495,10 +495,6 @@ def instance_create(self, plugin_name, instance_name, options, caller = None):
495495
log.error(rets)
496496
return (False, rets)
497497
plugin = plugins[plugin_name]
498-
if not isinstance(plugin, hotplug.Plugin):
499-
rets = "Plugin '%s' does not support hotplugging or dynamic instances." % plugin.name
500-
log.error(rets)
501-
return (False, rets)
502498
devices = options.pop("devices", None)
503499
devices_udev_regex = options.pop("devices_udev_regex", None)
504500
script_pre = options.pop("script_pre", None)
@@ -553,10 +549,6 @@ def instance_destroy(self, instance_name, caller = None):
553549
log.error(rets)
554550
return (False, rets)
555551
plugin = instance.plugin
556-
if not isinstance(plugin, hotplug.Plugin):
557-
rets = "Plugin '%s' does not support hotplugging or dynamic instances." % plugin.name
558-
log.error(rets)
559-
return (False, rets)
560552
devices = instance.processed_devices.copy()
561553
try:
562554
plugin._remove_devices_nocheck(instance, devices)

tuned/plugins/base.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,9 @@ def _get_device_objects(self, devices):
154154
return None
155155

156156
def _get_matching_devices(self, instance, devices):
157+
if not self._devices_supported:
158+
return set()
159+
157160
if instance.devices_udev_regex is None:
158161
return set(self._device_matcher.match_list(instance.devices_expression, devices))
159162
else:
@@ -164,6 +167,18 @@ def _get_matching_devices(self, instance, devices):
164167
udev_devices = self._device_matcher_udev.match_list(instance.devices_udev_regex, udev_devices)
165168
return set([x.sys_name for x in udev_devices])
166169

170+
def _add_device(self, device_name):
171+
pass
172+
173+
def _add_devices_nocheck(self, instance, device_names):
174+
pass
175+
176+
def _remove_device(self, device_name):
177+
pass
178+
179+
def _remove_devices_nocheck(self, instance, device_names):
180+
pass
181+
167182
def assign_free_devices(self, instance):
168183
if not self._devices_supported:
169184
return

0 commit comments

Comments
 (0)