1
0
Fork 0

Moved methods generic to commands into tuned.utils.commands

This commit is contained in:
Jan Kaluza 2012-04-16 13:24:01 +02:00
parent a69435a452
commit 3f8117ae23
2 changed files with 81 additions and 34 deletions

View file

@ -2,6 +2,7 @@ import os, copy
import tuned.plugins
import tuned.logs
import tuned.monitors
import tuned.utils.commands
import struct
log = tuned.logs.get()
@ -23,9 +24,10 @@ class DiskPlugin(tuned.plugins.Plugin):
self._elevator_set = False
self._old_elevator = ""
self._load_monitor = tuned.monitors.get_repository().create("disk", devices)
if not tuned.utils.storage.Storage.get_instance().data.has_key("disk"):
tuned.utils.storage.Storage.get_instance().data["disk"] = {}
self._load_monitor = tuned.monitors.get_repository().create("disk", devices)
@classmethod
def tunable_devices(cls):
@ -50,46 +52,18 @@ class DiskPlugin(tuned.plugins.Plugin):
}
def _apply_elevator(self, dev):
storage = tuned.utils.storage.Storage.get_instance()
if storage.data["disk"].has_key(dev):
self._old_elevator = storage.data["disk"][dev]
self._revert_elevator(dev)
del storage.data["disk"][dev]
sys_file = os.path.join("/sys/block/", dev, "queue/scheduler")
tuned.utils.commands.revert_file("disk", "elevator_" + dev, sys_file)
if len(self._options["elevator"]) == 0:
return False
try:
f = open(os.path.join("/sys/block/", dev, "queue/scheduler"), "r")
self._old_elevator = f.read()
f.close()
except (OSError,IOError) as e:
log.error("Getting elevator of %s error: %s" % (dev, e))
storage = tuned.utils.storage.Storage.get_instance()
storage.data["disk"] = {dev : self._old_elevator}
storage.save()
log.debug("Applying elevator: %s < %s" % (dev, self._options["elevator"]))
try:
f = open(os.path.join("/sys/block/", dev, "queue/scheduler"), "w")
f.write(self._options["elevator"])
f.close()
except (OSError,IOError) as e:
log.error("Setting elevator on %s error: %s" % (dev, e))
tuned.utils.commands.set_file("disk", "elevator_" + dev, sys_file, self._options["elevator"])
return True
def _revert_elevator(self, dev):
if len(self._old_elevator) == 0:
return
log.debug("Applying elevator: %s < %s" % (dev, self._old_elevator))
try:
f = open(os.path.join("/sys/block/", dev, "queue/scheduler"), "w")
f.write(self._old_elevator)
f.close()
except (OSError,IOError) as e:
log.error("Setting elevator on %s error: %s" % (dev, e))
sys_file = os.path.join("/sys/block/", dev, "queue/scheduler")
tuned.utils.commands.revert_file("disk", "elevator_" + dev, sys_file)
def _update_idle(self, dev):
idle = self.devidle.setdefault(dev, {})

73
tuned/utils/commands.py Normal file
View file

@ -0,0 +1,73 @@
# Copyright (C) 2008-2012 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
import os, copy
import tuned.plugins
import tuned.logs
import tuned.monitors
import tuned.utils.storage
import struct
log = tuned.logs.get()
def _write_to_file(f, data):
log.debug("Writing to file: %s < %s" % (f, data))
try:
fd = open(f, "w")
fd.write(data)
fd.close()
except (OSError,IOError) as e:
log.error("Writing to file %s error: %s" % (f, e))
def _read_file(f):
old_value = ""
try:
f = open(f, "r")
old_value = f.read()
f.close()
except (OSError,IOError) as e:
log.error("Reading %s error: %s" % (f, e))
return old_value
def revert_file(key, subkey, f):
storage = tuned.utils.storage.Storage.get_instance()
if not storage.data.has_key(key):
log.error("Storage file does not contain item with key %s" % (key))
return
if not storage.data[key].has_key(subkey):
return
old_value = storage.data[key][subkey]
_write_to_file(f, old_value)
del storage.data[key][subkey]
def set_file(key, subkey, f, data):
storage = tuned.utils.storage.Storage.get_instance()
if not storage.data.has_key(key):
log.error("Storage file does not contain item with key %s" % (key))
return
old_value = _read_file(f)
storage.data[key][subkey] = old_value
storage.save()
_write_to_file(f, data)