Improve db operation in dcm daemon 58/215658/8
authorMinje Ahn <minje.ahn@samsung.com>
Mon, 14 Oct 2019 04:28:58 +0000 (13:28 +0900)
committerMinje Ahn <minje.ahn@samsung.com>
Mon, 14 Oct 2019 08:04:00 +0000 (17:04 +0900)
1. Change to connect db on demand
2. Move scan type from code to query

Change-Id: I85584aee83499a1c5f7813b1b77190f63feb8287
Signed-off-by: Minje Ahn <minje.ahn@samsung.com>
include/dcm_svc_db.h
include/dcm_svc_detect_face.h
src/dcm_svc_db.c
src/dcm_svc_detect_face.c
src/dcm_svc_internal.c

index 1ff83bdd0ee8302011496faa7baac6e2556e5a89..31741587c81a0102a38f079c5e39c1cafd259343 100755 (executable)
@@ -30,14 +30,12 @@ typedef enum {
        FACE_SCAN_STATUS_NONE = 4,
 } dcm_face_scan_status_e;
 
-int dcm_svc_db_connect(uid_t uid);
-void dcm_svc_db_disconnect();
-int dcm_svc_db_get_scan_image_info_by_path(const char *file_path, dcm_svc_item_s **scan_item);
-int dcm_svc_db_insert_face_to_db(const char *media_uuid, unsigned int x, unsigned int y, unsigned int w, unsigned int h, int orientation);
-int dcm_svc_db_insert_face_to_face_scan_list(dcm_svc_item_s *scan_item);
-int dcm_svc_db_delete_face_from_db(const char *media_uuid);
-int dcm_svc_db_check_scanned_by_media_uuid(const char *media_uuid, time_t modified_time, dcm_face_scan_status_e *scan_status);
-int dcm_svc_db_get_face_cnt_from_db(const char* media_uuid, int *face_cnt);
+int dcm_svc_db_get_scan_image_info_by_path(const char *file_path, uid_t uid, dcm_svc_item_s **scan_item);
+int dcm_svc_db_insert_face_to_db(const char *media_uuid, unsigned int x, unsigned int y, unsigned int w, unsigned int h, int orientation, uid_t uid);
+int dcm_svc_db_insert_face_to_face_scan_list(dcm_svc_item_s *scan_item, uid_t uid);
+int dcm_svc_db_delete_face_from_db(const char *media_uuid, uid_t uid);
+int dcm_svc_db_check_scanned_by_media_uuid(const char *media_uuid, uid_t uid, dcm_face_scan_status_e *scan_status);
+int dcm_svc_db_get_face_cnt_from_db(const char* media_uuid, uid_t uid, int *face_cnt);
 
 #endif /*_DCM_DB_UTILS_H_*/
 
index a16302c065a5ed962f10a59af927cb090be788ba..10ee7c30b8370f9de7dde4373d20dde440a44844 100755 (executable)
@@ -23,7 +23,7 @@
 
 int dcm_face_detect_initialize();
 int dcm_face_detect_finalize();
-int dcm_face_detect_process(dcm_svc_item_s *scan_item, dcm_face_scan_status_e scan_status, dcm_image_info_s *image_info);
+int dcm_face_detect_process(dcm_svc_item_s *scan_item, dcm_face_scan_status_e scan_status, uid_t uid, dcm_image_info_s *image_info);
 
 #endif /*_DCM_SVC_FACE_H_*/
 
index c8e99096d6fedcdecec17743bae884b61e273986..2fdfb19e2722d2f905e7c342ee537d22dfb8774d 100755 (executable)
 
 #define FACE_ITEM "media_id, face_rect_x , face_rect_y, face_rect_w , face_rect_h, face_orientation"
 #define SELECT_MEDIA_INFO_BY_FILE_PATH_FROM_DB "SELECT media_id, media_width, media_height, media_orientation, media_mime_type, media_modified_time FROM "DB_VIEW_MEDIA" WHERE media_path = '%q';"
