From e2837a5dfa20a8181b66db82da5722ebb60e8b02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaroslav=20=C5=A0karvada?= Date: Thu, 18 Jun 2015 09:43:11 +0200 Subject: [PATCH] plugin_disk: improved handling of cases there is no hdparm command MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If there is no hdparm command it now outputs warning to the log, disables all hdparm related commands and no hdparm execution error is output. Related: rhbz#1191775 Signed-off-by: Jaroslav Škarvada --- tuned/plugins/plugin_disk.py | 27 ++++++++++++++++++--------- tuned/utils/commands.py | 3 ++- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/tuned/plugins/plugin_disk.py b/tuned/plugins/plugin_disk.py index a70e772..47587ed 100644 --- a/tuned/plugins/plugin_disk.py +++ b/tuned/plugins/plugin_disk.py @@ -114,7 +114,7 @@ class DiskPlugin(hotplug.Plugin): cnt = 0 elif rc == errno.ENOENT: self._spindown_errcnt = self._apm_errcnt = consts.ERROR_THRESHOLD + 1 - log.info("hdparm command not found, ignoring future set_apm / set_spindown commands") + log.warn("hdparm command not found, ignoring future set_apm / set_spindown commands") return else: cnt += 1 @@ -158,11 +158,11 @@ class DiskPlugin(hotplug.Plugin): log.debug("tuning level changed to %d" % idle["level"]) if self._spindown_errcnt < consts.ERROR_THRESHOLD: log.debug("changing spindown to %d" % new_spindown_level) - (rc, out) = self._cmd.execute(["hdparm", "-S%d" % new_spindown_level, "/dev/%s" % device]) + (rc, out) = self._cmd.execute(["hdparm", "-S%d" % new_spindown_level, "/dev/%s" % device], no_errors = [errno.ENOENT]) self._update_errcnt(rc, True) if self._apm_errcnt < consts.ERROR_THRESHOLD: log.debug("changing APM_level to %d" % new_power_level) - (rc, out) = self._cmd.execute(["hdparm", "-B%d" % new_power_level, "/dev/%s" % device]) + (rc, out) = self._cmd.execute(["hdparm", "-B%d" % new_power_level, "/dev/%s" % device], no_errors = [errno.ENOENT]) self._update_errcnt(rc, False) log.debug("%s load: read %0.2f, write %0.2f" % (device, stats["read"], stats["write"])) @@ -254,7 +254,7 @@ class DiskPlugin(hotplug.Plugin): def _set_apm(self, value, device, sim): if self._apm_errcnt < consts.ERROR_THRESHOLD: if not sim: - (rc, out) = self._cmd.execute(["hdparm", "-B", str(value), "/dev/" + device]) + (rc, out) = self._cmd.execute(["hdparm", "-B", str(value), "/dev/" + device], no_errors = [errno.ENOENT]) self._update_errcnt(rc, False) return str(value) else: @@ -263,11 +263,20 @@ class DiskPlugin(hotplug.Plugin): @command_get("apm") def _get_apm(self, device): value = None - try: - m = re.match(r".*=\s*(\d+).*", self._cmd.execute(["hdparm", "-B", "/dev/" + device])[1], re.S) + err = False + (rc, out) = self._cmd.execute(["hdparm", "-B", "/dev/" + device], no_errors = [errno.ENOENT]) + if rc == errno.ENOENT: + return None + elif rc != 0: + err = True + else: + m = re.match(r".*=\s*(\d+).*", out, re.S) if m: - value = int(m.group(1)) - except: + try: + value = int(m.group(1)) + except ValueError: + err = True + if err: log.error("could not get current APM settings for device '%s'" % device) return value @@ -275,7 +284,7 @@ class DiskPlugin(hotplug.Plugin): def _set_spindown(self, value, device, sim): if self._spindown_errcnt < consts.ERROR_THRESHOLD: if not sim: - (rc, out) = self._cmd.execute(["hdparm", "-S", str(value), "/dev/" + device]) + (rc, out) = self._cmd.execute(["hdparm", "-S", str(value), "/dev/" + device], no_errors = [errno.ENOENT]) self._update_errcnt(rc, True) return str(value) else: diff --git a/tuned/utils/commands.py b/tuned/utils/commands.py index 90311a2..9c94572 100644 --- a/tuned/utils/commands.py +++ b/tuned/utils/commands.py @@ -98,7 +98,8 @@ class commands: self._error("Executing %s error: %s" % (args[0], err_out)) except (OSError, IOError) as e: retcode = e.errno if e.errno is not None else -1 - self._error("Executing %s error: %s" % (args[0], e)) + if not retcode in no_errors: + self._error("Executing %s error: %s" % (args[0], e)) return retcode, out # Helper for parsing kernel options like: