From 0db75be5b6577d681c572a21e89552b2ac3c43f4 Mon Sep 17 00:00:00 2001 From: Abhay Agarwal Date: Fri, 4 Oct 2019 10:39:47 +0900 Subject: [PATCH] Improve error handling and return error code in case of failure This commit improves the error handling in ua-manager by returning error codes in case of failures instead of just giving warnings. Change-Id: I2eddd477c04e2fd2a5d33842d8659fceff6b65d7 Signed-off-by: Abhay Agarwal --- ua-daemon/include/ua-manager-core.h | 2 +- ua-daemon/src/ua-manager-core.c | 88 +++++++++++++++++++++++++----------- ua-daemon/src/ua-manager-device-db.c | 5 ++ 3 files changed, 68 insertions(+), 27 deletions(-) diff --git a/ua-daemon/include/ua-manager-core.h b/ua-daemon/include/ua-manager-core.h index bf5909f..9b1b11b 100644 --- a/ua-daemon/include/ua-manager-core.h +++ b/ua-daemon/include/ua-manager-core.h @@ -172,7 +172,7 @@ void _uam_core_deinit(void); void _uam_core_handle_sensor_ready(unsigned int sensor, gboolean is_ready); -void _uam_core_handle_device_added(int status, +int _uam_core_handle_device_added(int status, int user_id, const uam_device_info_s *dev_info); void _uam_core_handle_presence_detected(unsigned int sensor, diff --git a/ua-daemon/src/ua-manager-core.c b/ua-daemon/src/ua-manager-core.c index 3af00db..86fb6d2 100644 --- a/ua-daemon/src/ua-manager-core.c +++ b/ua-daemon/src/ua-manager-core.c @@ -1467,6 +1467,7 @@ int _uam_core_service_add_user(const char *svc_name, const char *account) { FUNC_ENTRY; GSList *l; + int ret = UAM_ERROR_NONE; uam_db_user_info_t *user; uam_db_service_info_t *service; @@ -1508,18 +1509,24 @@ int _uam_core_service_add_user(const char *svc_name, const char *account) mac = __get_mac_addr(tech); /* Insert device service info to db */ - if (UAM_ERROR_NONE != _uam_db_insert_device_service_info(device->device_id, + ret = _uam_db_insert_device_service_info(device->device_id, tech->tech_type, mac, service->name, service->cycle, - device->discriminant)) + device->discriminant); + if (UAM_ERROR_NONE != ret) { UAM_WARN("Device service addition to persistent DB failed"); - if (UAM_ERROR_NONE != _uam_core_update_svc_dev_info(device->device_id, - tech->tech_type, service->name, device->discriminant)) + return ret; + } + ret = _uam_core_update_svc_dev_info(device->device_id, + tech->tech_type, service->name, device->discriminant); + if (UAM_ERROR_NONE != ret) { UAM_WARN("Device service addition to service device mapping failed"); + return ret; + } } } FUNC_EXIT; - return UAM_ERROR_NONE; + return ret; } int _uam_core_service_remove_user(const char *svc_name, const char *account) @@ -1623,6 +1630,7 @@ int _uam_core_service_add_device(const char *svc_name, const char *device_id, in FUNC_ENTRY; GSList *l; char *mac; + int ret = UAM_ERROR_NONE; uam_db_tech_info_t *tech_info; uam_db_service_info_t *service; @@ -1647,12 +1655,18 @@ int _uam_core_service_add_device(const char *svc_name, const char *device_id, in mac = __get_mac_addr(tech_info); /* Insert device service info to db */ - if (UAM_ERROR_NONE != _uam_db_insert_device_service_info(device_id, - tech_type, mac, service->name, service->cycle, tech_info->discriminant)) + ret = _uam_db_insert_device_service_info(device_id, + tech_type, mac, service->name, service->cycle, tech_info->discriminant); + if (UAM_ERROR_NONE != ret) { UAM_WARN("Device service addition to persistent DB failed"); - if (UAM_ERROR_NONE != _uam_core_update_svc_dev_info(device_id, - tech_type, service->name, tech_info->discriminant)) + return ret; + } + ret = _uam_core_update_svc_dev_info(device_id, + tech_type, service->name, tech_info->discriminant); + if (UAM_ERROR_NONE != ret) { UAM_WARN("Device service addition to svc dev mapping failed"); + return ret; + } FUNC_EXIT; return UAM_ERROR_NONE; @@ -1698,6 +1712,7 @@ int _uam_core_service_set_device_discriminant(const char *svc_name, { FUNC_ENTRY; GSList *l; + int ret = UAM_ERROR_NONE; char *mac; uam_db_tech_info_t *tech_info; uam_db_service_info_t *service; @@ -1717,12 +1732,18 @@ int _uam_core_service_set_device_discriminant(const char *svc_name, mac = __get_mac_addr(tech_info); /* Insert device service info to db */ - if (UAM_ERROR_NONE != _uam_db_update_device_service_info(device_id, - tech_type, mac, service->name, discriminant)) + ret = _uam_db_update_device_service_info(device_id, + tech_type, mac, service->name, discriminant); + if (UAM_ERROR_NONE != ret) { UAM_WARN("Device service discriminant update to persistent DB failed"); - if (UAM_ERROR_NONE != _uam_core_update_svc_dev_info(device_id, - tech_type, service->name, discriminant)) + return ret; + } + ret = _uam_core_update_svc_dev_info(device_id, + tech_type, service->name, discriminant); + if (UAM_ERROR_NONE != ret) { UAM_WARN("Device service discriminant mapping update failed"); + return ret; + } FUNC_EXIT; return UAM_ERROR_NONE; @@ -2319,12 +2340,13 @@ void _uam_core_handle_sensor_ready(unsigned int sensor, gboolean is_ready) FUNC_EXIT; } -void _uam_core_handle_device_added(int status, +int _uam_core_handle_device_added(int status, int user_id, const uam_device_info_s *dev_info) { FUNC_ENTRY; GSList *l; uam_db_user_info_t *user = NULL; + int ret = UAM_ERROR_NONE; /* Send reply over dbus for add device API */ l = _uam_manager_get_request_list(); @@ -2364,7 +2386,6 @@ void _uam_core_handle_device_added(int status, long long timestamp; if (0 > user_id) { - int ret; l = g_slist_find_custom(users, USER_ACCOUNT_DEFAULT, __compare_user_account); @@ -2374,13 +2395,14 @@ void _uam_core_handle_device_added(int status, if (UAM_ERROR_NONE != ret) { UAM_ERR("_uam_core_add_user failed with %s", _uam_manager_error_to_str(ret)); - return; + return ret; } } l = g_slist_find_custom(users, USER_ACCOUNT_DEFAULT, __compare_user_account); if (!l) { UAM_ERR("_uam_core_add_user failed because user is null"); - return; + ret = UAM_ERROR_NOT_FOUND; + return ret; } user = l->data; @@ -2389,7 +2411,8 @@ void _uam_core_handle_device_added(int status, l = g_slist_find_custom(users, &user_id, __compare_user_id); if (NULL == l) { UAM_ERR("Invalid user Id: %d", user_id); - return; + ret = UAM_ERROR_NOT_FOUND; + return ret; } user = l->data; } @@ -2412,28 +2435,40 @@ void _uam_core_handle_device_added(int status, UAM_PRESENCE_STATE_PRESENT, timestamp, svc_list); /* Add device to database */ - if (UAM_ERROR_NONE != _uam_device_db_insert_device_info(user->user_id, - dev_info, UAM_PRESENCE_STATE_PRESENT, timestamp)) + ret = _uam_device_db_insert_device_info(user->user_id, + dev_info, UAM_PRESENCE_STATE_PRESENT, timestamp); + if (UAM_ERROR_NONE != ret) { UAM_WARN("Device addition to persistent DB failed"); + return ret; + } /* Insert device service info to db */ - if (UAM_ERROR_NONE != _uam_db_insert_device_service_info( + ret = _uam_db_insert_device_service_info( dev_info->device_id, dev_info->type, dev_info->mac, UAM_SERVICE_DEFAULT, UAM_DETECTION_CYCLE_DEFAULT, - dev_info->discriminant)) + dev_info->discriminant); + if (UAM_ERROR_NONE != ret) { UAM_WARN("Device service addition to persistent DB failed"); + return ret; + } - if (UAM_ERROR_NONE != _uam_core_update_svc_dev_info( + ret = _uam_core_update_svc_dev_info( dev_info->device_id, dev_info->type, - UAM_SERVICE_DEFAULT, dev_info->discriminant)) - UAM_WARN("Device service addition to persistent DB failed"); + UAM_SERVICE_DEFAULT, dev_info->discriminant); + if (UAM_ERROR_NONE != ret) { + UAM_WARN("Device service mappiing update failed"); + return ret; + } /* Send device added event to application */ __send_device_event(UAM_EVENT_DEVICE_ADDED, dev_info); /* Set/update registered device list to plugins */ - if (UAM_ERROR_NONE != _uam_pm_set_registered_devices(devices)) + ret = _uam_pm_set_registered_devices(devices); + if (UAM_ERROR_NONE != ret) { UAM_ERR("_uam_pm_set_registered_devices failed"); + return ret; + } } _uam_cloud_send_device_added(status, (user ? user->account : NULL), dev_info); @@ -2443,6 +2478,7 @@ void _uam_core_handle_device_added(int status, _uam_cloud_update_registered_devices(); FUNC_EXIT; + return ret; } void __send_sensor_presence_event(uam_sensor_info_s *sensor_info, unsigned int sensor) diff --git a/ua-daemon/src/ua-manager-device-db.c b/ua-daemon/src/ua-manager-device-db.c index 43ec667..aa7af93 100644 --- a/ua-daemon/src/ua-manager-device-db.c +++ b/ua-daemon/src/ua-manager-device-db.c @@ -532,6 +532,11 @@ int _uam_device_db_delete_device_info(const char *device_id, int tech_type, error_code, handle_error); error_code = _uam_db_delete_device_service_mapping(device_id, tech_type, address); + if (UAM_ERROR_NONE != error_code) { + UAM_ERR("Failed to delete device service mapping"); + goto handle_error; + } + if (sqlite3_step(stmt) != SQLITE_DONE) { UAM_ERR("Failed to delete device info %s", sqlite3_errmsg(__uam_db_recover_database())); -- 2.7.4