summaryrefslogtreecommitdiffstats
path: root/rteval/modules
diff options
context:
space:
mode:
authorDavid Sommerseth <davids@redhat.com>2012-12-07 19:40:31 +0100
committerDavid Sommerseth <davids@redhat.com>2012-12-07 19:41:21 +0100
commitaa78df877c932256120b89a169d353859cc4a667 (patch)
tree2420ed0e8839a4f4d79cd598dce724101d8dfd0d /rteval/modules
parentffd636b0b5fd614ccae9201b5350ce2143c9d038 (diff)
downloadrteval-aa78df877c932256120b89a169d353859cc4a667.tar.gz
rteval-aa78df877c932256120b89a169d353859cc4a667.tar.xz
rteval-aa78df877c932256120b89a169d353859cc4a667.zip
Rework the Unleash()/isAlive() logic to support running measurement threads serialised
Signed-off-by: David Sommerseth <davids@redhat.com>
Diffstat (limited to 'rteval/modules')
-rw-r--r--rteval/modules/__init__.py18
-rw-r--r--rteval/modules/measurement/__init__.py40
2 files changed, 45 insertions, 13 deletions
diff --git a/rteval/modules/__init__.py b/rteval/modules/__init__.py
index 5ac2c62..a9e1c83 100644
--- a/rteval/modules/__init__.py
+++ b/rteval/modules/__init__.py
@@ -349,20 +349,14 @@ start their workloads yet"""
return nthreads
- def _isAlive(self, all_running_pass):
- """Returns True if all modules which are supposed to run runs"""
+ def _isAlive(self):
+ """Returns True if all modules are running"""
- ret = True
for (modname, mod) in self.__modules:
- if all_running_pass:
- # We requiring all modules to run to pass
- ret &= mod.WorkloadAlive()
- else:
- # We require only a single module to run to pass
- # This is used by f.ex. measurement modules, running
- # serialised
- ret |= mod.WorkloadAlive()
- return ret
+ # We requiring all modules to run to pass
+ if not mod.WorkloadAlive():
+ return False
+ return True
diff --git a/rteval/modules/measurement/__init__.py b/rteval/modules/measurement/__init__.py
index 10ec967..df96dfb 100644
--- a/rteval/modules/measurement/__init__.py
+++ b/rteval/modules/measurement/__init__.py
@@ -33,6 +33,9 @@ class MeasurementProfile(RtEvalModules):
self.__with_load = with_load
self.__run_parallel = run_parallel
+ # Only used when running modules serialised
+ self.__run_serialised_mods = None
+
self._module_type = "measurement"
self._module_config = "measurement"
self._report_tag = "Profile"
@@ -56,6 +59,22 @@ class MeasurementProfile(RtEvalModules):
self._RegisterModuleObject(modname, modobj)
+ def Unleash(self):
+ """Unleashes all the measurement modules"""
+
+ if self.__run_parallel:
+ # Use the inherrited method if running
+ # measurements in parallel
+ return RtEvalModules.Unleash(self)
+
+ # Get a list of all registered modules,
+ # and start the first one
+ self.__serialised_mods = self.GetModulesList()
+ mod = self.GetNamedModuleObject(self.__serialised_mods[0])
+ mod.setStart()
+ return 1
+
+
def MakeReport(self):
"Generates an XML report for all run measurement modules in this profile"
rep_n = RtEvalModules.MakeReport(self)
@@ -66,7 +85,26 @@ class MeasurementProfile(RtEvalModules):
def isAlive(self):
"""Returns True if all modules which are supposed to run runs"""
- return self._isAlive(self.__run_parallel)
+
+ if self.__run_parallel:
+ return self._isAlive()
+
+ if len(self.__serialised_mods) > 0:
+ # If running serialised, first check if measurement is still running,
+ # if so - return True.
+ mod = self.GetNamedModuleObject(self.__serialised_mods[0])
+ if mod.WorkloadAlive():
+ return True
+
+ # If not, go to next on the list and kick it off
+ self.__serialised_mods.remove(self.__serialised_mods[0])
+ if len(self.__serialised_mods) > 0:
+ mod = self.GetNamedModuleObject(self.__serialised_mods[0])
+ mod.setStart()
+ return True
+
+ # If we've been through everything, nothing is running
+ return False
class MeasurementModules(object):