summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Rocard <kevinx.rocard@intel.com>2013-07-18 09:13:51 +0200
committerDavid Wagner <david.wagner@intel.com>2014-02-12 17:04:08 +0100
commitd6909ebe19bf6e2817dadea32e06dda9d22bf073 (patch)
treea07834b6847662ab2f5e74c0d741de23a946516b
parent325bf97a49f9d1225a7815de8bd9c16b556d5070 (diff)
downloadexternal_parameter-framework-d6909ebe19bf6e2817dadea32e06dda9d22bf073.zip
external_parameter-framework-d6909ebe19bf6e2817dadea32e06dda9d22bf073.tar.gz
external_parameter-framework-d6909ebe19bf6e2817dadea32e06dda9d22bf073.tar.bz2
Add an option to continue on failed setting load
BZ: 122982 When the PFW starts it loads the configurable domains, if the load fails, it used to abort the parameterMgr global load. Add an option to continue on failed setting load, as if there were none. Change-Id: Ifd3cd859ad0eaef266be4c9245ebd28c9e9c0a74 Signed-off-by: Kevin Rocard <kevinx.rocard@intel.com> Reviewed-on: http://android.intel.com:8080/119924 Reviewed-by: Centelles, Sylvain <sylvain.centelles@intel.com> Tested-by: Barthes, FabienX <fabienx.barthes@intel.com> Reviewed-by: cactus <cactus@intel.com> Tested-by: cactus <cactus@intel.com>
-rw-r--r--parameter/ParameterMgr.cpp35
-rw-r--r--parameter/ParameterMgr.h23
-rw-r--r--parameter/ParameterMgrPlatformConnector.cpp18
-rw-r--r--parameter/include/ParameterMgrPlatformConnector.h18
4 files changed, 89 insertions, 5 deletions
diff --git a/parameter/ParameterMgr.cpp b/parameter/ParameterMgr.cpp
index 927515c..59dc057 100644
--- a/parameter/ParameterMgr.cpp
+++ b/parameter/ParameterMgr.cpp
@@ -281,7 +281,8 @@ CParameterMgr::CParameterMgr(const string& strConfigurationFilePath) :
_uiMaxCommandUsageLength(0),
_pLogger(NULL),
_uiLogDepth(0),
- _bFailOnMissingSubsystem(true)
+ _bFailOnMissingSubsystem(true),
+ _bFailOnFailedSettingsLoad(true)
{
// Tuning Mode Mutex
bzero(&_blackboardMutex, sizeof(_blackboardMutex));
@@ -537,6 +538,27 @@ bool CParameterMgr::loadStructure(string& strError)
bool CParameterMgr::loadSettings(string& strError)
{
+ string strLoadError;
+ bool success = loadSettingsFromConfigFile(strLoadError);
+
+ if (!success && !_bFailOnFailedSettingsLoad) {
+ // Load can not fail, ie continue but log the load errors
+ log_info(strLoadError);
+ log_info("Failed to load settings, continue without domains.");
+ success = true;
+ }
+
+ if (!success) {
+ // Propagate the litteral error only if the function fails
+ strError = strLoadError;
+ return false;
+ }
+
+ return true;
+}
+
+bool CParameterMgr::loadSettingsFromConfigFile(string& strError)
+{
CAutoLog autoLog(this, "Loading settings");
// Get settings configuration element
@@ -567,7 +589,7 @@ bool CParameterMgr::loadSettings(string& strError)
strError = "No ConfigurableDomainsFileLocation element found for SystemClass " + getSystemClass()->getName();
return false;
- }
+ }
// Get destination root element
CConfigurableDomains* pConfigurableDomains = getConfigurableDomains();
@@ -737,6 +759,15 @@ bool CParameterMgr::getFailureOnMissingSubsystem() const
{
return _bFailOnMissingSubsystem;
}
+
+void CParameterMgr::setFailureOnFailedSettingsLoad(bool bFail)
+{
+ _bFailOnFailedSettingsLoad = bFail;
+}
+bool CParameterMgr::getFailureOnFailedSettingsLoad()
+{
+ return _bFailOnFailedSettingsLoad;
+}
/////////////////// Remote command parsers
/// Version
CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::versionCommandProcess(const IRemoteCommand& remoteCommand, string& strResult)
diff --git a/parameter/ParameterMgr.h b/parameter/ParameterMgr.h
index 9145c4e..1f738fe 100644
--- a/parameter/ParameterMgr.h
+++ b/parameter/ParameterMgr.h
@@ -138,10 +138,9 @@ public:
CParameterHandle* createParameterHandle(const string& strPath, string& strError);
/** Should start fail in case of missing subsystems.
- * Will fail if called on started instance.
*
- * @param[in] bFail: If set to true, parameterMgr start will fail on missing subsystems
- * If set to false, missing subsystems will fallback on virtual subsystem
+ * @param[in] bFail: If set to true, parameterMgr start will fail on missing subsystems.
+ * If set to false, missing subsystems will fallback on virtual subsystem.
*/
void setFailureOnMissingSubsystem(bool bFail);
@@ -151,6 +150,18 @@ public:
*/
bool getFailureOnMissingSubsystem() const;
+ /** Should start fail in failed settings load.
+ *
+ * @param[in] bFail: If set to true, parameterMgr start will fail on failed settings load.
+ * If set to false, failed settings load will be ignored.
+ */
+ void setFailureOnFailedSettingsLoad(bool bFail);
+ /** Would start fail in case of failed settings load.
+ *
+ * @return failure on failed settings load policy state.
+ */
+ bool getFailureOnFailedSettingsLoad();
+
//////////// Tuning /////////////
// Tuning mode
bool setTuningMode(bool bOn, string& strError);
@@ -395,6 +406,7 @@ private:
// System class Structure loading
bool loadSettings(string& strError);
+ bool loadSettingsFromConfigFile(string& strError);
// Parse XML file into Root element
bool xmlParse(CXmlElementSerializingContext& elementSerializingContext, CElement* pRootElement, const string& strXmlFilePath, const string& strXmlFolder, ElementLibrary eElementLibrary, const string& strNameAttrituteName = "Name");
@@ -483,5 +495,10 @@ private:
* If set to false, missing subsystem will fallback on virtual subsystem.
*/
bool _bFailOnMissingSubsystem;
+ /** If set to true, unparsable or discording domains will abort parameterMgr start.
+ * If set to false, unparsable or discording domains
+ * will continue the parameterMgr start with no domains.
+ */
+ bool _bFailOnFailedSettingsLoad;
};
diff --git a/parameter/ParameterMgrPlatformConnector.cpp b/parameter/ParameterMgrPlatformConnector.cpp
index d8b3936..aa1f8a1 100644
--- a/parameter/ParameterMgrPlatformConnector.cpp
+++ b/parameter/ParameterMgrPlatformConnector.cpp
@@ -103,6 +103,24 @@ bool CParameterMgrPlatformConnector::getFailureOnMissingSubsystem()
return _pParameterMgr->getFailureOnMissingSubsystem();
}
+bool CParameterMgrPlatformConnector::setFailureOnFailedSettingsLoad(
+ bool bFail, std::string& strError)
+{
+ if (_bStarted) {
+
+ strError = "Can not set failure on failed settings load policy while running";
+ return false;
+ }
+
+ _pParameterMgr->setFailureOnFailedSettingsLoad(bFail);
+ return true;
+}
+
+bool CParameterMgrPlatformConnector::getFailureOnFailedSettingsLoad()
+{
+ return _pParameterMgr->getFailureOnFailedSettingsLoad();
+}
+
// Start
bool CParameterMgrPlatformConnector::start(string& strError)
{
diff --git a/parameter/include/ParameterMgrPlatformConnector.h b/parameter/include/ParameterMgrPlatformConnector.h
index 50c1212..ee22b48 100644
--- a/parameter/include/ParameterMgrPlatformConnector.h
+++ b/parameter/include/ParameterMgrPlatformConnector.h
@@ -73,6 +73,7 @@ public:
/** Should start fail in case of missing subsystems.
*
* Will fail if called on started instance.
+ *
* @param[in] bFail: If set to true, parameterMgr start will fail on missing subsystems
* If set to false, missing subsystems will fallbacks on virtual subsystem
* @param[out] strError a string describing the error if the function failed,
@@ -88,6 +89,23 @@ public:
*/
bool getFailureOnMissingSubsystem();
+ /** Should start fail in failed settings load.
+ *
+ * Will fail if called on started instance.
+ *
+ * @param[in] bFail: If set to true, parameterMgr start will fail on failed settings load.
+ * If set to false, failed settings load will be ignored.
+ * @param[out] strResult a string containing the result of the command.
+ *
+ * @return false if unable to set, true otherwise.
+ */
+ bool setFailureOnFailedSettingsLoad(bool bFail, std::string& strError);
+ /** Would start fail in case of failed settings load.
+ *
+ * @return failure on failed settings load policy state.
+ */
+ bool getFailureOnFailedSettingsLoad();
+
private:
CParameterMgrPlatformConnector(const CParameterMgrPlatformConnector&);
CParameterMgrPlatformConnector& operator=(const CParameterMgrPlatformConnector&);