Update DB recovery logic
authorAbhay agarwal <ay.agarwal@samsung.com>
Fri, 6 Sep 2019 06:25:29 +0000 (11:55 +0530)
committersaerome.kim <saerome.kim@samsung.com>
Mon, 16 Sep 2019 12:00:59 +0000 (21:00 +0900)
Change-Id: I2f43ff3c4842f5ffdb6b315ae2bda72f80edb1b2
Signed-off-by: Abhay agarwal <ay.agarwal@samsung.com>
ua-daemon/include/ua-manager-database.h
ua-daemon/src/ua-manager-adv-db.c
ua-daemon/src/ua-manager-db.c
ua-daemon/src/ua-manager-device-db.c
ua-daemon/src/ua-manager-device-service-db.c
ua-daemon/src/ua-manager-service-db.c
ua-daemon/src/ua-manager-user-db.c

index b022d2e..17d6708 100644 (file)
@@ -18,6 +18,7 @@
 #ifndef __UA_MANAGER_DATABASE_H__
 #define __UA_MANAGER_DATABASE_H__
 
+#include <sqlite3.h>
 #include <ua-plugin-manager.h>
 #include <ua-api.h>
 #include "ua-manager-core.h"
@@ -74,6 +75,7 @@ int _uam_db_initialize_once(void);
 /* db init/deinit */
 int _uam_db_initialize(void);
 int _uam_db_deinitialize(void);
+sqlite3 *__uam_db_recover_database(void);
 
 /* delete operations */
 int _uam_db_clear(void);
index c57f9e6..618e753 100644 (file)
@@ -127,14 +127,6 @@ static void __uam_adv_table_info_finalize(void)
        FUNC_EXIT;
 }
 
-static sqlite3 *__uam_adv_db_get_database(void)
-{
-       if (database == NULL)
-               _uam_db_initialize_once();
-
-       return database;
-}
-
 int _uam_db_get_max_ibeacon_id(void)
 {
        FUNC_ENTRY;
@@ -155,7 +147,7 @@ int _uam_db_get_max_ibeacon_id(void)
                case SQLITE_ERROR:
                default:
                        UAM_ERR("Failed to select max ibeacon adv: %s",
-                                       sqlite3_errmsg(__uam_adv_db_get_database()));
+                                       sqlite3_errmsg(__uam_db_recover_database()));
                }
        } while (rc == SQLITE_ROW);
 
@@ -213,7 +205,7 @@ int _uam_db_insert_adv_info(unsigned int adv_len, const char *iadv)
 
        if (sqlite3_step(stmt) != SQLITE_DONE) {
                UAM_ERR("Failed to insert ibeacon adv info: %s",
-                               sqlite3_errmsg(__uam_adv_db_get_database()));
+                               sqlite3_errmsg(__uam_db_recover_database()));
                error_code = UAM_ERROR_DB_FAILED;
                goto handle_error;
        }
@@ -256,7 +248,7 @@ GSList *_uam_db_get_all_advs(void)
                case SQLITE_ERROR:
                default:
                        UAM_ERR("Failed to enumerate service info: %s",
-                                       sqlite3_errmsg(__uam_adv_db_get_database()));
+                                       sqlite3_errmsg(__uam_db_recover_database()));
                }
        } while (rc == SQLITE_ROW);
 
index 0e7f47a..8077b77 100644 (file)
@@ -235,8 +235,8 @@ static int __uam_db_check_integrity(void)
        FUNC_ENTRY;
        char *sql = NULL;
 
-       sql = sqlite3_mprintf("PRAGMA integrity_check", __uam_db_check_integrity_cb);
-       retv_if(UAM_ERROR_NONE != __uam_db_exec_sql(sql, NULL), UAM_ERROR_DB_FAILED);
+       sql = sqlite3_mprintf("PRAGMA integrity_check");
+       retv_if(UAM_ERROR_NONE != __uam_db_exec_sql(sql, __uam_db_check_integrity_cb), UAM_ERROR_DB_FAILED);
        sqlite3_free(sql);
 
        UAM_DBG("Successfully verified database integrity");
@@ -273,8 +273,8 @@ static void __uam_db_prepare_table(void)
        /*
         * 4) Each __is_table_existing() open DB file again and again.. it is redundant
         */
