limiting appdata post retry, if post is failed 07/182807/1
authorJeonghoon Park <jh1979.park@samsung.com>
Thu, 28 Jun 2018 06:16:04 +0000 (15:16 +0900)
committerJeonghoon Park <jh1979.park@samsung.com>
Thu, 28 Jun 2018 06:16:04 +0000 (15:16 +0900)
Change-Id: I2af72a634da15a2430acc97a67c286f6ba953ca3

daemon/include/ttd-app-data.h
daemon/src/ttd-app-data.c
daemon/src/ttd-app-interface.c

index 9b9218b..ab80421 100644 (file)
@@ -21,7 +21,11 @@ typedef struct __ttd_app_data ttd_app_data;
 
 ttd_app_data *ttd_app_data_new(const char *project, const char *data);
 void ttd_app_data_free(ttd_app_data *app_data);
+int ttd_app_data_set_retry_count(
+       ttd_app_data *app_data, unsigned int count);
 const char *ttd_app_data_get_project_name(ttd_app_data *app_data);
 const char *ttd_app_data_get_data(ttd_app_data *app_data);
+int ttd_app_data_get_retry_count(
+       ttd_app_data *app_data, unsigned int *count);
 
 #endif /* __TT_DAEMON_APP_DATA_H__ */
index b92ead8..28a47b6 100644 (file)
@@ -21,6 +21,7 @@
 struct __ttd_app_data {
        char *p_name;
        char *data;
+       unsigned int retry;
 };
 
 ttd_app_data *ttd_app_data_new(const char *project, const char *data)
@@ -49,6 +50,16 @@ void ttd_app_data_free(ttd_app_data *app_data)
        g_free(app_data);
 }
 
+int ttd_app_data_set_retry_count(
+       ttd_app_data *app_data, unsigned int count)
+{
+       retv_if(!app_data, -1);
+
+       app_data->retry = count;
+
+       return 0;
+}
+
 const char *ttd_app_data_get_project_name(ttd_app_data *app_data)
 {
        retv_if(!app_data, NULL);
@@ -60,3 +71,15 @@ const char *ttd_app_data_get_data(ttd_app_data *app_data)
        retv_if(!app_data, NULL);
        return app_data->data;
 }
+
+int ttd_app_data_get_retry_count(
+       ttd_app_data *app_data, unsigned int *count)
+{
+       retv_if(!app_data, -1);
+       retv_if(!count, -1);
+
+       *count = app_data->retry;
+       app_data->retry--;
+
+       return 0;
+}
index 9257f07..53b3582 100644 (file)
 #include "common-app-inf.h"
 #include "ttd-app-data.h"
 
-#define POST_DATA_URL "http://apitest.showiot.xyz/api/data"
-#define __POST_THREAD_RUN 1
-#define __POST_THREAD_STOP 0
-#define __QUEUE_TIME_OUT 500
-
+#define TTD_APP_DATA_RETRY 2
 #define APP_INF_INTROSPECTION \
 "<node>" \
 "  <interface name='"TTD_APP_INF_BUS_INF"'>" \
@@ -125,7 +121,7 @@ __receive_msg(GIOChannel *ch, GIOCondition cond, gpointer user_data)
                char **strv = NULL;
                int i;
 
-               strv = g_strsplit(msg, "|", -1);
+               strv = g_strsplit(msg, TTD_APP_MSG_DELIMITER, -1);
                for (i = 0; strv[i]; i++) {
                        if (strv[i][0] == '\0') {
                                g_free(strv[i]);
@@ -134,10 +130,12 @@ __receive_msg(GIOChannel *ch, GIOCondition cond, gpointer user_data)
                                ttd_app_data *app_data = NULL;
                                _D("strv[%d] : %s", i, strv[i]);
                                app_data = ttd_app_data_new(data->project, strv[i]);
-                               if (app_data)
+                               if (app_data) {
+                                       ttd_app_data_set_retry_count(app_data, TTD_APP_DATA_RETRY);
                                        g_async_queue_push(data->data_queue, app_data);
-                               else
+                               } else {
                                        _E("failed to creat app_data for %s", strv[i]);
+                               }
                                g_free(strv[i]);
                        }
                }
@@ -591,11 +589,18 @@ static gpointer post_thread(gpointer user_data)
 
                ret = ttd_http_appdata_post(ttd_app_data_get_project_name(app_data),
                        ttd_app_data_get_data(app_data), &res_code);
-               if (!ret) {
-                       _E("failed to post data, retry it - code[%ld]", res_code);
-                       g_async_queue_push_front(handle->data_queue, app_data);
-                       g_usleep((gulong)(G_USEC_PER_SEC/2));
-                       /* 0.5 sec sleep before retry it */
+               if (ret) {
+                       unsigned int retry = 0;
+                       ttd_app_data_get_retry_count(app_data, &retry);
+                       _E("failed to post data - code[%ld], retry[%u]", res_code, retry);
+                       if (retry) {
+                               g_async_queue_push_front(handle->data_queue, app_data);
+                               g_usleep((gulong)(G_USEC_PER_SEC/2));
+                               /* 0.5 sec sleep before retry it */
+                       } else {
+                               _D("drop msg : %s", ttd_app_data_get_data(app_data));
+                               ttd_app_data_free(app_data);
+                       }
                        continue;
                }