summaryrefslogtreecommitdiffstats
path: root/settings_manager.py
diff options
context:
space:
mode:
authorPatrick Williams <patrick@stwcx.xyz>2017-04-06 14:14:15 -0500
committerPatrick Williams <patrick@stwcx.xyz>2017-04-06 14:21:10 -0500
commit3b8d055ca761a68c74dad01a306f238674d71878 (patch)
treedd3e642fd7d9bda011744770e0df3b1635eefa3a /settings_manager.py
parent0e72d933c0716a2b93003aba34c325e77a1d7646 (diff)
downloadphosphor-settingsd-3b8d055ca761a68c74dad01a306f238674d71878.tar.gz
phosphor-settingsd-3b8d055ca761a68c74dad01a306f238674d71878.zip
Restore settings to default on error
In the event that the value read from a persistence file is invalid, currently a ValueError exception is thrown and the settingsd fails to run. Instead, catch this condition and restore the setting to default. Fixes openbmc/openbmc#1442. Change-Id: I22ce8837d9c48b21bab050f1de9b730ec219bc4b Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
Diffstat (limited to 'settings_manager.py')
-rw-r--r--settings_manager.py23
1 files changed, 17 insertions, 6 deletions
diff --git a/settings_manager.py b/settings_manager.py
index 9c797d9..134bc6d 100644
--- a/settings_manager.py
+++ b/settings_manager.py
@@ -132,15 +132,26 @@ class HostSettingsObject(DbusProperties, DbusObjectManager):
# or the default file value if the BMC value
# does not exist.
def set_settings_property(self, attr_name, attr_type, value, fname):
+ default = value
+
+ # Read from file.
bmcv = self.get_bmc_value(attr_name, fname)
if bmcv:
value = bmcv
- if attr_type == "i":
- self.Set(DBUS_NAME, attr_name, int(value))
- elif attr_type == "s":
- self.Set(DBUS_NAME, attr_name, str(value))
- elif attr_type == "b":
- self.Set(DBUS_NAME, attr_name, bool(value))
+
+ # Perform type mapping.
+ type_map = {"i": int, "s": str, "b": bool}[attr_type]
+ real_value = type_map(value)
+ real_default = type_map(default)
+
+ try:
+ self.Set(DBUS_NAME, attr_name, real_value)
+ except ValueError:
+ print("Persistent value for {} is invalid: {}{} had '{}', "
+ "using '{}'.".format(attr_name, fname, attr_name,
+ value, default))
+ self.Set(DBUS_NAME, attr_name, real_default)
+ self.set_system_settings(attr_name, real_default, fname)
# Save the settings to the BMC. This will write the settings value in
# individual files named by the property name to the BMC.
OpenPOWER on IntegriCloud