-       if (!__is_table_existing(UAM_DB_USERDATA_TABLE))
-               __ua_create_table(CREATE_USERDATA_TABLE);
+       if (!__uam_db_is_table_existing(UAM_DB_USERDATA_TABLE))
+               __uam_db_create_table(CREATE_USERDATA_TABLE);
 
        if (!__uam_db_is_table_existing(UAM_DB_DEVICES_TABLE))
                __uam_db_create_table(CREATE_DEVICES_TABLE);
@@ -350,13 +350,24 @@ int _uam_db_initialize_once(void)
        return UAM_ERROR_NONE;
 }
 
+sqlite3 *__uam_db_recover_database(void)
+{
+       if (database != NULL) {
+               sqlite3_close(database);
+               unlink(DATABASE_FULL_PATH);
+               database = NULL;
+       }
+
+       _uam_db_initialize_once();
+       return database;
+}
+
 int _uam_db_initialize(void)
 {
        FUNC_ENTRY;
        database = NULL;
 
        EXEC(UAM_ERROR_NONE, _uam_db_initialize_once(), handle_error);
-
        EXEC(UAM_ERROR_NONE, _uam_user_db_initialize(), handle_error);
        EXEC(UAM_ERROR_NONE, _ua_device_db_initialize(), handle_error);
        EXEC(UAM_ERROR_NONE, _ua_service_db_initialize(), handle_error);
index 47d3d8a..da7c1e2 100644 (file)
@@ -251,18 +251,6 @@ static void __ua_device_table_devicesinfo_finalize(void)
        FUNC_EXIT;
 }
 
-/*
- * 5) it just check only dtabase is null but all error-case
- *    we just call the function for recovery.
- */
-static sqlite3 *__ua_device_db_get_database(void)
-{
-       if (database == NULL)
-               _uam_db_initialize_once();
-
-       return database;
-}
-
 int _uam_db_get_max_device_number(void)
 {
        FUNC_ENTRY;
@@ -283,7 +271,7 @@ int _uam_db_get_max_device_number(void)
                case SQLITE_ERROR:
                default:
                        UAM_ERR("Failed to enumerate device info: %s",
-                                       sqlite3_errmsg(__ua_device_db_get_database())); /* 5) it does not recover the DB because database is not null */
+                                       sqlite3_errmsg(__uam_db_recover_database()));
                }
        } while (rc == SQLITE_ROW);
 
