From a9c37677f2b1330fbb1c500ad235452b219690b5 Mon Sep 17 00:00:00 2001 From: Jeesun Kim Date: Thu, 21 Jul 2016 13:00:26 +0900 Subject: [PATCH] add retry logic for dbus call error Change-Id: Ib46e88a257c01c3f6c2842c9b60edd9297f35db4 --- client/cal_client_db.c | 87 ++++++++++++++++++++++++++++++----------- client/cal_client_dbus.c | 4 ++ client/cal_client_dbus.h | 1 + packaging/calendar-service.spec | 2 +- 4 files changed, 70 insertions(+), 24 deletions(-) diff --git a/client/cal_client_db.c b/client/cal_client_db.c index a5711bd..3214976 100644 --- a/client/cal_client_db.c +++ b/client/cal_client_db.c @@ -23,6 +23,24 @@ #include "cal_client_handle.h" #include "cal_client_db_helper.h" +#define CAL_DBUS_RETRY_MAX 1 +#define CAL_DBUS_RETRY_CALL(func) \ + int _d_ret = -1; \ + int _d_count = 0; \ + while (CALENDAR_ERROR_NONE != _d_ret) { \ + _d_ret = func; \ + if (CALENDAR_ERROR_NONE == _d_ret) \ + break; \ + _d_count++; \ + if (CAL_DBUS_RETRY_MAX < _d_count) { \ + ERR("retry call: reach max(%d)", _d_count); \ + break; \ + } \ + ERR("retry call:count(%d)", _d_count); \ + cal_dbus_recovery(); \ + } \ + ret = _d_ret; + API int calendar_db_insert_record(calendar_record_h record, int* id) { CAL_FN_CALL(); @@ -34,7 +52,8 @@ API int calendar_db_insert_record(calendar_record_h record, int* id) ret = cal_client_handle_get_p(&handle); RETVM_IF(CALENDAR_ERROR_NONE != ret, ret, "cal_client_handle_get_p() Fail(%d)", ret); - return cal_dbus_insert_record(handle, record, id); + CAL_DBUS_RETRY_CALL(cal_dbus_insert_record(handle, record, id)); + return ret; } API int calendar_db_update_record(calendar_record_h record) @@ -47,7 +66,8 @@ API int calendar_db_update_record(calendar_record_h record) ret = cal_client_handle_get_p(&handle); RETVM_IF(CALENDAR_ERROR_NONE != ret, ret, "cal_client_handle_get_p() Fail(%d)", ret); - return cal_dbus_update_record(handle, record); + CAL_DBUS_RETRY_CALL(cal_dbus_update_record(handle, record)); + return ret; } API int calendar_db_delete_record(const char* view_uri, int id) @@ -61,7 +81,8 @@ API int calendar_db_delete_record(const char* view_uri, int id) ret = cal_client_handle_get_p(&handle); RETVM_IF(CALENDAR_ERROR_NONE != ret, ret, "cal_client_handle_get_p() Fail(%d)", ret); - return cal_dbus_delete_record(handle, view_uri, id); + CAL_DBUS_RETRY_CALL(cal_dbus_delete_record(handle, view_uri, id)); + return ret; } API int calendar_db_replace_record(calendar_record_h record, int record_id) @@ -74,7 +95,8 @@ API int calendar_db_replace_record(calendar_record_h record, int record_id) ret = cal_client_handle_get_p(&handle); RETVM_IF(CALENDAR_ERROR_NONE != ret, ret, "cal_client_handle_get_p() Fail(%d)", ret); - return cal_dbus_replace_record(handle, record, record_id); + CAL_DBUS_RETRY_CALL(cal_dbus_replace_record(handle, record, record_id)); + return ret; } API int calendar_db_get_record(const char* view_uri, int id, calendar_record_h* out_record) @@ -88,7 +110,8 @@ API int calendar_db_get_record(const char* view_uri, int id, calendar_record_h* ret = cal_client_handle_get_p(&handle); RETVM_IF(CALENDAR_ERROR_NONE != ret, ret, "cal_client_handle_get_p() Fail(%d)", ret); - return cal_dbus_get_record(handle, view_uri, id, out_record); + CAL_DBUS_RETRY_CALL(cal_dbus_get_record(handle, view_uri, id, out_record)); + return ret; } API int calendar_db_get_all_records(const char* view_uri, int offset, int limit, calendar_list_h* out_list) @@ -102,7 +125,8 @@ API int calendar_db_get_all_records(const char* view_uri, int offset, int limit, ret = cal_client_handle_get_p(&handle); RETVM_IF(CALENDAR_ERROR_NONE != ret, ret, "cal_client_handle_get_p() Fail(%d)", ret); - return cal_dbus_get_all_records(handle, view_uri, offset, limit, out_list); + CAL_DBUS_RETRY_CALL(cal_dbus_get_all_records(handle, view_uri, offset, limit, out_list)); + return ret; } API int calendar_db_get_records_with_query(calendar_query_h query, int offset, int limit, calendar_list_h* out_list) @@ -116,7 +140,8 @@ API int calendar_db_get_records_with_query(calendar_query_h query, int offset, i ret = cal_client_handle_get_p(&handle); RETVM_IF(CALENDAR_ERROR_NONE != ret, ret, "cal_client_handle_get_p() Fail(%d)", ret); - return cal_dbus_get_records_with_query(handle, query, offset, limit, out_list); + CAL_DBUS_RETRY_CALL(cal_dbus_get_records_with_query(handle, query, offset, limit, out_list)); + return ret; } API int calendar_db_clean_after_sync(int book_id, int calendar_db_version) @@ -128,7 +153,8 @@ API int calendar_db_clean_after_sync(int book_id, int calendar_db_version) ret = cal_client_handle_get_p(&handle); RETVM_IF(CALENDAR_ERROR_NONE != ret, ret, "cal_client_handle_get_p() Fail(%d)", ret); - return cal_dbus_clean_after_sync(handle, book_id, calendar_db_version); + CAL_DBUS_RETRY_CALL(cal_dbus_clean_after_sync(handle, book_id, calendar_db_version)); + return ret; } API int calendar_db_get_count(const char *view_uri, int *out_count) @@ -141,7 +167,8 @@ API int calendar_db_get_count(const char *view_uri, int *out_count) ret = cal_client_handle_get_p(&handle); RETVM_IF(CALENDAR_ERROR_NONE != ret, ret, "cal_client_handle_get_p() Fail(%d)", ret); - return cal_dbus_get_count(handle, view_uri, out_count); + CAL_DBUS_RETRY_CALL(cal_dbus_get_count(handle, view_uri, out_count)); + return ret; } API int calendar_db_get_count_with_query(calendar_query_h query, int *out_count) @@ -155,7 +182,8 @@ API int calendar_db_get_count_with_query(calendar_query_h query, int *out_count) ret = cal_client_handle_get_p(&handle); RETVM_IF(CALENDAR_ERROR_NONE != ret, ret, "cal_client_handle_get_p() Fail(%d)", ret); - return cal_dbus_get_count_with_query(handle, query, out_count); + CAL_DBUS_RETRY_CALL(cal_dbus_get_count_with_query(handle, query, out_count)); + return ret; } API int calendar_db_insert_records(calendar_list_h record_list, int** record_id_array, int* count) @@ -177,7 +205,8 @@ API int calendar_db_insert_records(calendar_list_h record_list, int** record_id_ ret = cal_client_handle_get_p(&handle); RETVM_IF(CALENDAR_ERROR_NONE != ret, ret, "cal_client_handle_get_p() Fail(%d)", ret); - return cal_dbus_insert_records(handle, record_list, record_id_array, count); + CAL_DBUS_RETRY_CALL(cal_dbus_insert_records(handle, record_list, record_id_array, count)); + return ret; } API int calendar_db_update_records(calendar_list_h record_list) @@ -197,7 +226,8 @@ API int calendar_db_update_records(calendar_list_h record_list) ret = cal_client_handle_get_p(&handle); RETVM_IF(CALENDAR_ERROR_NONE != ret, ret, "cal_client_handle_get_p() Fail(%d)", ret); - return cal_dbus_update_records(handle, record_list); + CAL_DBUS_RETRY_CALL(cal_dbus_update_records(handle, record_list)); + return ret; } API int calendar_db_delete_records(const char* view_uri, int record_id_array[], int count) @@ -210,7 +240,8 @@ API int calendar_db_delete_records(const char* view_uri, int record_id_array[], ret = cal_client_handle_get_p(&handle); RETVM_IF(CALENDAR_ERROR_NONE != ret, ret, "cal_client_handle_get_p() Fail(%d)", ret); - return cal_dbus_delete_records(handle, view_uri, record_id_array, count); + CAL_DBUS_RETRY_CALL(cal_dbus_delete_records(handle, view_uri, record_id_array, count)); + return ret; } API int calendar_db_replace_records(calendar_list_h record_list, int *record_id_array, int count) @@ -232,7 +263,8 @@ API int calendar_db_replace_records(calendar_list_h record_list, int *record_id_ ret = cal_client_handle_get_p(&handle); RETVM_IF(CALENDAR_ERROR_NONE != ret, ret, "cal_client_handle_get_p() Fail(%d)", ret); - return cal_dbus_replace_records(handle, record_list, record_id_array, count); + CAL_DBUS_RETRY_CALL(cal_dbus_replace_records(handle, record_list, record_id_array, count)); + return ret; } API int calendar_db_get_changes_by_version(const char* view_uri, int book_id, @@ -248,8 +280,9 @@ API int calendar_db_get_changes_by_version(const char* view_uri, int book_id, ret = cal_client_handle_get_p(&handle); RETVM_IF(CALENDAR_ERROR_NONE != ret, ret, "cal_client_handle_get_p() Fail(%d)", ret); - return cal_dbus_get_changes_by_version(handle, view_uri, book_id, - calendar_db_version, record_list, current_version); + CAL_DBUS_RETRY_CALL(cal_dbus_get_changes_by_version(handle, view_uri, book_id, + calendar_db_version, record_list, current_version)); + return ret; } API int calendar_db_get_current_version(int* current_version) @@ -262,7 +295,8 @@ API int calendar_db_get_current_version(int* current_version) ret = cal_client_handle_get_p(&handle); RETVM_IF(CALENDAR_ERROR_NONE != ret, ret, "cal_client_handle_get_p() Fail(%d)", ret); - return cal_dbus_get_current_version(handle, current_version); + CAL_DBUS_RETRY_CALL(cal_dbus_get_current_version(handle, current_version)); + return ret; } API int calendar_db_add_changed_cb(const char* view_uri, calendar_db_changed_cb callback, void* user_data) @@ -275,7 +309,8 @@ API int calendar_db_add_changed_cb(const char* view_uri, calendar_db_changed_cb ret = cal_client_handle_get_p(&handle); RETVM_IF(CALENDAR_ERROR_NONE != ret, ret, "cal_client_handle_get_p() Fail(%d)", ret); - return cal_dbus_add_changed_cb(handle, view_uri, callback, user_data); + CAL_DBUS_RETRY_CALL(cal_dbus_add_changed_cb(handle, view_uri, callback, user_data)); + return ret; } API int calendar_db_remove_changed_cb(const char* view_uri, calendar_db_changed_cb callback, void* user_data) @@ -288,7 +323,8 @@ API int calendar_db_remove_changed_cb(const char* view_uri, calendar_db_changed_ ret = cal_client_handle_get_p(&handle); RETVM_IF(CALENDAR_ERROR_NONE != ret, ret, "cal_client_handle_get_p() Fail(%d)", ret); - return cal_dbus_remove_changed_cb(handle, view_uri, callback, user_data); + CAL_DBUS_RETRY_CALL(cal_dbus_remove_changed_cb(handle, view_uri, callback, user_data)); + return ret; } API int calendar_db_insert_vcalendars(const char* vcalendar_stream, int **record_id_array, int *count) @@ -303,7 +339,8 @@ API int calendar_db_insert_vcalendars(const char* vcalendar_stream, int **record ret = cal_client_handle_get_p(&handle); RETVM_IF(CALENDAR_ERROR_NONE != ret, ret, "cal_client_handle_get_p() Fail(%d)", ret); - return cal_dbus_insert_vcalendars(handle, vcalendar_stream, record_id_array, count); + CAL_DBUS_RETRY_CALL(cal_dbus_insert_vcalendars(handle, vcalendar_stream, record_id_array, count)); + return ret; } API int calendar_db_replace_vcalendars(const char* vcalendar_stream, int *record_id_array, int count) @@ -317,7 +354,8 @@ API int calendar_db_replace_vcalendars(const char* vcalendar_stream, int *record ret = cal_client_handle_get_p(&handle); RETVM_IF(CALENDAR_ERROR_NONE != ret, ret, "cal_client_handle_get_p() Fail(%d)", ret); - return cal_dbus_replace_vcalendars(handle, vcalendar_stream, record_id_array, count); + CAL_DBUS_RETRY_CALL(cal_dbus_replace_vcalendars(handle, vcalendar_stream, record_id_array, count)); + return ret; } API int calendar_db_get_last_change_version(int* last_version) @@ -330,7 +368,8 @@ API int calendar_db_get_last_change_version(int* last_version) ret = cal_client_handle_get_p(&handle); RETVM_IF(CALENDAR_ERROR_NONE != ret, ret, "cal_client_handle_get_p() Fail(%d)", ret); - return cal_dbus_get_last_change_version(handle, last_version); + CAL_DBUS_RETRY_CALL(cal_dbus_get_last_change_version(handle, last_version)); + return ret; } API int calendar_db_get_changes_exception_by_version(const char* view_uri, @@ -347,6 +386,8 @@ API int calendar_db_get_changes_exception_by_version(const char* view_uri, ret = cal_client_handle_get_p(&handle); RETVM_IF(CALENDAR_ERROR_NONE != ret, ret, "cal_client_handle_get_p() Fail(%d)", ret); - return cal_dbus_get_changes_exception_by_version(handle, view_uri, original_event_id, calendar_db_version, record_list); + CAL_DBUS_RETRY_CALL(cal_dbus_get_changes_exception_by_version(handle, view_uri, + original_event_id, calendar_db_version, record_list)); + return ret; } diff --git a/client/cal_client_dbus.c b/client/cal_client_dbus.c index 7112788..d261bda 100644 --- a/client/cal_client_dbus.c +++ b/client/cal_client_dbus.c @@ -172,6 +172,8 @@ static int _unregister_resource(void) int cal_dbus_start(void) { + CAL_FN_CALL(); + if (cal_dbus_object) { DBG("Already exists"); return CALENDAR_ERROR_NONE; @@ -212,6 +214,8 @@ int cal_dbus_start(void) int cal_dbus_stop(void) { + CAL_FN_CALL(); + if (NULL == cal_dbus_object) { /* LCOV_EXCL_START */ ERR("No object"); diff --git a/client/cal_client_dbus.h b/client/cal_client_dbus.h index ecc04bd..93b6a77 100644 --- a/client/cal_client_dbus.h +++ b/client/cal_client_dbus.h @@ -71,5 +71,6 @@ int cal_dbus_insert_vcalendars(calendar_h handle, const char *stream, int **out_ int *out_count); int cal_dbus_replace_vcalendars(calendar_h handle, const char *stream, int *ids, int count); +int cal_dbus_recovery(void); #endif /* __CAL_CLIENT_DBUS_H__ */ diff --git a/packaging/calendar-service.spec b/packaging/calendar-service.spec index acfc0ac..38d2cc4 100644 --- a/packaging/calendar-service.spec +++ b/packaging/calendar-service.spec @@ -1,6 +1,6 @@ Name: calendar-service Summary: DB library for calendar -Version: 0.1.165 +Version: 0.1.166 Release: 1 Group: System/Libraries License: Apache-2.0 -- 2.7.4