-#define SELECT_SCAN_INFO_BY_MEDIA_ID "SELECT modified_time FROM "DB_TABLE_FACE_SCAN_LIST" WHERE media_id = '%q';"
+#define SELECT_SCAN_TYPE "SELECT CASE WHEN "DB_VIEW_MEDIA".media_modified_time="DB_TABLE_FACE_SCAN_LIST".modified_time THEN 1 WHEN "DB_TABLE_FACE_SCAN_LIST".modified_time=0 THEN 3 ELSE 2 END result\
+                                               FROM "DB_TABLE_FACE_SCAN_LIST" INNER JOIN "DB_VIEW_MEDIA" ON "DB_TABLE_FACE_SCAN_LIST".media_id="DB_VIEW_MEDIA".media_id WHERE "DB_TABLE_FACE_SCAN_LIST".media_id='%q';"
 #define INSERT_FACE_ITEM_TO_DB "INSERT OR IGNORE INTO " DB_TABLE_FACE" (" FACE_ITEM") VALUES ('%q', %d, %d, %d, %d, %d);"
 #define SELECT_FACE_COUNT_BY_MEDIA_ID          "SELECT COUNT(*) FROM " DB_TABLE_FACE" WHERE media_id = '%q';"
 
-static sqlite3 *db_handle;
-static uid_t dcm_uid;
-
 static int __dcm_svc_sql_prepare_to_step(sqlite3 *handle, const char *sql_str, sqlite3_stmt** stmt)
 {
        int ret = MS_MEDIA_ERR_NONE;
@@ -48,8 +46,6 @@ static int __dcm_svc_sql_prepare_to_step(sqlite3 *handle, const char *sql_str, s
        }
 
        ret = sqlite3_prepare_v2(handle, sql_str, -1, stmt, NULL);
-       sqlite3_free((char *)sql_str);
-
        if (ret != SQLITE_OK) {
                dcm_error("prepare error %d[%s]", ret, sqlite3_errmsg(handle));
                if (ret == SQLITE_CORRUPT)
@@ -61,66 +57,40 @@ static int __dcm_svc_sql_prepare_to_step(sqlite3 *handle, const char *sql_str, s
        ret = sqlite3_step(*stmt);
        if (ret != SQLITE_ROW) {
                dcm_warn("[No-Error] Item not found. end of row [%s]", sqlite3_errmsg(handle));
-               DCM_SQLITE3_FINALIZE(*stmt);
                return MS_MEDIA_ERR_DB_NO_RECORD;
        }
 
        return MS_MEDIA_ERR_NONE;
 }
 
-int dcm_svc_db_connect(uid_t uid)
-{
-       int ret = MS_MEDIA_ERR_NONE;
-
-       dcm_debug("_dcm_svc_db_connect uid: %d", uid);
-       dcm_uid = uid;
-
-       ret = media_db_connect(&db_handle, dcm_uid, FALSE);
-       if (ret != MS_MEDIA_ERR_NONE) {
-               dcm_error("media_db_connect failed: %d", ret);
-               db_handle = NULL;
-               return ret;
-       }
-
-       dcm_warn("media db handle: %p", db_handle);
-
-       return MS_MEDIA_ERR_NONE;
-}
-
-void dcm_svc_db_disconnect(void)
-{
-       dcm_warn("media db handle: %p", db_handle);
-
-       if (db_handle)
-               media_db_disconnect(db_handle);
-
-       db_handle = NULL;
-}
-
-int dcm_svc_db_get_scan_image_info_by_path(const char *file_path, dcm_svc_item_s **scan_item)
+int dcm_svc_db_get_scan_image_info_by_path(const char *file_path, uid_t uid, dcm_svc_item_s **scan_item)
 {
        int ret = MS_MEDIA_ERR_NONE;
        char *query_string = NULL;
        sqlite3_stmt *sql_stmt = NULL;
        dcm_svc_item_s *_item = NULL;
+       sqlite3 *handle = NULL;
 
        dcm_debug_fenter();
-
-       dcm_retvm_if(db_handle == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid db_handle");
        dcm_retvm_if(!DCM_STRING_VALID(file_path), MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid file_path");
 
        /* Make query */
        query_string = sqlite3_mprintf(SELECT_MEDIA_INFO_BY_FILE_PATH_FROM_DB, file_path);
        dcm_retvm_if(query_string == NULL, MS_MEDIA_ERR_OUT_OF_MEMORY, "Invalid query_string");
 
-       ret = __dcm_svc_sql_prepare_to_step((sqlite3 *)db_handle, query_string, &sql_stmt);
-       dcm_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "Fail __dcm_svc_sql_prepare_to_step [%d]", ret);
+       ret = media_db_connect(&handle, uid, false);
+       if (ret != MS_MEDIA_ERR_NONE)
+               goto ERROR;
+
+       ret = __dcm_svc_sql_prepare_to_step(handle, query_string, &sql_stmt);
+       if (ret != MS_MEDIA_ERR_NONE)
+               goto ERROR;
 
-       _item = (dcm_svc_item_s *) g_malloc0(sizeof(dcm_svc_item_s));
-       if (_item == NULL) {
-               dcm_error("Failed to allocate memory for _item!");
-               DCM_SQLITE3_FINALIZE(sql_stmt);
-               return MS_MEDIA_ERR_OUT_OF_MEMORY;
+       _item = (dcm_svc_item_s *) calloc(1, sizeof(dcm_svc_item_s));
+       if (!_item) {
+               dcm_error("Allocation failed");
+               ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
+               goto ERROR;
        }
 
        _item->media_uuid = g_strdup((const char *)sqlite3_column_text(sql_stmt, 0));
@@ -131,36 +101,20 @@ int dcm_svc_db_get_scan_image_info_by_path(const char *file_path, dcm_svc_item_s
        _item->mime_type = g_strdup((const char *)sqlite3_column_text(sql_stmt, 4));
        _item->modified_time = sqlite3_column_int(sql_stmt, 5);
 
-       DCM_SQLITE3_FINALIZE(sql_stmt);
-
        dcm_sec_debug("media uuid: [%s] file path: [%s]", _item->media_uuid, _item->file_path);
 
        *scan_item = _item;
-
        dcm_debug_fleave();
 
-       return ret;
-}
-
-static int __request_update_db(const char* query_string)
-{
-       int ret = MS_MEDIA_ERR_NONE;
-
-       dcm_retvm_if(!db_handle, MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid db_handle");
-       dcm_retvm_if(!query_string, MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid query_string");
-
-       dcm_sec_debug("query[%s]", query_string);
-
-       ret = media_db_request_update_db(query_string, dcm_uid);
-       if (ret != MS_MEDIA_ERR_NONE)
-               dcm_error("fail to media_db_request_update_db[%d] [%s]", ret, sqlite3_errmsg((sqlite3 *)db_handle));
-
-       dcm_debug_fleave();
+ERROR:
+       DCM_SQLITE3_FREE(query_string);
+       DCM_SQLITE3_FINALIZE(sql_stmt);
+       media_db_disconnect(handle);
 
        return ret;
 }
 
-int dcm_svc_db_insert_face_to_db(const char *media_uuid, unsigned int x, unsigned int y, unsigned int w, unsigned int h, int orientation)
+int dcm_svc_db_insert_face_to_db(const char *media_uuid, unsigned int x, unsigned int y, unsigned int w, unsigned int h, int orientation, uid_t uid)
 {
        int ret = MS_MEDIA_ERR_NONE;
        char* query_string = NULL;
@@ -169,13 +123,15 @@ int dcm_svc_db_insert_face_to_db(const char *media_uuid, unsigned int x, unsigne
 
        query_string = sqlite3_mprintf(INSERT_FACE_ITEM_TO_DB, media_uuid, x, y, w, h, orientation);
 
-       ret = __request_update_db(query_string);
+       ret = media_db_request_update_db(query_string, uid);
+       if (ret != MS_MEDIA_ERR_NONE)
+               dcm_error("fail to media_db_request_update_db[%d]", ret);
        DCM_SQLITE3_FREE(query_string);
 
        return ret;
 }
 
-int dcm_svc_db_insert_face_to_face_scan_list(dcm_svc_item_s *scan_item)
+int dcm_svc_db_insert_face_to_face_scan_list(dcm_svc_item_s *scan_item, uid_t uid)
 {
        int ret = MS_MEDIA_ERR_NONE;
        char* query_string = NULL;
@@ -185,13 +141,15 @@ int dcm_svc_db_insert_face_to_face_scan_list(dcm_svc_item_s *scan_item)
 
        query_string = sqlite3_mprintf("INSERT OR REPLACE INTO %s (media_id, modified_time) values('%q', %d)", DB_TABLE_FACE_SCAN_LIST, scan_item->media_uuid, scan_item->modified_time);
 
-       ret = __request_update_db(query_string);
+       ret = media_db_request_update_db(query_string, uid);
+       if (ret != MS_MEDIA_ERR_NONE)
+               dcm_error("fail to media_db_request_update_db[%d]", ret);
        DCM_SQLITE3_FREE(query_string);
 
        return ret;
 }
 
-int dcm_svc_db_delete_face_from_db(const char *media_uuid)
+int dcm_svc_db_delete_face_from_db(const char *media_uuid, uid_t uid)
 {
        int ret = MS_MEDIA_ERR_NONE;
        char* query_string = NULL;
@@ -200,63 +158,58 @@ int dcm_svc_db_delete_face_from_db(const char *media_uuid)
 
        query_string = sqlite3_mprintf("DELETE FROM %s WHERE media_id='%q'", DB_TABLE_FACE, media_uuid);
 
-       ret = __request_update_db(query_string);
+       ret = media_db_request_update_db(query_string, uid);
+       if (ret != MS_MEDIA_ERR_NONE)
+               dcm_error("fail to media_db_request_update_db[%d]", ret);
        DCM_SQLITE3_FREE(query_string);
 
        return ret;
 }
 
-int dcm_svc_db_check_scanned_by_media_uuid(const char *media_uuid, time_t modified_time, dcm_face_scan_status_e *scan_status)
+int dcm_svc_db_check_scanned_by_media_uuid(const char *media_uuid, uid_t uid, dcm_face_scan_status_e *scan_status)
 {
        int ret = MS_MEDIA_ERR_NONE;
        char *query_string = NULL;
        sqlite3_stmt *sql_stmt = NULL;
-       time_t org_modified_time = 0;
+       sqlite3 *handle = NULL;
 
        dcm_debug_fenter();
+       dcm_retvm_if(!media_uuid, MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid media_uuid");
 
-       dcm_retvm_if(db_handle == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid db_handle");
-       dcm_retvm_if(media_uuid == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid media_uuid");
+       query_string = sqlite3_mprintf(SELECT_SCAN_TYPE, media_uuid);
+       dcm_retvm_if(!query_string, MS_MEDIA_ERR_OUT_OF_MEMORY, "Invalid query_string");
 
-       query_string = sqlite3_mprintf(SELECT_SCAN_INFO_BY_MEDIA_ID, media_uuid);
-       dcm_retvm_if(query_string == NULL, MS_MEDIA_ERR_OUT_OF_MEMORY, "Invalid query_string");
+       ret = media_db_connect(&handle, uid, false);
+       if (ret != MS_MEDIA_ERR_NONE)
+               goto ERROR;
 
-       ret = __dcm_svc_sql_prepare_to_step((sqlite3 *)db_handle, query_string, &sql_stmt);
+       ret = __dcm_svc_sql_prepare_to_step(handle, query_string, &sql_stmt);
        if (ret == MS_MEDIA_ERR_DB_NO_RECORD) {
                dcm_info("Scanning needed");
                *scan_status = FACE_SCAN_NEEDED;
+               ret = MS_MEDIA_ERR_NONE;
        } else if (ret == MS_MEDIA_ERR_NONE) {
-               org_modified_time = sqlite3_column_int(sql_stmt, 0);
-               if (org_modified_time == modified_time) {
-                       dcm_info("Already scanned item");
-                       *scan_status = FACE_SCAN_NO_NEEDED;
-               } else if (org_modified_time == 0) {
-                       /*In case of the some objects removed by user */
-                       dcm_info("Some objects have been deleted");
-                       *scan_status = FACE_SCAN_RESCAN;
-               } else {
-                       dcm_info("Scanned but item is modified");
-                       *scan_status = FACE_SCAN_REFRESH_NEEDED;
-               }
-
-               DCM_SQLITE3_FINALIZE(sql_stmt);
+               *scan_status = sqlite3_column_int(sql_stmt, 0);
        } else {
                dcm_error("error when __dcm_svc_sql_prepare_to_step. ret = [%d]", ret);
-               return ret;
        }
 
        dcm_debug_fleave();
+ERROR:
+       DCM_SQLITE3_FREE(query_string);
+       DCM_SQLITE3_FINALIZE(sql_stmt);
+       media_db_disconnect(handle);
 
-       return MS_MEDIA_ERR_NONE;
+       return ret;
 }
 
-int dcm_svc_db_get_face_cnt_from_db(const char* media_uuid, int *face_cnt)
+int dcm_svc_db_get_face_cnt_from_db(const char* media_uuid, uid_t uid, int *face_cnt)
 {
        int ret = MS_MEDIA_ERR_NONE;
        char *query_string = NULL;
        sqlite3_stmt *sql_stmt = NULL;
+       sqlite3 *handle = NULL;
 
-       dcm_retvm_if(db_handle == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid db_handle");
        dcm_retvm_if(!DCM_STRING_VALID(media_uuid), MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid media_uuid");
        dcm_retvm_if(face_cnt == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid face_cnt");
 
@@ -264,13 +217,21 @@ int dcm_svc_db_get_face_cnt_from_db(const char* media_uuid, int *face_cnt)
        query_string = sqlite3_mprintf(SELECT_FACE_COUNT_BY_MEDIA_ID, media_uuid);
        dcm_retvm_if(query_string == NULL, MS_MEDIA_ERR_OUT_OF_MEMORY, "Invalid query_string");
 
-       ret = __dcm_svc_sql_prepare_to_step((sqlite3 *)db_handle, query_string, &sql_stmt);
-       dcm_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "Fail __dcm_svc_sql_prepare_to_step [%d]", ret);
+       ret = media_db_connect(&handle, uid, false);
+       if (ret != MS_MEDIA_ERR_NONE)
+               goto ERROR;
+
+       ret = __dcm_svc_sql_prepare_to_step(handle, query_string, &sql_stmt);
+       if (ret != MS_MEDIA_ERR_NONE)
+               goto ERROR;
 
        *face_cnt = (int)sqlite3_column_int(sql_stmt, 0);
 
+ERROR:
+       DCM_SQLITE3_FREE(query_string);
        DCM_SQLITE3_FINALIZE(sql_stmt);
+       media_db_disconnect(handle);
 
-       return MS_MEDIA_ERR_NONE;
+       return ret;
 }
 
index 3b7386d84295a20e60e8c6becb1c48e7f598c16a..ec6345a5b9886496f271ad0550b44ace09284bab 100755 (executable)
@@ -73,7 +73,7 @@ int dcm_face_detect_finalize()
        return ret;
 }
 
-int dcm_face_detect_process(dcm_svc_item_s *scan_item, dcm_face_scan_status_e scan_status, dcm_image_info_s *image_info)
+int dcm_face_detect_process(dcm_svc_item_s *scan_item, dcm_face_scan_status_e scan_status, uid_t uid, dcm_image_info_s *image_info)
 {
        int face_area = 0;
        int i = 0;
@@ -103,7 +103,7 @@ int dcm_face_detect_process(dcm_svc_item_s *scan_item, dcm_face_scan_status_e sc
                goto DCM_SVC_FACE_RECOGNIZE_BUFFER_FAILED;
        }
 
-       face_info = (face_info_s *)g_malloc0(sizeof(face_info_s));
+       face_info = (face_info_s *)calloc(1, sizeof(face_info_s));
        if (face_info == NULL) {
                dcm_error("Failed to allocate face info");
                ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
@@ -144,7 +144,7 @@ int dcm_face_detect_process(dcm_svc_item_s *scan_item, dcm_face_scan_status_e sc
                dcm_debug("[#%d] face rect: X [%d] Y [%d] W [%d] H [%d] Orientation [%d]", i, face_rect_x, face_rect_y, face_rect_w, face_rect_h, face_orientation);
 
                /* Insert face rectangle into database */
-               ret = dcm_svc_db_insert_face_to_db(scan_item->media_uuid, face_rect_x, face_rect_y, face_rect_w, face_rect_h, face_orientation);
+               ret = dcm_svc_db_insert_face_to_db(scan_item->media_uuid, face_rect_x, face_rect_y, face_rect_w, face_rect_h, face_orientation, uid);
                if (ret != MS_MEDIA_ERR_NONE) {
                        dcm_error("Failed to insert face item into db! ret: %d", ret);
                        goto DCM_SVC_FACE_RECOGNIZE_BUFFER_FAILED;
@@ -154,7 +154,7 @@ int dcm_face_detect_process(dcm_svc_item_s *scan_item, dcm_face_scan_status_e sc
 
 DCM_SVC_FACE_RECOGNIZE_BUFFER_FAILED:
 
-       err = dcm_svc_db_insert_face_to_face_scan_list(scan_item);
+       err = dcm_svc_db_insert_face_to_face_scan_list(scan_item, uid);
        if (err != MS_MEDIA_ERR_NONE)
                dcm_error("Failed to insert face item into face_scan_list! err: %d", err);
 
index c2685ee213760d4819b7a9ce003560ed10e98fb9..2cc649c408f6f6b2a7fad7ffa76f85887161e004 100755 (executable)
@@ -22,7 +22,7 @@
 #include <dcm_svc_debug.h>
 #include <dcm_svc_detect_face.h>
 
-static int __dcm_scan_process(dcm_svc_item_s *scan_item)
+static int __dcm_scan_process(dcm_svc_item_s *scan_item, uid_t uid)
 {
        dcm_face_scan_status_e scan_status = FACE_SCAN_STATUS_NONE;
        int ret = MS_MEDIA_ERR_NONE;
@@ -37,7 +37,7 @@ static int __dcm_scan_process(dcm_svc_item_s *scan_item)
        image_info.decode_type = DCM_IMAGE_FORMAT_I420;
 
        if (g_file_test(scan_item->file_path, G_FILE_TEST_IS_REGULAR)) {
-               ret = dcm_svc_db_check_scanned_by_media_uuid(scan_item->media_uuid, scan_item->modified_time, &scan_status);
+               ret = dcm_svc_db_check_scanned_by_media_uuid(scan_item->media_uuid, uid, &scan_status);
                dcm_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "Failed to get scan item info from db(%d)", ret);
 
                if (scan_status == FACE_SCAN_NO_NEEDED) {
@@ -71,13 +71,13 @@ static int __dcm_scan_process(dcm_svc_item_s *scan_item)
 
                /* If status is refresh, remove all faces and re-insert */
                if (scan_status == FACE_SCAN_REFRESH_NEEDED) {
-                       ret = dcm_svc_db_delete_face_from_db(scan_item->media_uuid);
+                       ret = dcm_svc_db_delete_face_from_db(scan_item->media_uuid, uid);
                        if (ret != MS_MEDIA_ERR_NONE)
                                dcm_error("Failed to dcm_svc_db_delete_face_from_db err: %d", ret);
                }
 
                /* Process face scan */
-               ret = dcm_face_detect_process(scan_item, scan_status, &image_info);
+               ret = dcm_face_detect_process(scan_item, scan_status, uid, &image_info);
                if (ret != MS_MEDIA_ERR_NONE)
                        dcm_error("Failed to process face detection! err: %d", ret);
 
@@ -103,23 +103,17 @@ int dcm_scan_single(const char *file_path, uid_t uid, int *face_count)
        DCM_CHECK_VAL(file_path, MS_MEDIA_ERR_INVALID_PARAMETER);
        DCM_CHECK_VAL(face_count, MS_MEDIA_ERR_INVALID_PARAMETER);
 
-       ret = dcm_svc_db_connect(uid);
-       dcm_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "Fail dcm_svc_db_connect");
-
-       ret = dcm_svc_db_get_scan_image_info_by_path(file_path, &scan_item);
+       ret = dcm_svc_db_get_scan_image_info_by_path(file_path, uid, &scan_item);
        if (ret != MS_MEDIA_ERR_NONE || scan_item == NULL) {
                dcm_error("Failed to dcm_svc_db_get_scan_image_info_by_path err: %d", ret);
-               dcm_svc_db_disconnect();
                return ret;
        }
 
-       ret = __dcm_scan_process(scan_item);
+       ret = __dcm_scan_process(scan_item, uid);
        if (ret != MS_MEDIA_ERR_NONE)
                dcm_error("Failed to process scan job! err: %d", ret);
 
-       dcm_svc_db_get_face_cnt_from_db(scan_item->media_uuid, face_count);
-
-       dcm_svc_db_disconnect();
+       dcm_svc_db_get_face_cnt_from_db(scan_item->media_uuid, uid, face_count);
 
        DCM_SAFE_FREE(scan_item->media_uuid);
        DCM_SAFE_FREE(scan_item->file_path);