@@ -348,7 +336,7 @@ int _ua_device_db_update_device_ip_address(char *device_id, int tech_type,
         */
        if (sqlite3_step(stmt) != SQLITE_DONE) {
                UAM_ERR("Failed to update ip address: %s",
-                        sqlite3_errmsg(__ua_device_db_get_database())); /* 5) it does not recover the DB because database is not null */
+                        sqlite3_errmsg(__uam_db_recover_database()));
 
                error_code = UAM_ERROR_DB_FAILED;
                goto handle_error;
@@ -385,7 +373,7 @@ int _ua_device_db_update_device_presence(char *device_id, int tech_type,
         */
        if (sqlite3_step(stmt) != SQLITE_DONE) {
                UAM_ERR("Failed to update presence: %s",
-                        sqlite3_errmsg(__ua_device_db_get_database())); /* 5) it does not recover the DB because database is not null */
+                        sqlite3_errmsg(__uam_db_recover_database()));
 
                error_code = UAM_ERROR_DB_FAILED;
                goto handle_error;
@@ -422,7 +410,7 @@ int _ua_device_db_update_device_timestamp(char *device_id, int tech_type,
         */
        if (sqlite3_step(stmt) != SQLITE_DONE) {
                UAM_ERR("Failed to update device timestamp: %s",
-                        sqlite3_errmsg(__ua_device_db_get_database())); /* 5) it does not recover the DB because database is not null */
+                        sqlite3_errmsg(__uam_db_recover_database()));
 
                error_code = UAM_ERROR_DB_FAILED;
                goto handle_error;
@@ -471,7 +459,7 @@ int _ua_device_db_update_device_device(char *device_id, int tech_type,
         */
        if (sqlite3_step(stmt) != SQLITE_DONE) {
                UAM_ERR("Failed to update device discriminant: %s",
-                        sqlite3_errmsg(__ua_device_db_get_database())); /* 5) it does not recover the DB because database is not null */
+                        sqlite3_errmsg(__uam_db_recover_database()));
 
                error_code = UAM_ERROR_DB_FAILED;
                goto handle_error;
@@ -533,7 +521,7 @@ int _ua_device_db_insert_device_info(int user_id,
         */
        if (sqlite3_step(stmt) != SQLITE_DONE) {
                UAM_ERR("Failed to insert device info: %s",
-                               sqlite3_errmsg(__ua_device_db_get_database())); /* 5) it does not recover the DB because database is not null */
+                        sqlite3_errmsg(__uam_db_recover_database()));
                error_code = UAM_ERROR_DB_FAILED;
                goto handle_error;
        }
@@ -570,7 +558,7 @@ int _ua_device_db_delete_device_info(const char *device_id, int tech_type,
         */
        if (sqlite3_step(stmt) != SQLITE_DONE) {
                UAM_ERR("Failed to delete device info %s",
-                               sqlite3_errmsg(__ua_device_db_get_database())); /* 5) it does not recover the DB because database is not null */
+                        sqlite3_errmsg(__uam_db_recover_database()));
                error_code = UAM_ERROR_DB_FAILED;
        } else
                UAM_DBG("User info deleted");
@@ -605,7 +593,7 @@ int _ua_device_db_get_device(char *device_id, int tech_type, char *address,
         */
        if (sqlite3_step(stmt) != SQLITE_DONE) {
                UAM_ERR("Failed to select device info %s",
-                               sqlite3_errmsg(__ua_device_db_get_database())); /* 5) it does not recover the DB because database is not null */
+                        sqlite3_errmsg(__uam_db_recover_database()));
                error_code = UAM_ERROR_DB_FAILED;
        } else {
                UAM_DBG("Device info found");
@@ -683,7 +671,7 @@ int _uam_db_get_device_number(const char *device_id, int tech_type,
                case SQLITE_ERROR:
                default:
                        UAM_ERR("Failed to enumerate device info: %s",
-                                       sqlite3_errmsg(__ua_device_db_get_database())); /* 5) it does not recover the DB because database is not null */
+                                sqlite3_errmsg(__uam_db_recover_database()));
                }
        } while (rc == SQLITE_ROW);
 
@@ -746,7 +734,7 @@ GSList *_ua_device_db_get_all_devices(void)
                case SQLITE_ERROR:
                default:
                        UAM_ERR("Failed to enumerate device info: %s",
-                                       sqlite3_errmsg(__ua_device_db_get_database())); /* 5) it does not recover the DB because database is not null */
+                                sqlite3_errmsg(__uam_db_recover_database()));
                }
        } while (rc == SQLITE_ROW);
 
@@ -766,7 +754,7 @@ int _uam_device_db_clear(void)
         */
        if (sqlite3_step(stmt) != SQLITE_DONE) {
                UAM_ERR("Failed to delete device data %s",
-                               sqlite3_errmsg(__ua_device_db_get_database()));
+                       sqlite3_errmsg(__uam_db_recover_database()));
                error_code = UAM_ERROR_DB_FAILED;
                goto handle_error;
        }
index 64bbdc7..9088f24 100644 (file)
@@ -230,14 +230,6 @@ handle_error:
        return UAM_ERROR_DB_FAILED;
 }
 
-static sqlite3 *__ua_device_service_db_get_database(void)
-{
-       if (database == NULL)
-               _uam_db_initialize_once();
-
-       return database;
-}
-
 int _uam_db_insert_service(int device_number, int service_number)
 {
        FUNC_ENTRY;
@@ -255,7 +247,7 @@ int _uam_db_insert_service(int device_number, int service_number)
         */
        if (sqlite3_step(stmt) != SQLITE_DONE) {
                UAM_ERR("Failed to insert device-service info: %s",
-                               sqlite3_errmsg(__ua_device_service_db_get_database()));
+                               sqlite3_errmsg(__uam_db_recover_database()));
                error_code = UAM_ERROR_DB_FAILED;
                goto handle_error;
        }
@@ -316,7 +308,7 @@ int _ua_device_service_db_clear(void)
         */
        if (sqlite3_step(stmt) != SQLITE_DONE) {
                UAM_ERR("Failed to delete device data %s",
-                               sqlite3_errmsg(__ua_device_service_db_get_database()));
+                               sqlite3_errmsg(__uam_db_recover_database()));
                error_code = UAM_ERROR_DB_FAILED;
                goto handle_error;
        }
