From 0626ff081b33c0c8d4041b414672cecf00ced9e4 Mon Sep 17 00:00:00 2001 From: Abhay agarwal Date: Fri, 6 Sep 2019 11:55:29 +0530 Subject: [PATCH] Update DB recovery logic Change-Id: I2f43ff3c4842f5ffdb6b315ae2bda72f80edb1b2 Signed-off-by: Abhay agarwal --- ua-daemon/include/ua-manager-database.h | 2 ++ ua-daemon/src/ua-manager-adv-db.c | 14 +++--------- ua-daemon/src/ua-manager-db.c | 21 +++++++++++++---- ua-daemon/src/ua-manager-device-db.c | 34 +++++++++------------------- ua-daemon/src/ua-manager-device-service-db.c | 20 +++++----------- ua-daemon/src/ua-manager-service-db.c | 22 ++++++------------ ua-daemon/src/ua-manager-user-db.c | 20 +++++----------- 7 files changed, 51 insertions(+), 82 deletions(-) diff --git a/ua-daemon/include/ua-manager-database.h b/ua-daemon/include/ua-manager-database.h index b022d2e..17d6708 100644 --- a/ua-daemon/include/ua-manager-database.h +++ b/ua-daemon/include/ua-manager-database.h @@ -18,6 +18,7 @@ #ifndef __UA_MANAGER_DATABASE_H__ #define __UA_MANAGER_DATABASE_H__ +#include #include #include #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); diff --git a/ua-daemon/src/ua-manager-adv-db.c b/ua-daemon/src/ua-manager-adv-db.c index c57f9e6..618e753 100644 --- a/ua-daemon/src/ua-manager-adv-db.c +++ b/ua-daemon/src/ua-manager-adv-db.c @@ -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); diff --git a/ua-daemon/src/ua-manager-db.c b/ua-daemon/src/ua-manager-db.c index 0e7f47a..8077b77 100644 --- a/ua-daemon/src/ua-manager-db.c +++ b/ua-daemon/src/ua-manager-db.c @@ -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); diff --git a/ua-daemon/src/ua-manager-device-db.c b/ua-daemon/src/ua-manager-device-db.c index 47d3d8a..da7c1e2 100644 --- a/ua-daemon/src/ua-manager-device-db.c +++ b/ua-daemon/src/ua-manager-device-db.c @@ -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; } diff --git a/ua-daemon/src/ua-manager-device-service-db.c b/ua-daemon/src/ua-manager-device-service-db.c index 64bbdc7..9088f24 100644 --- a/ua-daemon/src/ua-manager-device-service-db.c +++ b/ua-daemon/src/ua-manager-device-service-db.c @@ -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); diff --git a/ua-daemon/src/ua-manager-service-db.c b/ua-daemon/src/ua-manager-service-db.c index 722744e..9de7a30 100644 --- a/ua-daemon/src/ua-manager-service-db.c +++ b/ua-daemon/src/ua-manager-service-db.c @@ -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); diff --git a/ua-daemon/src/ua-manager-user-db.c b/ua-daemon/src/ua-manager-user-db.c index 45ac889..57fb9b0 100644 --- a/ua-daemon/src/ua-manager-user-db.c +++ b/ua-daemon/src/ua-manager-user-db.c @@ -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; } -- 2.7.4