Signed-off-by: Angus Salkeld <asalk...@redhat.com>
---
 exec/ipc_glue.c |   49 ++++++++++++++++++++++++++++++++++++-------------
 exec/main.c     |    8 +++++++-
 services/cpg.c  |   10 +++-------
 3 files changed, 46 insertions(+), 21 deletions(-)

diff --git a/exec/ipc_glue.c b/exec/ipc_glue.c
index 9d6e8c8..d1db76c 100644
--- a/exec/ipc_glue.c
+++ b/exec/ipc_glue.c
@@ -588,7 +588,8 @@ static int32_t cs_ipcs_msg_process(qb_ipcs_connection_t *c,
        struct qb_ipc_response_header response;
        struct qb_ipc_request_header *request_pt = (struct 
qb_ipc_request_header *)data;
        int32_t service = qb_ipcs_service_id_get(c);
-       int32_t send_ok;
+       int32_t send_ok = 0;
+       int32_t is_async_call = QB_FALSE;
        ssize_t res = -1;
        int sending_allowed_private_data;
 
@@ -597,25 +598,31 @@ static int32_t cs_ipcs_msg_process(qb_ipcs_connection_t 
*c,
                        request_pt,
                        &sending_allowed_private_data);
 
+       is_async_call = (service == CPG_SERVICE && request_pt->id == 2);
+
        /*
         * This happens when the message contains some kind of invalid
         * parameter, such as an invalid size
         */
-       if (send_ok == -1) {
+       if (send_ok == -EINVAL) {
                response.size = sizeof (response);
                response.id = 0;
                response.error = CS_ERR_INVALID_PARAM;
-               log_printf(LOG_INFO, "%s() invalid message! size:%d error:%d",
-                                       __func__, response.size, 
response.error);
-               qb_ipcs_response_send (c,
+               if (is_async_call) {
+                       log_printf(LOG_INFO, "*** %s() invalid message! size:%d 
error:%d",
+                               __func__, response.size, response.error);
+               } else {
+                       qb_ipcs_response_send (c,
                                &response,
                                sizeof (response));
+               }
                res = -EINVAL;
-       } else {
-               if (send_ok) {
-                       
ais_service[service]->lib_engine[request_pt->id].lib_handler_fn(c, request_pt);
-                       res = 0;
-               } else {
+       } else if (send_ok < 0) {
+               log_printf(LOG_CRIT,
+                       "*** %s() (%d:%d - %d) %s!",
+                       __func__, service, request_pt->id,
+                       is_async_call, strerror(-send_ok));
+               if (!is_async_call) {
                        /*
                         * Overload, tell library to retry
                         */
@@ -623,10 +630,26 @@ static int32_t cs_ipcs_msg_process(qb_ipcs_connection_t 
*c,
                        response.id = 0;
                        response.error = CS_ERR_TRY_AGAIN;
                        qb_ipcs_response_send (c,
-                                       &response,
-                                       sizeof (response));
-                       res = -ENOBUFS;
+                               &response,
+                               sizeof (response));
+               }
+               res = -ENOBUFS;
+       }
+
+       if (send_ok) {
+               if (!is_async_call) {
+                       log_printf(LOG_INFO, "%s() calling %d:%d",
+                               __func__,
+                               service, request_pt->id);
+               }
+               
ais_service[service]->lib_engine[request_pt->id].lib_handler_fn(c, request_pt);
+               if (!is_async_call) {
+                       log_printf(LOG_INFO, "%s() %d:%d done",
+                               __func__,
+                               service, request_pt->id);
                }
+
+               res = 0;
        }
        corosync_sending_allowed_release (&sending_allowed_private_data);
        return res;
diff --git a/exec/main.c b/exec/main.c
index ca744d3..c6bc2de 100644
--- a/exec/main.c
+++ b/exec/main.c
@@ -853,7 +853,7 @@ int corosync_sending_allowed (
                corosync_group_handle,
                &reserve_iovec, 1);
        if (pd->reserved_msgs == -1) {
-               return (-1);
+               return -EINVAL;
        }
 
        sending_allowed = QB_FALSE;
@@ -865,7 +865,13 @@ int corosync_sending_allowed (
                        sending_allowed = QB_TRUE;
                } else if (pd->reserved_msgs && sync_in_process == 0) {
                        sending_allowed = QB_TRUE;
+               } else if (pd->reserved_msgs == 0) {
+                       return -ENOBUFS;
+               } else /* (sync_in_process) */ {
+                       return -EINPROGRESS;
                }
+       } else {
+               return -EHOSTUNREACH;
        }
 
        return (sending_allowed);
diff --git a/services/cpg.c b/services/cpg.c
index dafa54e..6537caa 100644
--- a/services/cpg.c
+++ b/services/cpg.c
@@ -1651,7 +1651,6 @@ static void message_handler_req_lib_cpg_mcast (void 
*conn, const void *message)
 
        struct iovec req_exec_cpg_iovec[2];
        struct req_exec_cpg_mcast req_exec_cpg_mcast;
-       struct res_lib_cpg_mcast res_lib_cpg_mcast;
        int msglen = req_lib_cpg_mcast->msglen;
        int result;
        cs_error_t error = CPG_ERR_NOT_EXIST;
@@ -1690,13 +1689,10 @@ static void message_handler_req_lib_cpg_mcast (void 
*conn, const void *message)
 
                result = api->totem_mcast (req_exec_cpg_iovec, 2, TOTEM_AGREED);
                assert(result == 0);
+       } else {
+               log_printf(LOGSYS_LEVEL_ERROR, "*** %p can't mcast to group %s 
state:%d, error:%d\n",
+                       conn, group_name.value, cpd->cpd_state, error);
        }
-
-       res_lib_cpg_mcast.header.size = sizeof(res_lib_cpg_mcast);
-       res_lib_cpg_mcast.header.id = MESSAGE_RES_CPG_MCAST;
-       res_lib_cpg_mcast.header.error = error;
-       api->ipc_response_send (conn, &res_lib_cpg_mcast,
-               sizeof (res_lib_cpg_mcast));
 }
 
 static void message_handler_req_lib_cpg_zc_execute (
-- 
1.7.3.1

_______________________________________________
Openais mailing list
Openais@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/openais

Reply via email to