@@ -345,7 +337,7 @@ int _uam_db_delete_service_number(int service_number)
         */
        if (sqlite3_step(stmt) != SQLITE_DONE) {
                UAM_ERR("Failed to delete device-service info %s",
-                               sqlite3_errmsg(__ua_device_service_db_get_database()));
+                               sqlite3_errmsg(__uam_db_recover_database()));
                error_code = UAM_ERROR_DB_FAILED;
        } else
                UAM_DBG("Device-service info deleted");
@@ -373,7 +365,7 @@ int _uam_db_delete_device_service_number(int device_number, int service_number)
         */
        if (sqlite3_step(stmt) != SQLITE_DONE) {
                UAM_ERR("Failed to delete device-service info %s",
-                               sqlite3_errmsg(__ua_device_service_db_get_database()));
+                               sqlite3_errmsg(__uam_db_recover_database()));
                error_code = UAM_ERROR_DB_FAILED;
        } else
                UAM_DBG("Device-service info deleted");
@@ -475,7 +467,7 @@ GSList *_uam_db_get_service(int device_number)
                case SQLITE_ERROR:
                default:
                        UAM_ERR("Failed to enumerate device info: %s",
-                                       sqlite3_errmsg(__ua_device_service_db_get_database()));
+                                       sqlite3_errmsg(__uam_db_recover_database()));
                }
        } while (rc == SQLITE_ROW);
 
@@ -538,7 +530,7 @@ int _uam_db_get_device_services_count(const char *device_id, int tech_type,
                case SQLITE_ERROR:
                default:
                        UAM_ERR("Failed to enumerate device info: %s",
-                                       sqlite3_errmsg(__ua_device_service_db_get_database()));
+                                       sqlite3_errmsg(__uam_db_recover_database()));
                }
        } while (rc == SQLITE_ROW);
 
index 722744e..9de7a30 100644 (file)
@@ -211,14 +211,6 @@ static void __ua_service_table_servicesinfo_finalize(void)
        FUNC_EXIT;
 }
 
-static sqlite3 *__ua_service_db_get_database(void)
-{
-       if (database == NULL)
-               _uam_db_initialize_once();
-
-       return database;
-}
-
 int _uam_db_get_max_service_number(void)
 {
        FUNC_ENTRY;
@@ -239,7 +231,7 @@ int _uam_db_get_max_service_number(void)
                case SQLITE_ERROR:
                default:
                        UAM_ERR("Failed to select max service number: %s",
-                                       sqlite3_errmsg(__ua_service_db_get_database()));
+                                       sqlite3_errmsg(__uam_db_recover_database()));
                }
        } while (rc == SQLITE_ROW);
 
@@ -302,7 +294,7 @@ int _uam_db_insert_service_info(
         */
        if (sqlite3_step(stmt) != SQLITE_DONE) {
                UAM_ERR("Failed to insert service info: %s",
-                               sqlite3_errmsg(__ua_service_db_get_database()));
+                               sqlite3_errmsg(__uam_db_recover_database()));
                error_code = UAM_ERROR_DB_FAILED;
                goto handle_error;
        }
@@ -340,7 +332,7 @@ int _uam_db_delete_service_info(const char *service_name)
         */
        if (sqlite3_step(stmt) != SQLITE_DONE) {
                UAM_ERR("Failed to delete service info %s",
-                               sqlite3_errmsg(__ua_service_db_get_database()));
+                               sqlite3_errmsg(__uam_db_recover_database()));
                error_code = UAM_ERROR_DB_FAILED;
        } else
                UAM_DBG("Service info deleted");
@@ -362,7 +354,7 @@ int _ua_service_db_clear(void)
         */
        if (sqlite3_step(stmt) != SQLITE_DONE) {
                UAM_ERR("Failed to delete service data %s",
-                               sqlite3_errmsg(__ua_service_db_get_database()));
+                               sqlite3_errmsg(__uam_db_recover_database()));
                error_code = UAM_ERROR_DB_FAILED;
                goto handle_error;
        }
