osaf/services/saf/immsv/immnd/immnd_evt.c |  22 ++++++++++++----------
 1 files changed, 12 insertions(+), 10 deletions(-)


For non fevs requests, if the local IMMND can not find the client node
corresponding to the imm-handle sent by the client, then the local IMMND
replies directly with SA_AIS_ERR_BAD_HANDLE, instead of just dropping
the request and causing client to timeout.

This short circuited behavior is not possible for fevs requests,
because such requests are forwarded to the IMMD and broadcast back to all
IMMNDs including the originating node. The originating node's IMMND then no
longer has the reply information on the stack. It expects to find it in the
client node on the heap. If the client node does not exist, then no reply,
not even ERR_BAD_HANDLE, can be sent to the client of that fevs request.

diff --git a/osaf/services/saf/immsv/immnd/immnd_evt.c 
b/osaf/services/saf/immsv/immnd/immnd_evt.c
--- a/osaf/services/saf/immsv/immnd/immnd_evt.c
+++ b/osaf/services/saf/immsv/immnd/immnd_evt.c
@@ -1913,8 +1913,9 @@ static uint32_t immnd_evt_proc_admowner_
        client_hdl = evt->info.adminitReq.client_hdl;
        immnd_client_node_get(cb, client_hdl, &cl_node);
        if (cl_node == NULL || cl_node->mIsStale) {
-               LOG_WA("IMMND - Client %llu went down so no response", 
client_hdl);
-               return rc;
+               LOG_WA("ERR_BAD_HANDLE: Client not found in server");
+               send_evt.info.imma.info.admInitRsp.error = 
SA_AIS_ERR_BAD_HANDLE;
+               goto agent_rsp;
        }
 
        if (!immnd_is_immd_up(cb)) {
@@ -2018,8 +2019,9 @@ static uint32_t immnd_evt_proc_impl_set(
        client_hdl = evt->info.implSet.client_hdl;
        immnd_client_node_get(cb, client_hdl, &cl_node);
        if (cl_node == NULL || cl_node->mIsStale) {
-               LOG_WA("IMMND - Client went down so no response");
-               return rc;
+               LOG_WA("ERR_BAD_HANDLE: Client not found in server");
+               send_evt.info.imma.info.implSetRsp.error = 
SA_AIS_ERR_BAD_HANDLE;
+               goto agent_rsp;
        }
 
        if (!immnd_is_immd_up(cb)) {
@@ -2141,9 +2143,9 @@ static uint32_t immnd_evt_proc_ccb_init(
        client_hdl = evt->info.ccbinitReq.client_hdl;
        immnd_client_node_get(cb, client_hdl, &cl_node);
        if (cl_node == NULL || cl_node->mIsStale) {
-               LOG_WA("IMMND - Client went down so no response");
-               TRACE_LEAVE();
-               return rc;
+               LOG_WA("ERR_BAD_HANDLE: Client not found in server");
+               send_evt.info.imma.info.ccbInitRsp.error = 
SA_AIS_ERR_BAD_HANDLE;
+               goto agent_rsp;
        }
 
        if (!immnd_is_immd_up(cb)) {
@@ -2256,9 +2258,9 @@ static uint32_t immnd_evt_proc_rt_update
        client_hdl = evt->info.objModify.immHandle;
        immnd_client_node_get(cb, client_hdl, &cl_node);
        if (cl_node == NULL || cl_node->mIsStale) {
-               LOG_WA("IMMND - Client went down so no response");
-               TRACE_LEAVE();
-               return rc;
+               LOG_WA("ERR_BAD_HANDLE: Client not found in server");
+               err = SA_AIS_ERR_BAD_HANDLE;
+               goto agent_rsp;
        }
 
        /* Do broadcast checks BEFORE updating model because we dont want

------------------------------------------------------------------------------
Rapidly troubleshoot problems before they affect your business. Most IT 
organizations don't have a clear picture of how application performance 
affects their revenue. With AppDynamics, you get 100% visibility into your 
Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349351&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to