diff options
| author | Patrick Williams <patrick@stwcx.xyz> | 2017-04-06 14:14:15 -0500 |
|---|---|---|
| committer | Patrick Williams <patrick@stwcx.xyz> | 2017-04-06 14:21:10 -0500 |
| commit | 3b8d055ca761a68c74dad01a306f238674d71878 (patch) | |
| tree | dd3e642fd7d9bda011744770e0df3b1635eefa3a | |
| parent | 0e72d933c0716a2b93003aba34c325e77a1d7646 (diff) | |
| download | phosphor-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>
| -rw-r--r-- | settings_manager.py | 23 |
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. |