@@ -393,7 +385,7 @@ int _uam_db_update_service_cycle(const char *service_name, int cycle)
         */
        if (sqlite3_step(stmt) != SQLITE_DONE) {
                UAM_ERR("Failed to update service timestamp: %s",
-                        sqlite3_errmsg(__ua_service_db_get_database()));
+                        sqlite3_errmsg(__uam_db_recover_database()));
 
                error_code = UAM_ERROR_DB_FAILED;
                goto handle_error;
@@ -440,7 +432,7 @@ int _uam_db_get_service_info(const char *service_name, db_service_info_t *info)
                case SQLITE_ERROR:
                default:
                        UAM_ERR("Failed to enumerate device info: %s",
-                                       sqlite3_errmsg(__ua_service_db_get_database()));
+                                       sqlite3_errmsg(__uam_db_recover_database()));
                        error_code = UAM_ERROR_DB_FAILED;
                }
        } while (rc == SQLITE_ROW);
@@ -479,7 +471,7 @@ GSList *_ua_service_db_get_all_services(void)
                case SQLITE_ERROR:
                default:
                        UAM_ERR("Failed to enumerate service info: %s",
-                                       sqlite3_errmsg(__ua_service_db_get_database()));
+                                       sqlite3_errmsg(__uam_db_recover_database()));
                }
        } while (rc == SQLITE_ROW);
 
index 45ac889..57fb9b0 100644 (file)
@@ -192,14 +192,6 @@ static void __ua_table_usersinfo_finalize(void)
        FUNC_EXIT;
 }
 
-static sqlite3 *__ua_db_get_database(void)
-{
-       if (database == NULL)
-               _uam_db_initialize_once();
-
-       return database;
-}
-
 int _uam_db_get_max_user_id(void)
 {
        FUNC_ENTRY;
@@ -220,7 +212,7 @@ int _uam_db_get_max_user_id(void)
                case SQLITE_ERROR:
                default:
                        UAM_ERR("Failed to select max user id: %s",
-                                       sqlite3_errmsg(__ua_db_get_database()));
+                                       sqlite3_errmsg(__uam_db_recover_database()));
                }
        } while (rc == SQLITE_ROW);
 
@@ -283,7 +275,7 @@ int _ua_db_insert_user_info(int *user_id, const char *name, const char *account)
         */
        if (sqlite3_step(stmt) != SQLITE_DONE) {
                UAM_ERR("Failed to insert user info: %s",
-                               sqlite3_errmsg(__ua_db_get_database()));
+                               sqlite3_errmsg(__uam_db_recover_database()));
                error_code = UAM_ERROR_DB_FAILED;
                goto handle_error;
        }
@@ -316,7 +308,7 @@ int _ua_db_delete_by_user_id(int user_id)
         */
        if (sqlite3_step(stmt) != SQLITE_DONE) {
                UAM_ERR("Failed to delete user info %s",
-                               sqlite3_errmsg(__ua_db_get_database()));
+                               sqlite3_errmsg(__uam_db_recover_database()));
                error_code = UAM_ERROR_DB_FAILED;
        } else
                UAM_DBG("User info deleted");
@@ -346,7 +338,7 @@ int _ua_db_get_user(int user_id, db_user_info_t *info)
         */
        if (sqlite3_step(stmt) != SQLITE_DONE) {
                UAM_ERR("Failed to select user info %s",
-                               sqlite3_errmsg(__ua_db_get_database()));
+                               sqlite3_errmsg(__uam_db_recover_database()));
                error_code = UAM_ERROR_DB_FAILED;
        } else {
                info = g_new0(db_user_info_t, 1);
@@ -397,7 +389,7 @@ GSList *_ua_db_get_all_users(void)
                case SQLITE_ERROR:
                default:
                        UAM_ERR("Failed to enumerate user info: %s",
-                                       sqlite3_errmsg(__ua_db_get_database()));
+                                       sqlite3_errmsg(__uam_db_recover_database()));
                }
        } while (rc == SQLITE_ROW);
 
@@ -417,7 +409,7 @@ int _uam_user_db_clear(void)
         */
        if (sqlite3_step(stmt) != SQLITE_DONE) {
                UAM_ERR("Failed to delete user data %s",
-                               sqlite3_errmsg(__ua_db_get_database()));
+                               sqlite3_errmsg(__uam_db_recover_database()));
                error_code = UAM_ERROR_DB_FAILED;
                goto handle_error;
        }