Improve error handling and return error code in case of failure
authorAbhay Agarwal <ay.agarwal@samsung.com>
Fri, 4 Oct 2019 01:39:47 +0000 (10:39 +0900)
committersaerome.kim <saerome.kim@samsung.com>
Fri, 4 Oct 2019 11:21:36 +0000 (20:21 +0900)
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 <ay.agarwal@samsung.com>
ua-daemon/include/ua-manager-core.h
ua-daemon/src/ua-manager-core.c
ua-daemon/src/ua-manager-device-db.c

index bf5909f..9b1b11b 100644 (file)
@@ -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,
index 3af00db..86fb6d2 100644 (file)
@@ -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)
index 43ec667..aa7af93 100644 (file)
@@ -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()));